习题3.4
4.从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“$”作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/ 四种运算。例如:234 34+2×$。
完整代码:
#include <iostream>
#include <string.h>
using namespace std;
typedef int Status;
typedef int TypeStack;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAX 100 //栈空间初始大小
//顺序栈
typedef struct SqStack
{
TypeStack *top; //栈顶指针
TypeStack *base; //栈底指针
int size; //当前栈空间的大小
} SqStack;
void readan(SqStack &S);
double Postfix(SqStack &S);
bool EmptyStack(SqStack S)
{
if (S.top == S.base)
return true;
else
return false;
}
Status InitStack(SqStack &S)
{
S.base = new TypeStack[MAX];
if (!S.base)
exit(OVERFLOW);
S.top = S.base;
S.size = MAX;
return OK;
}
Status push(SqStack &S, TypeStack e)
{
if (S.top - S.base == S.size)
{
cout << "栈满!" << endl;
return ERROR;
}
*S.top = e;
*S.top++;
return OK;
}
Status Pop(SqStack &S, TypeStack &e)
{
if (S.top == S.base)
{
cout << "栈为空" << endl;
return ERROR;
}
*--S.top;
e = *S.top;
return OK;
}
TypeStack GetTop(SqStack S)
{
if (S.top != S.base)
return *(S.top - 1);
}
Status PrintStack(SqStack S)
{
TypeStack *x = S.base;
while (x < S.top)
{
cout << *x << " ";
x++;
}
return OK;
}
Status somepush(SqStack &S)
{
int num;
int i = 0;
TypeStack n;
cout << "输入元素个数n,初始化栈" << endl;
cin >> num;
cout << "请依次输入元素:" << endl;
while (1)
{
cin >> n;
push(S, n);
i++;
if (i == num)
break;
}
}
int main()
{
double x;
SqStack S;
InitStack(S);
x = Postfix(S);
cout << x;
PrintStack(S);
return 0;
}
double Postfix(SqStack &S)
{
char data[1000];
double num;
int i = 0;
char ch;
int a = 0, b = 0;
num = 0.0;
ch = getchar();
while (ch != '$')
{ char data[1000]={'\0'};
i = 0;
while ((ch >= '0' && ch <= '9') || ch == '.')
{
data[i] = ch;
i++;
ch = getchar();
}
num = atof(data);
push(S, num);
switch (ch)
{
case ' ':
break;
case '+':
Pop(S, b);
Pop(S, a);
push(S, a + b);
break;
case '-':
Pop(S, b);
Pop(S, a);
push(S, a - b);
break;
case '*':
Pop(S, b);
Pop(S, a);
push(S, a * b);
break;
case '/':
Pop(S, b);
Pop(S, a);
push(S, a / b);
break;
}
ch = getchar();
}
return GetTop(S);
}
版权声明:
作者:maple
链接:http://haut.vip/?p=145
来源:欢迎来到计服社
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
海报
习题3.4
4.从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“$”作为输入结束,操作数之间用空格分隔,操作符只可能有+、-……
欢迎来到计服社
共有 0 条评论