简单的用栈实现后缀表达式

不想过多解释了,其实就是将普通的表达式画成树的形式,进行后序遍历,后缀表达式就出来了

多写几个找规律就行了

直接给出代码

#include <stdio.h>					//后缀表达式的实现(栈的应用)
#include "stack.h"
int main()
{
	s X;
	init(&X);
	char s[30],*tp,tc;
	scanf("%s",s);
	tp = s;										//接收该方程式
	while(*tp)									//直到最后空字符
		switch(*tp)								//利用switch
	{
		case '(':
			push(&X,*tp);tp++;break;		//任何情况下‘( ’都是可以插入的
		case ')':
			if(empty(&X))					//出现 ‘)’,一开始就有是违法的
				exit(1);
			pop(&X,tc);						//合法的话 就把‘( ’到‘ )’之间的全输出
			while(tc != '(')
			{
				printf("%c",tc);
				pop(&X,tc);
			}
			tp++;
			break;
		case '+':
		case '-':
			if(!empty(&X))									//加减好按照设计无论遇到什么都要先出让进的
			{
				pop(&X,tc);
				if(tc == '(')								//这里提前pop了 所以如果把 ‘( ’不小心弄出去了 要补回来 否则括号部分就无穷循环了
				{
					push(&X,tc);
				}
				else
				printf("%c",tc);
			}
			push(&X,*tp);						//前面已经出了 这里进
			tp++;
			break;
		case '*':
		case '/':
			if(!empty(&X))								//乘除号遇到加减直接进 遇到同等级先出让进
			{
				pop(&X,tc);								//这里同样提前出了
				
				if(tc == '(' || tc=='+'|| tc=='-')							//遇到括号、遇到低级 则提前出的要补回来
					push(&X,tc);
				else
					putchar(tc);
			}
			push(&X,*tp);							//统一进
			tp++;
			break;
		default:
			putchar(*tp);					//遇字母数字  则出去
			tp++;
			break;
	}
	while(!empty(&X))											//最后清空栈里的东西
	{
		pop(&X,tc);
		printf("%c",tc);
	}
	puts("");
	return 0;
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值