資料結構 線性結構 三 堆疊

2021-09-11 19:10:04 字數 1726 閱讀 2515

引入:字尾表示式求值

字尾表示式:運算符號位於兩個運算數之後

例: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 煩了 少側得,多側惑 堆疊,其實是自己定義好規則 也就是方法,具有先進後出的特...