国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

數據結構實驗之棧二:一般算術表達式轉換成后綴式 2132

2019-11-08 03:24:58
字體:
來源:轉載
供稿:網友

數據結構實驗之棧二:一般算術表達式轉換成后綴式

Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic PRoblem Description

對于一個基于二元運算符的算術表達式,轉換為對應的后綴式,并輸出之。

Input

輸入一個算術表達式,以‘#’字符作為結束標志。

Output

輸出該表達式轉換所得到的后綴式。

Example Input

a*b+(c-d/e)*f#

Example Output

ab*cde/-f*+

由一般式求后綴式: 1.設立暫時存放運算符的棧; 2.設表達式的結束符為“#”,設運算符的棧底為“#”; 3.若當前字符是操作數,進棧; 4.若當前運算符的優先數高于棧頂運算符,進棧; 5.否則退出棧頂運算符發送給后綴式;//打印出棧頂運算符 6.括號“(”對它之前之后的運算符起隔離作用,“)”可視為自相應左括號開始的表達式的結束符。 代碼來自 http://blog.csdn.net/jinshiyan1995/article/details/43414577

#include <bits/stdc++.h>using namespace std;int ch(char a)//算出優先級{ if(a=='+'||a=='-') return 1; else if(a=='*'||a=='/') return 2; else if(a=='(') return 3; else if(a==')') return 4; return 0;}int main(){ int i,j,top=0; char stacks[1000000],c; while(scanf("%c",&c),c!='#') { if(c>='a'&&c<='z') printf("%c",c); else//分為棧中無元素,當前元素優先級大于棧頂元素,當前元素優先級小于棧頂元素 { if(top==0) { top++; stacks[top]=c; }//從1開始;先計算再賦值,令top指向當前。避免行編輯器那道題中的尷尬。。。 else if(ch(c)>ch(stacks[top])) { if(ch(c)==4)//當前元素為‘)’時,輸出直到‘(’前的棧中元素 { while(stacks[top]!='(') { printf("%c",stacks[top]); top--; } top--;//碰到棧頂為( ,top--跳過該元素 } else { top++; stacks[top]=c; } } else { if(stacks[top]!='(') { printf("%c",stacks[top]); stacks[top]=c; } else { top++; stacks[top]=c; } } } } while(top) { printf("%c",stacks[top]); top--; } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连平县| 荥经县| 深水埗区| 泽库县| 泸定县| 黎平县| 太谷县| 河西区| 定西市| 得荣县| 望城县| 五华县| 榆林市| 万盛区| 淮南市| 海兴县| 翁牛特旗| 新邵县| 巴东县| 弋阳县| 顺昌县| 天水市| 茌平县| 鸡西市| 连云港市| 苏尼特左旗| 榕江县| 祥云县| 都安| 苍山县| 应城市| 郑州市| 宁津县| 长白| 盈江县| 宁强县| 米易县| 固原市| 阿合奇县| 黔江区| 林芝县|