c语言数据结构 用栈计算后缀表达式的值

有没有好心人帮我看看 为什么我这个代码不能正确输出值呀

/*输入一个后缀表达式,设计算法计算出表达式的值,表达式长度不能超过一行,以$结束,操作数之间以间隔隔开,操作符只可有+ - * /四种 */
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define maxsize 20
typedef struct stack{
	char ch;
	struct stack* next;
}stack,*Stack;
Stack S;
void Initstack(Stack &S)
{
	S = NULL;
}
void pushstack(Stack& S, char e)
{
	Stack p = (Stack)malloc(sizeof(stack));
	p->ch = e;
	p->next = S;
	S = p;
}
int Pop(Stack& S, char* e)
{
	if (S == NULL) return ERROR;
	*e = S->ch;
	Stack p;
	p = S;
	S = S->next;
	delete p;
	return OK;
}
int main()
{
	Initstack(S);
	char elem,e1,e2,e3,e5;
	printf("请输入一个整数序列后缀表达式:\n");
	for (int i = 0; i < maxsize; i++)
	{
		scanf_s("%c", &elem);
		char k = 0;
		if (elem > '0' && elem < '9')  k = 0;
		if (elem == '+') k = 1;
		if (elem == '-') k = 2;
		if (elem == '*') k = 3;
		if (elem == '/') k = 4;
		if (elem == '$') break;
		switch (k)
		{
		case 0:
			pushstack(S, elem);
			break;
		case 1:
			Pop(S, &e1);
			Pop(S, &e2);
			e3 = e1 + e2;
			pushstack(S, e3);
			break;
		case 2:
			Pop(S, &e1);
			Pop(S, &e2);
			e3 = e1 - e2-48-48;
			pushstack(S, e3);
			break;
		case 3:
			Pop(S, &e1);
			Pop(S, &e2);
			e3 = (e1-48) * (e2-48);
			pushstack(S, e3);
			break;
		case 4:
			Pop(S, &e1);
			Pop(S, &e2);
			e3 = (e1-48) / (e2-48);
			pushstack(S, e3);
			break;
		}
	}
	Pop(S, &e5);
	printf("结果为:%d", e5);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值