求帮忙修改c++程序,下面是用栈计算后辍表达式值的程序,请把错误和为什么错写出来,感激不尽

#include"stdio.h"
#include"string.h"
#include"malloc.h"
struct seqstack
{
int maxnum;
int t;
struct seqstack *s;
};
typedef struct seqstack *pseqstack;
pseqstack creatnullstack(pseqstack pastack,int m)
{
pastack=(pseqstack)malloc(sizeof(struct seqstack));
if(pastack!=NULL)
{
pastack->s=(struct seqstack*)malloc(sizeof(struct seqstack)*m);
if(pastack->s)
{
pastack->maxnum=m;
pastack->t=-1;
return pastack;
}
else
free(pastack);
}
else
printf("out of space!");
return 0;
}
pseqstack push(pseqstack pastack,int x)
{
if(pastack->t>=maxnum)
printf("overflowed!\n");
else
{
pastack->t=pastack->t+1;
pastack->s[pastack->t]=x;
}
}
pseqstack top(pseqstack pastack)
{
if(pastack->t=-1)
printf("undefflowde!\n");
else
{
return (pastack->s[pastack->t])
pastack->t=pastack->t-1;
}
}
int calculation(String B,pseqstack pastack)
{
char a[];
int i,n,a,b,c;
strcpy(a[],B);
n=strlen(B);
for(i=0;i<n;i++)
{
if(a[i]!='+'&&a[i]!='-'&&a[i]!='*'&&a[i]!='/'&&a[i]!='#')
push(pseqstack pastack,a[i]);
else
{
a=top(pastack);
b=top(pastack);
}
if(a[i]=='+')
d=a+b;
if(a[i]=='-')
d=b-a;
if(a[i]=='*')
d=a*b;
if(a[i]=='/')
d=b/a;
push(pastack,d);
}
printf("%d",pastack->s[pastack->t]);
}
main()
{
pseqstack pastack1=creatnullstack(pseqstack pastack,int 100);
String b;
printf("以#为结束,例如,输入2 3,请输入2 3#");
printf("请输入后辍表达式:");
scanf("%s",b);
calculation(string b,pseqstack pastack1);
}

第1个回答  2011-10-24
你的代码只要支持1位数的加减乘除吗?

你的代码错误很多,声明和调用混乱,还有一些其他语法和逻辑错误。我时间不多,只改了程序,没时间加注释和说明了。你使用UltraCompare对比程序查找修改部分吧。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"

typedef int DataType;
struct seqstack
{
int maxnum;
int t;
DataType *s;
};
typedef struct seqstack *pseqstack;
pseqstack creatnullstack(pseqstack pastack,int m)
{
pastack=(pseqstack)malloc(sizeof(struct seqstack));
if(pastack!=NULL)
{
pastack->s=(DataType*)malloc(sizeof(DataType)*m);
if(pastack->s)
{
pastack->maxnum=m;
pastack->t=-1;
return pastack;
}
else
free(pastack);
}
else
printf("out of space!");
return 0;
}
int push(pseqstack pastack,DataType x)
{
if(pastack->t >= pastack->maxnum)
{
printf("overflowed!\n");
return 0;
}
else
{
pastack->t=pastack->t+1;
pastack->s[pastack->t]=x;
return 1;
}
}
int pop(pseqstack pastack,DataType &x)
{
if(pastack->t==-1)
{
printf("undefflowde!\n");
return 0;
}
else
{
x=pastack->s[pastack->t];
pastack->t=pastack->t-1;
return 1;
}
}
int calculation(char A[],pseqstack pastack)
{
int i,n,a,b,d;
n=strlen(A);
for(i=0;i<n;i++)
{
if(A[i]=='#')
{
break;
}
else if(A[i]!='+'&&A[i]!='-'&&A[i]!='*'&&A[i]!='/'&&A[i]!='#')
{
push(pastack,A[i]-'0');
}
else
{
pop(pastack,a);
pop(pastack,b);
if(A[i]=='+')
d=a+b;
else if(A[i]=='-')
d=b-a;
else if(A[i]=='*')
d=a*b;
else if(A[i]=='/')
d=b/a;
push(pastack,d);
}
}
printf("%d",pastack->s[pastack->t]);
return 1;
}

