C实现中缀表达式转换为后缀表达式,运行之后出现停止工作的框
我在看一个视频学习数据结构,然后构建栈的函数是我自己写的,我觉得应该没有写错。实现中缀转后缀是看视频学的。我感觉代码好像没啥问题,每次build的时候也不会报错,但一旦run就会出现图中的问题,结果是跑出来了,也是对的,但就是出现这样的问题?求解各位大神!谢谢!
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct SingleList
{
char data;
struct SingleList *next;
}LIST, *LPLIST;
LPLIST CreateNode(char data)
{
LPLIST newNode = (LPLIST)malloc(sizeof(LIST));
newNode->data = data;
newNode->next = NULL;
}
typedef struct ListStack
{
LPLIST top;
int size;
}STACK, *LPSTACK;
LPSTACK CreateStack()
{
LPSTACK S = (LPSTACK)malloc(sizeof(STACK));
S->top = NULL;
S->size = 0;
return S;
}
int IsEmptyStack(LPSTACK S)
{
if(S->size==0)
return 1;
else
return 0;
}
void Push(LPSTACK S, char data)
{
LPLIST newNode = CreateNode(data);
newNode->next = S->top; //先连接
S->top = newNode; //后断开
S->size++;
}
char Pop(LPSTACK S)
{
char c;
if(IsEmptyStack(S))
{
printf("栈已空,无法出栈\n");
return;
}
c= S->top->data;
LPLIST node = S->top->next;
free(S->top);
S->top = node;
S->size--;
return c;
}
int main()
{
char c,e;
LPSTACK S = CreateStack();
printf("请输入中缀表达式:");
c = getchar();
while(c!='\n')
{
if(c>='0' && c<='9')
printf("%c\t",c);
else if(')' == c)
{
e = Pop(S);
while( '(' != e)
{
printf("%c\t",e);
e = Pop(S);
}
}
else if('+' == c || '-'== c ) //这表明栈顶符号比c高级,所以应该将栈顶符号一直弹出,直到可以压栈为止
{
if(IsEmptyStack(S))
Push(S,c);
else
{
do
{
e = Pop(S);
if ('(' == e)
Push(S,e);
else
printf("%c\t",e);
}while(!IsEmptyStack(S) && '(' != e);
Push(S,c);
}
}
else if('*' == c || '/'== c || '(' == c)
Push(S,c);
else
{
printf("\n输入格式错误");
return -1;
}
c = getchar();
}
while(S->top->data != '#')
printf("%c\t",Pop(S));
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论