C语言用栈实现中缀表达式转后缀表达式

qq_33897666 2016-03-04 02:44:43
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 99
typedef struct node
{
int data;
struct node *pnext;
}NODE,*PNODE;
typedef struct stack
{
PNODE Ptop;
PNODE Pbottom;
}STACK,*PSTACK;
void zhuanghuan(char *pzhong,char *phou);
void chushihua(PSTACK pS);
void push(PSTACK pS,char val);
void bianli(PSTACK pS);
char pop(PSTACK pS);
char Gotop(PSTACK pS);
int main(void)
{
char zhong[MAXSIZE],hou[MAXSIZE];
printf("请输入中缀表达式:\n");
gets(zhong);
zhuanghuan(zhong,hou);
printf("后缀表达式:%s\n",hou);
return 0;
}
char Gotop(PSTACK pS)
{
char g;
if(empty(pS))
{
printf("栈为空");
}
else
{
g=pS->Ptop->data;
}
return g;
}
void zhuanghuan(char *pzhong,char *phou)
{
char ch;
char g;
char c;
int i=0,j=0;
STACK S;
chushihua(&S);
ch=pzhong[i];
while(ch!='\0')
{
switch(ch)
{
case '(':
push(&S,ch);
break;
case ')':
g=Gotop(&S);
while(g!='(')
{
c=pop(&S);
phou[j]=c;
j++;
g=Gotop(&S);
}
c=pop(&S);
break;
case '+':
case '-':
g=Gotop(&S);
while(g!='(')
{
c=pop(&S);
phou[j]=c;
j++;
g=Gotop(&S);
}
push(&S,ch);
break;
case '*':
case '/':
g=Gotop(&S);
while(g!='('&&g!='+'&&g!='-')
{
c=pop(&S);
phou[j]=c;
j++;
g=Gotop(&S);
}
push(&S,ch);
break;
default:
while(ch>='0'<='9')
{
phou[j]=ch;
j++;
ch=pzhong[i];
i++;

}
ch=pzhong[i];
i++;
}
}
while(!empty(&S))
{
c=pop(&S);
phou[j]=c;
j++;
}
phou[j]='\0';

}
void chushihua(PSTACK pS)
{
pS->Ptop=(PNODE)malloc(sizeof(NODE));
if(pS->Ptop==NULL)
{
printf("分配内存失败");
exit(-1);
}
else
{
pS->Pbottom=pS->Ptop;
pS->Ptop->pnext=NULL;
}
return;
}
void push(PSTACK pS,char val)
{
PNODE pnew=(PNODE)malloc(sizeof(NODE));
pnew->data=val;
pnew->pnext=pS->Ptop;
pS->Ptop=pnew;
return;
}
void bianli(PSTACK pS)
{
PNODE p=pS->Ptop;
while(p!=pS->Pbottom)
{
printf("%d\n",p->data);
p=p->pnext;
}
return;
}
bool empty(PSTACK pS)
{
if(pS->Ptop==pS->Pbottom)
return true;
else
return false;
}
char pop(PSTACK pS)
{
char ch;
PNODE p;
if(empty(pS))
{
printf("栈为空");
}
else
{
p=pS->Ptop;
ch=p->data;
pS->Ptop=p->pnext;
free(p);
p=NULL;
return ch;
}
}
代码已经写好了,但不知道哪里错了,求大神帮忙改改。
...全文
315 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
做一门精致,全面详细的 java数据结构与算法!!!让天下没有难学的数据结构,让天下没有难学的算法,不吹不黑,我们的讲师及其敬业,可以看到课程视频,课件,代码的录制撰写,都是在深夜,如此用心,其心可鉴,他不掉头发,谁掉头发???总之你知道的,不知道的,我们都讲,并且持续更新,走过路过,不要错过,不敢说是史上最全的课程,怕违反广告法,总而言之,言而总之,这门课你值得拥有,好吃不贵,对于你知识的渴求,我们管够管饱话不多说,牛不多吹,我们要讲的本门课程内容:稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、、前缀、中缀后缀表达式中缀表达式换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