int main()
{
pseqstack pastack1=creatnullstack(pastack1,100);
char b[100];
printf("以#为结束,例如,输入2+3,请输入23+#");
printf("请输入后辍表达式:");
scanf("%s",b);
calculation(b,pastack1);
system("pause");
return 0;
}本回答被提问者采纳

求帮忙修改c++程序,下面是用栈计算后辍表达式值的程序,请把错误和为...
\/\/push(pseqstack pastack,a[i]); 直接传值就可以了,不用加类型说明,还有就是函数参数是int型的,最好加个转换让自己看得明白点 push(pastack,(int)a[i]);else { \/\/a=top(pastack);\/\/b=top(pastack); 这两句没看明白,我猜你是想得到栈顶元素的数据,因为把a定义成b1了,就改b1...

求帮忙修改c++程序,下面是用栈计算后辍表达式值的程序,请把错误和为...
你的代码错误很多,声明和调用混乱,还有一些其他语法和逻辑错误。我时间不多,只改了程序,没时间加注释和说明了。你使用UltraCompare对比程序查找修改部分吧。include "stdio.h"include "stdlib.h"include "string.h"include "malloc.h"typedef int DataType;struct seqstack { int maxnum;int t;DataT...

如何用C++编写个程序中缀表达式变成后缀表达式,并用后缀表达式求值
11 11 + 计算22-11并将结果压OPND栈11 11 2 * 2 2 出OPND栈11 11 * 11 11 出OPND栈11 22 + 计算11*2并将结果压OPND栈11 22 - 22 22 出OPND栈11 - 11 11 出OPND栈-11 + 计算11-22并将结果压OPND栈-11 -10 - -10 -10 出OPND栈-11 - -11 -11 出OPND栈-1 + 计算-11--10并将结...

帮忙解C++作业,关于stack的编写使用stack来评估一个算术表达式的程序...
else if(ch=='(') \/\/左括号压入栈中 { s.push('('); \/\/压栈

求帮遍一个C++程序。
4、 接着编写清除程序,要清屏,开头要包括windows和stdlib函数。当执行完输出语句后要对接下来的输入的字符进行判断,如果输入为C则执行清屏语句system("CLS"),然后用goto语句进行循环使程序跳到loop1即开始新的计算,如果输入为Q,则程序跳到loop2,使程序关闭。5、 程序的N—S流程图如下 2、实现...

...c++的问题想问下各位。以下是一个堆栈操作的程序,但是呢,编译后,出 ...
(1)有iostream.h这个头文件吗?要么是"#include <iostream>",要么是"#include <stdio.h>"(2)类定义最后的“}”后应该有“;”(3)定义类成员top写成了pop (4)定义类的成员函数应该是phsh,但写成了pusn 粗心,大意,作为程序员,要改 程序我已经检查过了,按照我这个去改,就能完成你想要的...

请问这段c++程序为什么出错?
p='E';是表示把'E'这个字符保存到常量字符串"abcd"的首字符位置,也就是给常量再赋值,这显然不可能。=== 把p指向的内容改变为'E',你应该写 p=& 'E',而不是*p='E'(值得注意的是,你前面p的定义已经是“指向常量串的指针”,也就是p只能指向常量,而'E'的确是常量,所以是可以的)。

c++中两栈共享代码,不知道为什么执行压栈操作的时候会错,代码没有错误...
int[6];而在push(int i, int val)中您用到了 pBase[++top1] = val;这里调用的是类体中定义的pBase,但其实您还未对其进行初始化(您只是初始化了构造函数中的那个pBase),所以才会出现错误!建议您把构造函数中的 int *pBase=new int[6];改为 pBase=new int[6];希望能帮到您!

怎么让c++写的程序运行后显示第一步出错
生成代码。把“project->配置属性->c\/c++->代码生成->基本运行时检查设置为默认值,就没有这样的错误了。关于MSDN的解释是在堆栈外面读写某数据。错误是名为RTC1的编译器检测的。又看了更多的技术文章,发现这样的错误是程序员在项目到了一定大的时候,它占用的堆栈量就比较大。

数据结构中(C++)用栈实现中缀表达式的求值,要求是先将中缀表达式变为后...
利用栈将中缀表达式表示成树,后续遍历就得到后序表达式 至于求值还是对中缀表达式求值

相似回答
大家正在搜