#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define MAXBUFFER 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
//创建一个栈
void InitStack(sqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s->base)
exit(0);
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
void Push(sqStack *s,ElemType e)
{
if(s->top - s->base >= s->stackSize)
{
s->base = (ElemType *)realloc(s->base,(s->stackSize+STACKINCREMENT)*sizeof(ElemType));
if(!s->base)
exit(0);
*(s->top)=e;
s->top++;
}
}
void Pop(sqStack *s,ElemType *e)
{
if(s->top == s->base)
{
return ;
}
*e = *--(s->top);
}
int StackLen(sqStack s)
{
return (s.top-s.base);
}
int main()
{
sqStack s;
char c,e;
InitStack(&s);
printf("请按逆波兰表达式输入带计算数据,数据与运算符之间用空格隔开,以#作为结束标志:\n");
scanf("%c",&c);
while(c!='#')
{
while(c>='0'||c<='9')
{
printf("%c",c);
scanf("%c",&c);
if(c<'0'||c>'9')
{
printf(" ");
}
}
if(')'==c)
{
Pop(&s,&e);
while('('!=e)
{
printf("%c",e);
Pop(&s,&e);
}
}
else if('+'==c||'-'==c)
{
if(!StackLen(s))
{
Push(&s,c);
}
else
{
do
{
Pop(&s,&e);
if('('==e)
{
Push(&s,e);
}
else
{
printf("%d",e);
}
}while(StackLen(s)&&'('!=e);
Push(&s,c);
}
}
else if('*'==c||'/'==c || '('==c)
{
Push(&s,c);
}
else if('#'==c)
{
break;
}
else
{
printf("\n出错,输入格式错误!\n");
return -1;
}
scanf("%c",&c);
}
while(StackLen(s))
{
Pop(&s,&e);
printf("%c ",e);
}
return 0;
}
小编第一次学,零基础,有点懵,可以的话给点参考意见 T-T.......文章来源地址https://www.toymoban.com/news/detail-661229.html
文章来源:https://www.toymoban.com/news/detail-661229.html
到了这里,关于数据结构--栈和队列3.2(中缀--》后缀)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!