用栈实现算术表达式的运算,需要两个栈:一个用于保存操作数,一个用于保存操作码(运算符)。基本的操作
过程是:(1)定义一个栈,这里用数组实现。说明两两个栈:numStack,opStack.
(2)对表达式进行扫描:
- 如果是操作数直接进入操作数栈。
- 如果是操作向右的小括号,直接入栈。
- 如果是操作码,操作栈为空时,直接入栈。如果不空,弹出栈顶操作码,和当前的操作码比较优先级, 如果低于当前操作码,则弹出的操作码和当前的操作码先后入栈。如果不低于当前操作码,从操作数栈弹出二个操作数,用之前弹出的操作符进行运算(注意操作数先后顺序),结果入操作数栈。继续弹操作码栈,和当前操作码 比较,重复前面的处理方法,直到遇见低的操作码或操作码栈空,当前操作码入操作码栈。
- 如果遇到向左的小括号),直接弹出栈顶操作码和两个操作数,运算,结果入操作数栈,继续弹操作码和操作数,直到遇见向右的(,继续检查下一个表达式元素。
按上述步骤,直到表达的所以元素处理完毕。
下面是代码:该程序可以完成:加、减、乘、除和求余运算(+,-,* ,/,%),可以使用()改变优先级顺序。按浮点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万+

被折叠的 条评论
为什么被折叠?



