用栈解决表达式求值问题。(提示,请采用链式存储结构)一、问题描述从键盘输入任意中缀表达式字符串,读字符串,利用栈结构实现表达式求值。二、输入与输出输入:从键盘中缀表达式如32+5×(6-4)

用栈解决表达式求值问题。(提示,请采用链式存储结构)

一、问题描述

从键盘输入任意中缀表达式字符串,读字符串,利用栈结构实现表达式求值。

二、输入与输出

输入:从键盘中缀表达式如: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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值