数据结构实验之栈三:后缀式求值
题目描述
输入
输出
示例输入
59*684/-3*+#
示例输出
57
#include <stdio.h>
#include<stdlib.h>
#define maxstack 1000
#define stacknum 1000
typedef struct
{
int *top,*base;
int stacksize;
}stack;
void Initstack(stack &s)//栈的初始化;
{
s.base=(int *)malloc(maxstack*sizeof(int));
if(!s.base) exit(0);//栈溢出;
s.top=s.base;
s.stacksize=maxstack;
}
void push(stack &s,char e)//进栈;
{
if(s.top-s.base>=s.stacksize)
{
s.base=(int *)realloc(s.base,(maxstack+stacknum)*sizeof(int));
if(!s.base) exit(0);//栈溢出;
s.top=s.base+s.stacksize;
s.stacksize+=stacknum;
}
s.top++;//栈顶元素为e;
*s.top=e;
}
int Empty(stack &s)//判断是否为空栈;
{
if(s.base==s.top)
return 1;
return 0;
}
void Pop(stack &s)//出栈;
{
if(!Empty(s))
s.top--;
}
void print(stack &s)
{//、栈内元素的输出;
while(s.top!=s.base)
{
printf("%c",*s.top);
Pop(s);
}
printf("\n");
}
void cal(stack &s,char st[],int n)//由栈的后缀式求值
{
int i,pr,la;
int ch;
for(i=1;i<=n;i++)
{
if(st[i]>='1'&&st[i]<='9')//数字进栈;
{
ch=(st[i]-'0');
push(s,ch);
}
else if(st[i]=='+')//+号栈内两个数出栈计算再进栈;
{
pr=*s.top;
s.top--;
la=*s.top;
*s.top=pr+la;
}
else if(st[i]=='*')
{
pr=*s.top;
s.top--;
la=*s.top;
*s.top=pr*la;
}
else if(st[i]=='-')
{
pr=*s.top;
s.top--;
la=*s.top;
*s.top=la-pr;
}
else if(st[i]=='/')
{
pr=*s.top;
s.top--;
la=*s.top;
*s.top=la/pr;
}
}
printf("%d\n",*s.top);
}
int main()
{
char ch,st[10000];
int i=0;
stack s;//栈的定义
Initstack(s);//栈的初始化;
while(~scanf("%c",&ch))
{
if(ch!='#')
{
i++;
st[i]=ch;
}
else
break;
}
cal(s,st,i);
return 0;
}
数据结构实验之栈三:后缀式求值相关推荐
- SDUT 2133 数据结构实验之栈三:后缀式求值
后缀式求值的方法参见我的另一篇文章 把运算符变成表达式 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 ...
- php表达式求值,PHP实现基于栈的后缀表达式求值功能
本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...
- PTA7-4 后缀式求值 (25分) (题目 + 代码 + 详细注释 + 坑点分析)
我们人类习惯于书写"中缀式",如 3 + 5 * 2 ,其值为13. (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?) 而计算机更加习惯"后缀式&quo ...
- 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)
题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...
- 数据结构实验之栈与队列三:后缀式求值
Description 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. Input 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. Output ...
- C - 数据结构实验之栈与队列三:后缀式求值
Description 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. Input 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. Output ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
- 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式
文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...
- 算符优先文法,中缀式求值,栈的典型应用
栈,是比较基础,应用比较广的一种数据结构,栈和队列都可以看成是比较特殊的一些链表,其最突出的特性就是先进后出.虾米阿尼是一个比较常见的中缀表达式求值的应用,当然中缀式到后缀式的转化也是可以实现的. 中 ...
最新文章
- 赋能云HBase备份恢复 百T级别数据量备份恢复支持
- MsSQL的字段类型
- 3台机器配置hadoop集群_Hadoop学习之路(三)Hadoop集群搭建和简单应用
- mac按文件名查找文件_如何在Mac上查找和删除大文件
- Excel快速选择区域
- Vue SEO解决方案
- python 函数写商城管理系统
- 朴素贝叶斯在文本分类中的应用之 伯努利
- 打开 Freetextbox 的 InsertImageFromGallery 及如何接收 ftb.imagegallery.aspx 返回的图片信息...
- [转]How to change Atheros AR9285 MAC addr on Win7(Win7下更改Atheros AR9285 MAC地址)
- 中国医疗器械行业需求态势及未来前景趋势预测报告(2022-2027年)
- 想知道手机配音软件哪个好用吗?一起来看看吧
- 在linux上运行迷宫问题,C语言 迷宫问题(堆栈及其应用)
- nyoj 1239-引水工程 //并查集
- 用php把图片合成视频,图片音乐合成视频 多张图片合成视频|图片合成视频软件...
- linux安装mt7601网卡固件,Linux下安装MT7601U无线网卡驱动
- 计算一个月有几天并且有几个周六日的小函数
- “万物皆可Seq2Seq” | 忠于原文的T5手写论文翻译
- 大数据风控之 如何控制贷前风险?
- 计算机毕业设计(附源码)python英语单词记忆系统
热门文章
- java 打印命令_Java 普通命令行程序main关掉 DEBUG 打印
- mysql人事管理系统源代码_人事管理系统(源代码.doc
- 红黑树和平衡二叉树的区别_一文搞懂红黑树
- python pexpect pxssh scp_python Pexpect 实现输密码 scp 拷贝的方法
- mysql 货币显示_在MySQL中以正确的格式显示USD货币记录
- python创建access表_Access创建表
- 服务器的虚拟内存怎么调,服务器的虚拟内存怎么调才好
- 请概述可视化卷积神经网络的中间输出的基本思想。_最详细的卷积神经网络入门指南!...
- 华为app安装失败与已安装签名_手机APP为什么总是安装失败
- c语言按照姓名查询员工信息,输入10个职工信息,按号码大小排序,再使用查找函数找职工的姓…...