FightingEveryDay365的博客通过本文主要向大家介绍了数据结构实验栈和队列,数据结构栈实验报告,数据结构栈实验心得,数据结构栈实验,数据结构实验报告等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
http://blog.csdn.net/sgbfblog/article/details/8001651
链接为转载的 后缀表达式转换成中缀表达式详解
Problem Description 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。 Input 输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。 Output 求该后缀式所对应的算术表达式的值,并输出之。 Example Input 59*684/-3*+#Example Output 57Hint 基本操作数都是一位正整数!
这个方法是在网络上搜罗的,方法很巧妙。原理也是栈,只是用了数组模拟。
#include<stdio.h> #include<string.h> int main(){ int top=0,i,k,s,num[50]; char str; while(scanf("%c",&str),str!='#'){ if(str>='0'&&str<='9') num[++top]=str-48;//如果是数字,直接把字符型的str通过-48变换成整形的num[]堆入栈中。 else{ switch(str){//如果不是数字,那么就是运算符。通过链接中知识点,我们可以知道出现运算符,直接运算栈顶和栈顶的下一个值。 case '+': s=(num[top-1])+(num[top]); break; case '-': s=(num[top-1])-(num[top]); break; case '*': s=(num[top-1])*(num[top]); break; case '/': s=(num[top-1])/(num[top]); } top--;//出栈 num[top]=s;//把运算后的s压入栈中,便于以后使用。直到str全部运算结束,最后一个数字就是栈顶,输出。 } } printf("%d\n",num[top]); return 0; }