用栈实现的算术表达式的运算

本文介绍了一种利用栈实现算术表达式运算的方法,通过两个栈分别存储操作数和操作码,支持加、减、乘、除及求余运算,并可通过括号改变优先级。

    用栈实现算术表达式的运算,需要两个栈:一个用于保存操作数,一个用于保存操作码(运算符)。基本的操作

过程是:(1)定义一个栈,这里用数组实现。说明两两个栈:numStack,opStack.

                (2)对表达式进行扫描:

  1. 如果是操作数直接进入操作数栈。
  2. 如果是操作向右的小括号,直接入栈。
  3. 如果是操作码,操作栈为空时,直接入栈。如果不空,弹出栈顶操作码,和当前的操作码比较优先级, 如果低于当前操作码,则弹出的操作码和当前的操作码先后入栈。如果不低于当前操作码,从操作数栈弹出二个操作数,用之前弹出的操作符进行运算(注意操作数先后顺序),结果入操作数栈。继续弹操作码栈,和当前操作码 比较,重复前面的处理方法,直到遇见低的操作码或操作码栈空,当前操作码入操作码栈。
  4. 如果遇到向左的小括号),直接弹出栈顶操作码和两个操作数,运算,结果入操作数栈,继续弹操作码和操作数,直到遇见向右的(,继续检查下一个表达式元素。

按上述步骤,直到表达的所以元素处理完毕。

下面是代码:该程序可以完成:加、减、乘、除和求余运算(+,-,* ,/,%),可以使用()改变优先级顺序。按浮点float类型运算。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE  100
typedef struct
 {
	char *pStr[MAX_SIZE];
	int top;
} STACK;

STACK numStack,opStack;

void initStack()
{
	opStack.top=-1;
	numStack.top=-1;
}
int push(char *num,STACK *stack)
{
   if (stack->top>=MAX_SIZE-1) 
	   return -1;
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值