用栈解决表达式求值问题。(提示,请采用链式存储结构)
一、问题描述
从键盘输入任意中缀表达式字符串,读字符串,利用栈结构实现表达式求值。
二、输入与输出
输入:从键盘中缀表达式如:32+5×(6-4)
输出:计算结果
42
问题描述:从键盘输入任意中缀表达式字符串,读字符串,利用栈结构实现表达式求值。
输入要求:1行中缀表达式(从键盘输入中缀表达式,如: 32+5×(6-4)# ),以#作为结束符
输出要求:1行结果(输出计算结果,如:42 )
示例如下:
解决思路:要建立两个栈,一个Opnd,一个栈存储运算符Oprt,当要入栈的运算符的优先级小于运算符栈顶元素的优先级,就将运算符栈顶运算符弹栈,并且弹出运算数栈Opnd的最顶的两个数,进行运算,将运算结果压入运算数栈Opnd中,继续此操作,直到运算符栈顶元素为“#”,结束此操作,然后弹出运算数栈Opnd栈顶元素作为运算结果。
代码:
#include<stdio.h>
#include<stdlib.h>
//定义数据栈结点
typedef struct StackNode1 {
int data;
struct StackNode1* next;
}StackNode1;
//定义栈
typedef struct LinkStack1 {
StackNode1* top;
int size;
}LinkStack1;
//OPND栈的初始化
LinkStack1* InitOPND() {
LinkStack1* L1 = (LinkStack1*)malloc(sizeof(LinkStack1));
L1->top = NULL;
L1->size = 0;
return L1;
}
//opnd入栈
void Push1(LinkStack1* L1, int e) {
StackNode1* p = (StackNode1*)malloc(sizeof(StackNode1));
p->data = e;
p->next = L1->top;