順序棧 中綴式轉換字尾式(衝吧,要去更高地地方)

2021-10-25 07:59:51 字數 2598 閱讀 5907

偽碼事故現場

分析與總結

問題描述

目的:使用c++模板設計順序棧的抽象資料型別(adt)。並在此基礎上,使用順序棧adt的基本操作,設計並實現簡單應用的演算法設計。

內容:(1)請參照順序表的adt模板,設計順序棧的抽象資料型別。(由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分別放在單獨的標頭檔案中。參考教材、課件,以及網盤中的順序表adt原型檔案,自行設計順序棧的adt。)

(2)adt的簡單應用:使用該adt設計並實現若干應用順序棧的演算法設計。

應用2:在計算機中,對二元表示式可以有三種不同的標識方法: 字首式、中綴式、字尾式。要求設計乙個演算法,使用順序棧,設計並實現完成如下功能的演算法:對於輸入的任意乙個中綴表示式,將其轉換成對應的字尾表示式。

template

<

class

elemtype

>

void

infix_to_suffix

( sqstack

&s, string &infix, string &suffix)

;//infix:中綴表示式字串;suffix:字尾表示式字串

注意:為了辨識多位數的情形,表示式的運算元、運算子之間用空格分隔(如演算法中能夠處理多位數的情形,也可以不使用空格)。

輔助函式:

bool

isoperator

(char op)

;//運算子辨識

輸入說明

第一行:中綴表示式字串

輸出說明

第一行:字尾表示式字串

輸入樣例

(12+14)*3-400/(30+10*5)+62
輸出樣例
12 14 + 3 * 400 30 10 5 * + / - 62 +
分析思考

中綴字尾的基本知識點

問題重點

中綴,字尾和字首三種表示式的定義

字尾表示式:運算子放在運算元的後面

字首表示式:操作符放在運算元的前面

思路分析

偽碼

/*

從頭到尾進行掃瞄

*/void

infix_to_suffix

( sqstack

&s, string &infix, string &suffix)

}//處理符號的方式

else

else

if(infix.

at(i)

==')'

)while

(temp !=

'(')

; s.

pop(tempout);}

else

else

s.push

(infix.

at(i));

}}}}

//已經掃瞄完整個表示式,將符號棧中的符號全部輸出到字尾表示式

while

(!s.

stackisempty()

)}

事故現場

第一次提交

;//這裡執行你的程式**

第n次提交

應該是最後一次提交

超時的原因

這就很離譜,就算我回退到不能回退,再輸進oj,居然都是wa,不是超過限定時間,真的很離譜!

分析與總結 流程

判定條件

遇到右括號

彈出,直到遇到左括號

符號棧棧頂的優先順序高於當前掃瞄的

終止條件:1、彈出直到棧頂的優先順序低於掃瞄的

終止條件:2、符號棧為空

while

(s.gettop

(temp)&&!

compareofsignal

(temp,infix.

at(i)))

s.push

(infix.

at(i)

);

中綴式 字首式 字尾式 轉換

time limit 1000ms memory limit 65536kb submit statistic discuss problem description 小明在學習了資料結構之後,突然想起了以前沒有解決的算術表示式轉化成字尾式的問題,今天他想解決一下。因為有了資料結構的基礎小明很快就解...

中綴式轉換為字尾式(逆波蘭式)方法

對於用低階程式語言是實現對表示式的處理,字尾式 逆波蘭式 最為簡便。下面是將中綴式 常見表示式 轉換為字尾式的演算法 棧底放 從左至右逐字讀取中綴式 a.當當前字元為數字時,直接輸出 b.當當前字元為 時,將其壓棧 c.當當前字元為 時,則彈出堆疊中最上的 之前的所有運算子並輸出,然後刪除堆疊中的 ...

把中綴式命題公式轉換為字尾式命題公式

我相信總有人跟我這個小白一樣被離散實訓折磨,然後我就從大佬那裡嫖來 分享了 我個人覺得自己碼字的同時還是得多看優秀 include include includeusing namespace std const int maxsize 100 int get priority char ch 獲取...