您的位置:首页 > 理论基础 > 数据结构算法

数据结构作业

2015-11-20 23:39 549 查看
迷宫问题,还非得用一下栈T_T

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
const int Max=1000;
class stack
{
private:
int a[Max];
int top;
public:
stack() {top=-1;};
~stack() {};
bool is_empty() {return top==-1?1:0;};
bool push(int x) {a[++top]=x;};
bool pop();
int gettop() {return a[top];};
};
bool stack::pop()
{
if(!is_empty())
{
top--;
return 1;
}
return 0;
}

class stackch
{
private:
char a[Max];
int top;
public:
stackch() {top=-1;};
~stackch() {};
bool is_empty() {return top==-1?1:0;};
bool push(int x) {a[++top]=x;};
bool pop();
char gettop() {return a[top];};
};
bool stackch::pop()
{
if(!is_empty())
{
top--;
return 1;
}
return 0;
}

stack num;
stackch ch;
char str[Max];
char s,st;
int t;
int len,pos=0;
map<char,int> sign;
void init()
{
sign.insert(pair<char,int>('#',0));
sign.insert(pair<char,int>(')',1));
sign.insert(pair<char,int>('+',2));
sign.insert(pair<char,int>('-',2));
sign.insert(pair<char,int>('*',3));
sign.insert(pair<char,int>('/',3));
sign.insert(pair<char,int>('(',4));
}
void Operator(char p)
{
int n1=num.gettop();
num.pop();
int n2=num.gettop();
num.pop();
//cout<<n1<<n2<<p<<endl;
switch(p)
{
case '*':num.push(n1*n2);break;
case '/':num.push(n2/n1);break;
case '+':num.push(n2+n1);break;
case '-':num.push(n2-n1);break;
}
}
int main()
{
init();
ch.push('#');
num.push(0);
cin>>str;
len=strlen(str);
while(pos<len)
{
int n=0;
bool flag=0;
while(str[pos]<='9'&&str[pos]>='0')
{
int ch=str[pos]-'0';
n=n*10+ch;
pos++;
flag=1;
}
if(flag) {num.push(n);continue;}
s=str[pos];
st=ch.gettop();
if((st=='('&&s==')')||(st=='#'&&s=='#')) {ch.pop();pos++;continue;}
if(st=='(')    {ch.push(s);pos++;continue;}
if(sign[st]>=sign[s])    {Operator(st);ch.pop();continue;}
ch.push(s);
pos++;
}
cout<<num.gettop()<<endl;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: