引入:字尾表示式求值字尾表示式:運算符號位於兩個運算數之後
例:62/3-42*+ = 8
求值策略:從左向右「掃瞄」,逐個處理運算數和運算符號
遇到運算數:記住當前運算數
遇到運算子:運用對應的運算數進行計算,將計算得到的數記住
一、堆疊的抽象資料型別描述堆疊(stack):具有一定操作約束的線性表 ,即只在一端(棧頂,top)做 插入、刪除(**先出)
二、棧的順序儲存實現1.定義:棧的順序儲存結構通常由乙個一維陣列和乙個記錄 棧頂元素位置的變數組成。
#define maxsize 《儲存資料元素的最大個數》
typedef struct snode *stack;
struct snode;
2.操作:
1)入棧
void push( stack ptrs, elementtype item )
else
}
2)出棧
elementtype pop( stack ptrs )
else
return ( ptrs->data[(ptrs->top)--] );
}
三、棧的鏈式儲存實現單鏈表結構表示,為鏈棧。插入和刪除操作只能在鏈棧的棧頂進行,頭結點為棧頂。
1定義:
typedef struct snode *stack;
struct snode ;
2操作:
1)入棧:
void push( elementtype item, stack s)
2)出棧:
elementtype pop(stack s)
else
}
四、應用1.字尾表示式求值:
步驟:2.中綴表示式求值:運算數:入棧;
運算子:從堆疊中彈出適當數量的運算數,計算並結果入棧;
最後,堆疊頂上的元素就是表示式的結果值。
基本策略:將中綴表示式轉換為字尾表示式,然後求值。
中綴表示式轉化為字尾表示式:從頭到尾讀取中綴表示式的每個物件,對不同物件按不同的情況處理。
① 運算數:直接輸出;
② 左括號:壓入堆疊;
③ 右括號:將棧頂的運算子彈出並輸出,直到遇到左括號(出棧,不輸出);
④ 運算子:
• 若優先順序大於棧頂運算子時,則把它壓棧;
• 若優先順序小於等於棧頂運算子時,將棧頂運算子彈出並輸出;再比 較新的棧頂運算子,直到該運算子大於棧頂運算子優先順序為止,然 後將該運算子壓棧;
⑤ 若各物件處理完畢,則把堆疊中存留的運算子一併輸出。
資料結構 線性結構 棧
棧 和佇列相反的作用,越是先存入的資料就得越到後才能取出,根據這個特性可以用陣列或鍊錶模擬出棧。陣列模擬棧 新增資料正常順序,每天加乙個數棧頂加一次,彈棧的時候將棧頂指標的數彈出即可,遍歷棧陣列時是從棧頂開始迴圈。1 class arraystack9 判斷棧是否已滿 10public boolea...
C 資料結構篇(二)堆疊
我們再完成堆疊,其實堆疊和線性表沒什麼大的區別,堆疊其實是一種特殊的線性表,使用push 壓輸入資料,pop 彈出資料,才用,先進後出的原則,就這麼簡單。前面已經寫好了list 類,在這裡我們可以呼叫它。如下 using system namespace list 空的時候為 int 型別的最大值 ...
Java資料結構02堆疊 《精華》
堆疊 是訪問資料的方式 存資料得借助陣列或連表或集合等來儲存資料 只是你定義乙個只允許資料自有序列表 前端 作輸入 輸出操作。具有先進後出filo first in last out 的特性的方法,就是堆疊。author 煩了 少側得,多側惑 堆疊,其實是自己定義好規則 也就是方法,具有先進後出的特...