#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NN 100
struct wq
{
char x; //值
wq* link; //链接
};
//栈中元素个数
int all=0;
//入栈
void push(wq* me,char op);
//输出栈中元素
void display(wq* me);
//查找栈中元素的级别
int find(wq * me);
//找到尾指针
wq * set(wq * me);
void main()
{
char a[NN]; // 定义一个数组接受输入
cout<<"输入表达式:"<<endl;
gets(a);
int low=222,high=0; //标识运算符的级别
wq * who = new wq; //创建空栈
who->link=NULL;
for(int o=0;o<NN && a[o]!='\0';o++) //遍历表到式
{
switch(a[o])
{
case '$':
low =9;break;
case '*':
case '/':
low = 7;break;
case '+':
case '-':
low = 5;
break;
case '(':
low=13;
break;
case ')':
low=333;
break;
default:
low = 222;
break;
};
if(low==333)
{
display(who);
low=find(who);
}
else if(low==222 || low<high || low==high) //没有算术运算符 && 不为"("括号
{
cout<<a[o];
}
else
{
push(set(who),a[o]);
if(low==13)
high = 0;
else
high = low;
}
}
display(who);
cout<<"\t\t\t\ta"<<"\n";
flushall();
cout<<"\t\t\t\ta"<<"\n";
flushall();
flushall();
getchar();
}
//入栈
void push(wq* me,char op)
{
me->link = new wq;
me->link->x= op;
me->link->link=NULL;
all++;
}
//出栈
void display(wq* me)
{
wq * here=me; //保存头指针
bool real=true;
while(real)
{
me=here; //还原头指针
for(int p=0;p<all;p++)
me = me->link; //防止产生出栈指针
if(me->x=='('|| all==0)
{
real=false;
}
else
{
cout<<me->x;
}
if(all!=0)
free(me);
all--;
}
}
int find(wq * me)
{
int num;
for(int i=0;i<all;i++)
me=me->link;
switch (me->x)
{
case '$':
num =9;break;
case '*':
case '/':
num = 7;break;
case '+':
case '-':
num = 5;
break;
default:
num = 222;
break;
};
return num;
}
//重置尾指针
wq * set(wq * me)
{
for(int i=0;i<all;i++)
me=me->link;
me->link=NULL;
return me;
}