大話資料結構8之棧和佇列2

2021-07-24 22:18:56 字數 1238 閱讀 3664

棧的應用--四則運算表示式求值

字尾(逆波蘭)表示法定義:不需要括號的字尾表示式。例:9+(3-1)*3+10/2,字尾表示式為9 3 1 - 3 * + 10 2 / +,所有的符號都是在要運算的數字後面出現

字尾表示式計算結果:還是上例

<1>初始化乙個空棧,此棧用於對要運算的數字進出使用;

<2>字尾表示式中的前三個都是數字,所以把運算子前面的數值依次進棧:9、3、1,後面接著符號「+」;

<3>接下來是"-",所以將棧中的1出棧作為減數,3出棧作為被減數即運算3-1得到2,再將2進棧;

<4>接著是數字3進棧;

<5>後面的符號是*,就意味著棧中的3和2出棧,即2*3得到6,再將6進棧;

<6>接著又有乙個"+",所以6和9出棧,6和9相加得到15,15再進棧;

<7>緊接著的是10與2兩個數字進棧;

<8>接著是符號/2和10出棧,10除以2得到5,再將5進棧;

<9>最後乙個符號是+,所以15和5出棧並相加得到20,將20進棧;

<10>結果是當20出棧,棧變空。

中綴表示式轉字尾表示式:

中綴表示式就是我正常用到的標準四則運算表示式,那麼我們該如何實現從中綴轉變為字尾的轉化。

例:將中綴表示式9+(3-1)*3+10/2轉化成字尾表示式9 3 1 - 3 * + 10 2 / +

<1>初始化乙個空棧,用來對符號進出棧使用;

<2>第乙個字元是數字9,輸出9,後面是符號+;

<3>第三個字元是符號(,但是是左括號,還沒有配對,所以進棧;

<4>第四個字元是數字3,輸出3,總表示式9 3,接著是-,進棧;

<5>接著是數字1,輸出,總表示式為9 3 1,接著後面的符號是),因為可以同此前的(相匹配,所以()依次出棧,並輸出,直到(也出棧為止,而在(上方的只有-,所以輸出-,則總輸出表示式是9 3 1 -;

<6>接著是數字3,輸出總表示式為9 3 1 - 3,緊接著是符號*,因為此時棧頂符號為+,優先順序低於*,因而不會輸出,*進棧;

<7>之後是符號+,此時棧頂元素*的優先順序高於+,則該元素輸出再將+進棧,總輸出表示式是:9 3 1 - 3 * +;

<8>緊接著是數字10,輸出,總表示式變為9 3 1 - 3 * + 10,後面是符號/,符號/進棧;

<9>最後的數字是2,輸出,總表示式是9 3 1 - 3 * + 10 2;

<10>因為已經到達最後,所以將棧中符號全部出棧並輸出,所以最終輸出的字尾表示式結果為9 3 1 - 3 * + 10 2 / +。

大話資料結構8之棧和佇列2

棧的應用 四則運算表示式求值 字尾 逆波蘭 表示法定義 不需要括號的字尾表示式。例 9 3 1 3 10 2,字尾表示式為9 3 1 3 10 2 所有的符號都是在要運算的數字後面出現 字尾表示式計算結果 還是上例 1 初始化乙個空棧,此棧用於對要運算的數字進出使用 2 字尾表示式中的前三個都是數字...

大話資料結構(四) 棧和佇列

棧 一種線性表,限定只能在表尾進行插入和刪除的操作。這裡的表尾指的是棧頂,lifo結構。兩棧共享空間的資料結構一般用在兩個棧的空間需求有相反關係時,也就是乙個棧在增長時另乙個棧在縮短的情況,但是前提是兩個棧具有相同的資料型別。迭代和遞迴 迭代使用的是迴圈結構,遞迴使用的是選擇結構。遞迴必須至少有乙個...

大話資料結構4之棧與佇列

1.棧是限定僅在表尾進行插入和刪除操作的線性表。佇列是只允許在一端進行插入操作 而在另一端進行刪除操作的線性表。2.我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表,簡稱lifo結構。棧的插入操作,叫做進棧,也稱壓棧 入...