資料結構複習 棧和佇列

2021-09-22 14:01:54 字數 1637 閱讀 4466

棧是一種只能在一端進行插入或刪除操作的線性表

棧的最主要特點是後進先出(lifo)

n個不同的元素進棧,其出棧次序總數為(catalan number)

c 2n

nn+1

\frac^}

n+1c2n

n​​

typedef elemtype int

typedef

struct

;

共享棧:如果要用到兩個相同型別的棧,可以用乙個陣列來實現這兩個棧,這稱之為共享棧

typedef elemtype int

typedef

struct linknode

linkstnode;

簡單表示式求值問題:使用者輸入乙個包含「+」、「-」、「*」、「/」、正整數和圓括號的合法算術表示式,計算該表示式的運算結果。

分析:將中綴表示式轉化為字尾(逆波蘭)表示式,然後對該字尾表示式求值。

轉化為字尾表示式的過程:

用字元陣列來儲存字尾表示式,用運算子棧來確定運算子的位置。掃瞄中綴表示式,如果遇到數字,則直接放入字元陣列,如果遇到運算子,則將其與運算子棧的符號依次進行優先順序比較,如果優先順序較高則直接進棧,優先順序較低則一直出棧直到為空或者其優先順序較高。掃瞄完畢,將棧中所有符號放入字元陣列。

字尾表示式求值:

掃瞄字元陣列,如果為數字,則轉化為數值之後進棧,如果為運算子,則出棧兩個運算元並進行計算,將結果進棧。

2. 用棧求解迷宮問題:給定乙個m×n的迷宮圖、入口與出口、行走規則。求一條從指定入口到出口的路徑。所求路徑必須是簡單路徑,即路徑不重複。

分析:對於某乙個不在邊界的方塊而言,與其相鄰的方塊的四個,如果相鄰的方塊可以走,則訪問該方塊,若某方塊的周圍沒有可走方塊,則退棧,回到上乙個方塊,訪問下乙個可以走的方塊。直到訪問至目標方塊(參考圖的深度優先搜尋)

佇列只能選取乙個端點(隊尾)進行插入操作,另乙個端點(隊頭)進行刪除操作

佇列的最主要特點是後進先出(fifo)

typedef elemtype int

;typedef

struct

sqqueue;

在上述順序佇列中,採用rear==maxsize-1為隊滿條件,當隊滿條件為空時,隊中可能還有若干空位置,迴圈佇列就可以解決這種"假溢位"的問題。

把陣列的前端和後端連線起來,形成乙個環形的順序表,即把儲存佇列元素的邏輯上看成乙個環,這就稱之為環形佇列或迴圈佇列

這裡要注意的是:環形佇列的初始化條件是隊尾指標和隊首指標均賦值0,且上述環形佇列由於隊滿條件而造成了乙個位置的空缺

採用鍊錶儲存的佇列稱為鏈隊,這裡採用不帶頭節點的單鏈表實現

通常我們將隊頭和隊尾兩個指標合併起來,於是鍊錶的組成由:

資料節點型別:

typedef

struct qnode

datanode;

鏈隊頭節點型別
typedef

struct

linkqunode;

出隊

用佇列求解迷宮問題:

複習 資料結構 棧和佇列

鏈佇列 include include define elemtype char define maxsize 100 typedef struct node 定義節點型別 snode typedef struct lqueue void initqueue lqueue qu void enque...

資料結構複習 棧和佇列 1 棧

1.棧和佇列簡介 棧和佇列是非常重要的兩種資料結構,在軟體設計中應用很多。棧和佇列也是線性結構,線性表,棧和佇列這三種資料元素和資料元素間的邏輯完全相同。差別是線性表的操作不受限制,而棧和佇列的操作收到限制,棧的操作只能在表的一端進行,佇列的插入操作在表的一端進行而其它操作在表的另一端進行,所以把棧...

資料結構複習三 棧和佇列

先簡要介紹以下棧與佇列 棧 stack 是一種後進先出 lifo 的線性表,僅在表尾 即棧頂 進行插入或刪除操作,像火車排程的頭進尾出。佇列 queue 與棧相反,是一種先進先出 fifo 的線性表,只允許在一端進行插入,而在另一端進行刪除,允許插入的一端稱為隊尾,允許刪除的一端則稱為隊頭,就像日常...