就是把中缀写为后缀。1+2写成12+。
就是栈的应用。难度不大,但是很蛋疼。。。因为调试了好久才过。。
具体思路就是碰到数字直接输出,碰到新符号之后先和栈顶符号比较,优先级大就入栈,小的话就出栈,并且输出,再比较下一个。知道优先级比新符号小,新符号入栈。
涉及到很多细节问题,需要思维比较细= =。比如左右括号问题。左括号不管三七二十一直接入栈,然后其他符号也可以在左括号后压栈。碰到右括号,就一直出栈(不能只出一个,(1-2*3)+4这种),直到将匹配的左括号也出来。也就是说,左括号优先级为任意数,右括号优先级最低。
#include
#include
#include
typedef struct snode
{
char data;
struct snode *next;
}snode;
typedef struct linkstack
{
snode *top;
}linkstack;
void creatstack(linkstack *s)
{
s->top=NULL;
}
int isempty(linkstack *s)
{
return s->top == NULL;
}
void push(linkstack *s,char x)
{
snode *p=(snode *)malloc(sizeof(snode));
p->data=x;
p->next=s->top;
s->top=p;
}
char pop(linkstack *s)
{
char t;
snode *p=s->top;
if(isempty(s))
{
printf("empty\n");
}
else
{
}
return t;
}
char gettop(linkstack *s)
{
else
}
void print(linkstack *s)
{
snode *p=s->top;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int match(char b)
{
}
int main()
{
}