C语言版数据结构 关于四则运算的堆栈问题:请高人指出到底哪儿错了
#include<stdio.h>#include<malloc.h>#include<stdlib.h>//10+65-14/45+25*3//10+(65-14)/4...
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//10+65-14/45+25*3
//10+(65-14)/45+25*3
#define MAXSIZE 40
typedef char datatype;
typedef struct
{
datatype data[MAXSIZE];
int top;
}seqstack;
seqstack *s;
seqstack * initseqstack()//建立栈空间,初始化栈顶指针
{
seqstack *s;
s=(seqstack *)malloc(sizeof(seqstack));
s->top=-1;
return s;
}
int empty(seqstack *s)//判栈是否剩下最后一个元素
{
if(s->top==0)
return 1;
else
return 0;
}
int push(seqstack *s,char x)//入栈
{
if(s->top==MAXSIZE-1)
{
printf("overflow");
return 0;
}
s->top++;
s->data[s->top]=x;
return 1;
}
int pop(seqstack *s)//出栈
{ int a;
a=s->data[s->top];
s->top--;//先判断栈是否为空
return a;
}
datatype top(seqstack *s)//读栈顶元素
{
return (s->data[s->top]);
}
int yunsuan(int c,int d,char e)
{
int a;
if(e=='+')
a=d+c;
if(e=='-')
a=d-c;
if(e=='*')
a=d*c;
if(e=='/')
a=d/c;
return a;
}
void main()
{
seqstack *s;
datatype a,e;
int c,d;
int f;
s=initseqstack();
printf("请输入运算式\n");
scanf("%c",&a);
while(a!='=')
{
//if(a=='(')
if(a==')')
{
c=top(s);
pop(s);
e=(int)top(s);
pop(s);
d=(int)top(s);
pop(s);
pop(s);
push(s,(char)yunsuan(c,d,e));
}
//进栈过程中实现判断
if(a=='*'||a=='/')
{
push(s,a);
printf("please input a number too:\n");
scanf("%c",&a);
c=(int)a;
e=top(s);
pop(s);
d=(int)top(s);
pop(s);
push(s,(char)yunsuan(c,d,e));
}
push(s,a);
scanf("%c",&a);
}
while(!empty(s))
{
c=(int)top(s);
pop(s);
e=top(s);
pop(s);
d=(int)top(s);
pop(s);
push(s,(char)yunsuan(c,d,e));1111
}
f=(int)top(s);
pop(s);
printf("最后的结果是:%d\n",f);
}
不知道哪儿做错了,无法正常运行, 展开
#include<malloc.h>
#include<stdlib.h>
//10+65-14/45+25*3
//10+(65-14)/45+25*3
#define MAXSIZE 40
typedef char datatype;
typedef struct
{
datatype data[MAXSIZE];
int top;
}seqstack;
seqstack *s;
seqstack * initseqstack()//建立栈空间,初始化栈顶指针
{
seqstack *s;
s=(seqstack *)malloc(sizeof(seqstack));
s->top=-1;
return s;
}
int empty(seqstack *s)//判栈是否剩下最后一个元素
{
if(s->top==0)
return 1;
else
return 0;
}
int push(seqstack *s,char x)//入栈
{
if(s->top==MAXSIZE-1)
{
printf("overflow");
return 0;
}
s->top++;
s->data[s->top]=x;
return 1;
}
int pop(seqstack *s)//出栈
{ int a;
a=s->data[s->top];
s->top--;//先判断栈是否为空
return a;
}
datatype top(seqstack *s)//读栈顶元素
{
return (s->data[s->top]);
}
int yunsuan(int c,int d,char e)
{
int a;
if(e=='+')
a=d+c;
if(e=='-')
a=d-c;
if(e=='*')
a=d*c;
if(e=='/')
a=d/c;
return a;
}
void main()
{
seqstack *s;
datatype a,e;
int c,d;
int f;
s=initseqstack();
printf("请输入运算式\n");
scanf("%c",&a);
while(a!='=')
{
//if(a=='(')
if(a==')')
{
c=top(s);
pop(s);
e=(int)top(s);
pop(s);
d=(int)top(s);
pop(s);
pop(s);
push(s,(char)yunsuan(c,d,e));
}
//进栈过程中实现判断
if(a=='*'||a=='/')
{
push(s,a);
printf("please input a number too:\n");
scanf("%c",&a);
c=(int)a;
e=top(s);
pop(s);
d=(int)top(s);
pop(s);
push(s,(char)yunsuan(c,d,e));
}
push(s,a);
scanf("%c",&a);
}
while(!empty(s))
{
c=(int)top(s);
pop(s);
e=top(s);
pop(s);
d=(int)top(s);
pop(s);
push(s,(char)yunsuan(c,d,e));1111
}
f=(int)top(s);
pop(s);
printf("最后的结果是:%d\n",f);
}
不知道哪儿做错了,无法正常运行, 展开
3个回答
展开全部
我就喜欢害人:)
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define ERR -1
#define MAX 100 /*定义堆栈的大小*/
int stack[MAX]; /*用一维数组定义堆栈*/
int top=0; /*定义堆栈指示*/
int push(int i) /*存储运算数,入栈操作*/
{
if(top<MAX)
{
stack[++top]=i; /*堆栈仍有空间,栈顶指示上移一个位置*/
return 0;
}
else
{
printf("The stack is full");
return ERR;
}
}
int pop() /*取出运算数,出栈操作*/
{
int var; /*定义待返回的栈顶元素*/
if(top!=NULL) /*堆栈中仍有元素*/
{
var=stack[top--]; /*堆栈指示下移一个位置*/
return var; /*返回栈顶元素*/
}
else
printf("The stack is empty!\n");
return ERR;
}
void main()
{
int m,n;
char l;
int a,b,c;
int k;
do{
printf("\tAriothmatic Operate simulator\n"); /*给出提示信息*/
printf("\n\tPlease input first number:"); /*输入第一个运算数*/
scanf("%d",&m);
push(m); /*第一个运算数入栈*/
printf("\n\tPlease input second number:"); /*输入第二个运算数*/
scanf("%d",&n);
push(n); /*第二个运算数入栈*/
printf("\n\tChoose operator(+/-/*//):");
l=getche(); /*输入运算符*/
switch(l) /*判断运算符,转而执行相应代码*/
{
case '+':
b=pop();
a=pop();
c=a+b;
printf("\n\n\tThe result is %d\n",c);
printf("\n");
break;
case '-':
b=pop();
a=pop();
c=a-b;
printf("\n\n\tThe result is %d\n",c);
printf("\n");
break;
case '*':
b=pop();
a=pop();
c=a*b;
printf("\n\n\tThe result is %d\n",c);
printf("\n");
break;
case '/':
b=pop();
a=pop();
c=a/b;
printf("\n\n\tThe result is %d\n",c);
printf("\n");
break;
}
printf("\tContinue?(y/n):"); /*提示用户是否结束程序*/
l=getche();
if(l=='n')
exit(0);
}while(1);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询