字尾表示式與棧

2021-06-29 12:59:47 字數 846 閱讀 6480

/*

*stack,操作受限制的線性表,在表的一端進行插入和刪除,先進後出(filo),後進先出(lifo)。表尾是棧頂(top),表頭是棧底(bottom)。

*top不是指標型別,但習慣稱為棧頂指標,習慣用詞還有push和pop表示入棧和出棧

*棧空,top是-1(陣列)或者0,看是怎麼約定的,這裡採用棧空指向0

*至於棧的鍊錶方式(鏈棧),可以把之前鍊錶的作為list.h包含進來直接用,一般把top作為頭指標

*棧的應用:字尾表示式計算、中綴表示式變字尾表示式

/**中綴表示式變字尾表示式*

計算機儲存的時候,是用的字尾表示式

中綴:9+(3-1)*3+10/2

字尾:9 3 1-3*+ 10 2/+,所有的符號都在相關計算數字的後面出現,相鄰的運算子,高階別的在前面

**棧裡面放入字尾表示式時,遇到了運算子,就把左邊的兩個數字拿出來計算,裡面的乙個數字作為被計算的(被除或被減),然後結果入棧

轉變時,若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於找頂符號(乘除優先加減)則棧頂元素依次出棧並輸出,並將當前符號進棧,一直到最終輸出字尾表示式為止

*/例子簡單,沒有考慮到不是一位整數及符號等情況

定義字元棧及pop\push\isdigit\prior函式

string expr = "1+2*3/(4-1)";//或者輸入用gets

stack postfix;//字尾棧

stack oper;//運算子棧

for (int i = 0; i < strlen(expr); i++)

pop(&oper);

}else

push(&oper, ch);}}

字尾表示式 棧

若干行,每行對應乙個中綴表示式 若干行,每行對應乙個由中綴表示式轉換而來的字尾表示式 x a y b z f a b c d m n s t y a b c d e f gxayb zf abc dm n st y abc def g 解題思路 首先如何實現中綴表示式轉換成字尾表示式,方法如下 1....

棧 字尾表示式

看了老師給的部落格,學習了一下,我學的確實很菜啊,仿照寫了乙個可以實現任意數字個數的加括號運算,目前只支援加乙個括號。收穫真的挺大 def to rpn f4 defcompare x,y v return 1 if y else v x v y rpn,operators for i in f4 ...

棧 中綴 字尾表示式

利用棧計算字尾表示式 include include include using namespace std int main s.push num i cout i else if str i str i str i str i s.push res cout result 0 利用棧,把中綴表示...