复习栈

编程入门 行业动态 更新时间:2024-10-28 11:31:25

复习栈

复习栈

复习栈

通过读取文件,实现一个迷宫,利用bfs,找出路径,


/***************************************************************Description: Inplement a maze and print the path with different symbols
Author: chendt
Version: 1.0
Date: 2021.3..23
History: So far,no changes.     ****************************************************************/
#include<iostream>
#include <fstream>
#include<iomanip>
using namespace std;
/*[Linked list---> Stack]  Use Linked lists to create a Stack,a struct is a nodes in Linked list.*/
typedef struct Stack_Element 
{int Maze_x,Maze_y;   /* X-coordinates,Y-coordinates */ struct Stack_Element * next;        
}* pointer; 
pointer ps=NULL; /* Top pointer of the Stack*/
int start_x,start_y,end_x,end_y; /*start and end coordinates of the maze*/
int row,column; /*the size of the maze*/
const int Maxsize=20; /*the Maxsize of the maze about row and column*/
int Maze[Maxsize][Maxsize]; /*use array to store the maze */
void Pop()        
{if(ps==NULL)cout<<"Stack empty,";else{pointer p;p = ps;ps=ps->next;free(p);  }}
void push(int x,int y)     
{pointer t=(pointer)malloc(sizeof(struct Stack_Element));t ->Maze_x=x;t->Maze_y=y;t->next=NULL;if(ps==NULL)ps=t;else{t->next=ps;ps=t;}
}
void readMaze() /*read data from txt file and print the digital maze */
{ifstream myfile("in.txt"); if (!myfile.is_open()){cout << "can not open this file" << endl;}else{myfile>>row;myfile>>column;myfile>>start_x;myfile>>start_y;myfile>>end_x;myfile>>end_y;for ( int i = 0; i <= row+1; i++){for(int j=0;j<=column+1;j++){if(i==0||i>=row+1||j==0||j>=column+1){Maze[i][j]=1;cout<<Maze[i][j]<<" ";}else{myfile>>Maze[i][j];cout<<Maze[i][j]<<" ";}}cout<<endl;}}myfile.close();
}
void printMaze(int row,int column) /*print the pattern of the maze*/
{	for(int i=0; i<row;i++){for(int j=0;j<column;j++){if(Maze[i][j]==1)cout<<"#"<<" "; /*symbol"#" marked as wall of the maze*/else if(Maze[i][j]==2)cout<<"*"<<" "; /*symbol"*" marked as position wallked*/else if(Maze[i][j]==3)cout<<"@"<<" "; /*symbol"@" marked as a dead end*/else if(Maze[i][j]==0)cout<<"  ";   /*the spaces" " marked as position walkable but untraveled*/}cout<<endl;}
}
/**************************************************************
Function: Mazepath
Description: use DFS algorithm to seach a path
Calls: printMaze()
**************************************************************/
void Mazepath()    
{int i=start_x,j=start_y;Maze[i][j]=2; //number 2 marked the position walkedpush(i,j);while (i!=end_x || j!=end_y){if(ps==NULL){cout<<"There is no one path from ( "<<start_x<<","<<start_y<<" ) "<<"to ( "<<end_x<<","<<end_y<<")."<<endl;break;}else{if(Maze[i][j+1]==0) /*judge whether it can be moved to the right*/{j++;Maze[i][j]=2; /*marked this position hass passed*/push(i,j);}else if(Maze[i+1][j]==0) /*judge whether it can be moved to the up*/{i++;Maze[i][j]=2;push(i,j);}else if(Maze[i][j-1]==0) /*judge whether it can be moved to the left*/{j--;Maze[i][j]=2;push(i,j);}else if(Maze[i-1][j]==0) /*judge whether it can be moved to the down*/{i--;Maze[i][j]=2;push(i,j);}else{Maze[i][j]=3;Pop();i=ps->Maze_x;j=ps->Maze_y;}}}printMaze(end_x+2,end_y+2);
}int main()                     
{readMaze();cout<<endl;Mazepath();return 0;
}

算中缀表达式的值

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
const int Maxsize=40;
string expression;
char profix[Maxsize];
int j=0;
typedef struct StackOperator
{char Operator;struct StackOperator * next;
}*pointer;
pointer p=NULL;
void push(char data)
{pointer node=(pointer)malloc(sizeof(struct StackOperator));node->Operator=data;node->next=NULL;if(p==NULL)p=node;else{node->next=p;p=node;}
}
void pop()
{pointer d=p;p=p->next;free(d);
}char getTopDate()
{return p->Operator;
}int getPriority(char op)
{int prioritysize;if(op=='(')prioritysize=1;if(op=='+'||op=='-')prioritysize=2;if(op=='*'||op=='/')prioritysize=3;return prioritysize;
}
int comparePriority(char operator1,char operator2)
{int op1=getPriority(operator1);int op2=getPriority(operator2);if(op1>op2)return 1;else if(op1==op2)return 0;elsereturn -1;
}
void transform()
{cin>>expression;for(int i=0;i<expression.length();i++){char date=expression[i];char nextdate=expression[i+1];if(date>='0' && date<='9'){profix[j]=date;j++;if(nextdate=='+' || nextdate=='-' || nextdate=='*' ||nextdate=='/' ){profix[j]=' ';j++;}}else if(date == '('){push(date);}else if(date == ')'){while(getTopDate() != '('){profix[j]=getTopDate();j++;pop();}if(getTopDate()=='(')pop();}else{if(!p)push(date);else{if(comparePriority(getTopDate(),date)==-1) {push(date);}else{if(comparePriority(getTopDate(),date) == 1 ){profix[j]=getTopDate();j++;pop();if(p && comparePriority(getTopDate(),date) == 0){profix[j]=getTopDate();j++;pop();}push(date);continue;}if(comparePriority(getTopDate(),date) == 0){profix[j]=getTopDate();j++;pop();push(date);}}}}}while(p){profix[j]=p->Operator;j++;p=p->next;}}typedef struct StackOperant
{int Operant;struct StackOperant* next;}* pointer1;
pointer1 t=NULL;
void push2(int date)
{pointer1 node =(pointer1)malloc(sizeof(struct StackOperant));node->Operant=date;node->next=NULL;if(t==NULL)t=node;else{node->next=t;t=node;}
}
void pop2()
{pointer1 temp=t;t=t->next;free(temp);
}
int getOperant()
{return t->Operant;
}
int evaluation()
{int small,big,g,tm;for(int c=0;c<j;c++){char date=profix[c];if(date>='0' && date<='9'){int temp=(int)date-48;g=c+1;while(profix[g]!=' ' && profix[g]!='+' && profix[g]!='-' && profix[g]!='*' && profix[g]!='/'){temp=temp*10+(int)profix[g]-48;c++;g++;}push2(temp);}else{if(date==' ')continue;else{small=getOperant();pop2();big=getOperant();pop2();if(date == '+'){push2(big+small);}else if(date == '-'){push2(big-small);}else if(date == '*'){push2(big*small);}else{push2(big/small);}}}}return t->Operant;
}/*  switch(date){case '+':push2(big+small);case '-':push2(big-small);case '*':push2(big*small);case '/':push2(big/small);}*/int main()
{cout<<"Enter the expression: "<<endl;transform();cout<<"The Postfix is: ";for(int i=0; i<j; i++){char date=profix[i];cout<<date;}cout<<endl<<"Profix has trosformed!"<<endl;cout<<"the evalution of Profix is: ";cout<< evaluation()<<endl;}

更多推荐

复习栈

本文发布于:2024-03-14 20:59:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1737316.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!