ACM刷題之路(十一)堆 棧 佇列實現表示式轉換

2021-08-29 02:32:24 字數 1197 閱讀 2183

這是《資料結構》這門課的課後練習題,很典型的一道題,總結記錄一下

題目:表示式轉換 

算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。

輸入在一行中給出不含空格的中綴表示式,可包含+-*\以及左右括號(),表示式不超過20個字元。

在一行中輸出轉換後的字尾表示式,要求不同物件(運算數、運算符號)之間以空格分隔,但結尾不得有多餘空格。

2+3*(7-4)+8/4
2 3 7 4 - * + 8 4 / +
比如a+b*c+(d*e+f)*g

string型別讀入

如果遇到字母直接入佇列

乘法除法優先順序比加減法要高

優先順序高的入站

優先順序相等或者低的,先把高的入佇列,再把當前的入棧

如果遇到『(』直接入棧

如果遇到『)』 在堆疊中往頭找,直到找到『(』為止,並且刪除堆疊中的『(』

#include#include#include#includeusing namespace std;

int main()

else if (c == '+' || c == '-')}}

else if (c == '*' || c == '/')}}

else if (c == '(')//左括號直接進入堆疊

s1.push(ts + c);

else if (c == ')')//右括號直接迴圈到遇到左括號為止}}

}while (!s1.empty())

if (!q1.empty())

//否則string型別無法用%s這樣輸出

while (!q1.empty())

puts("");

return 0;

}

ACM刷題之路(二)談談我對ACM的理解

2020年2月新增 這篇文章是我在大一下學期 2018年4月 寫的,那時候看見我身邊的acmer寫做題總結用了部落格,然後我也很快加入了進來。後來在做題的時候,遇到那些不太會的acm題目,會多做幾遍,然後有時間就寫個總結,以便以後遇到類似的題能夠得心應手。現在大三了,回想起大一大二的那一部分acm的...

ACM刷題之路(十三)資料結構 鍊錶

順序表之後是鍊錶,鍊錶是線性表的第二種結構。單 鍊錶根據 資料結構 這本書 需要會寫初始化 插入 查詢 刪除 取長度的函式。首先是結構體的定義 typedef的意思是取別名。把lei這個小名 給int 修改線性表資料型別的時候可以直接改動 typedef int lei struct ss 第乙個是...

ACM刷題之路(七)字串處理 記元培ACM院賽

時間限制 普通 j a 1000ms 3000ms 執行記憶體限制 65536kbyte 總提交 320 測試通過 66 描述 最近在用安卓做畢業設計,用到的類名 方法名 變數名 常量名不下一百個,開始的時候 會在意這些命名的規則,拼音什麼的都出現了,但隨著名稱的增加,都分不清哪些是方法名,哪些是變...