資料結構 第三章 棧與佇列

2021-06-28 10:22:18 字數 1661 閱讀 5050

§3.1 棧

3.1.1  抽象資料型別棧的定義

棧是限定僅在表尾進行插入或刪除操作的線性表。因此,對棧來說,表尾端有其特殊含義,稱為棧頂。相反地,表頭端稱為棧底。

棧是後進先出(lifo)的線性表。

基本操作:

top()   返回棧頂元素

pop()  彈出棧頂元素

push(a)  將元素a壓入棧

empty()   判斷是否為空

size()  返回元素個數

3.1.2  棧的表示和實現

①順序棧       可用乙個三個元素結構體+陣列實現

typedef struct sqstack;

其中stacksize指示棧的當前可使用的最大容量。棧的初始化操作為:按設定的初始分配量進行第一次儲存分配,base可稱為棧底指標,在順序棧中,它始終指向棧底的位置,若base的值為null,則表明棧結構不存在。稱top為棧頂指標,其初值指向棧底,即top=base可作為棧空的標記,每當插入新的棧頂元素時,指標top增1;刪除棧頂元素時,指標top減1,因此,非空棧中的棧頂指標始終在棧頂元素的下乙個位置上。

②鏈棧           用鍊錶實現 不再詳述

§3.2 棧的應用舉例

3.2.1 數制轉換

十進位制數n = (d進製) (n整除d)*d + n%d  可以用棧來模擬

void conversion()

while(!stackempty(s))

}

3.2.2 括號匹配的檢驗

檢驗一系列括號是否匹配的方法可以用「期待的急迫程度」這個概念來描述。在演算法中設定乙個棧,每讀入乙個括號,若是右括號,則或者使置於棧頂的最急迫的期待得以消解,或者是不合法的情況;若是左括號,則作為乙個新的更急迫的期待壓入棧中,自然使原有的在棧中的所有未消解的期待的急迫性都降了一級。另外,在演算法的開始和結束,棧都應該是空的。

3.2.3 行編輯程式

3.2.4 迷宮求解

搜尋(dfs)

3.2.5  表示式求值

§3.3 棧與遞迴的實現

遞迴:①有遞迴定義的數學函式 ②有遞迴特性的資料結構(二叉樹 廣義表等) ③八皇后等搜尋問題

※hanoi塔問題

void hanoi(int n,char x,char y,char z)

}

§3.4 佇列

3.4.1 抽象資料型別佇列的定義

佇列(queue)是一種先進先出(fifo)的線性表,它只允許在表的一端進行插入,而在另一端刪除元素。允許插入的一端叫隊尾(rear) 允許刪除的一端叫做隊頭(front)

雙端佇列:限定插入和刪除操作在表的兩端進行的線性表。

各種變形:輸出/入首先的雙端佇列(如限定雙端佇列從某端點插入的元素只能從該端點刪除則退化成兩個棧底相鄰的棧)

3.4.2 鏈佇列——佇列的鏈式表示和實現

3.4.3 迴圈佇列——佇列的順序表示和實現

順序佇列:用陣列模擬佇列,兩個指標front和rear分別指示佇列頭元素及隊列為元素的位置,插入新元素時,尾指標增1,刪除佇列頭元素時,頭指標增1.所以在非空序列中,頭指標指向頭元素,尾指標指向尾元素的下乙個位置。

迴圈佇列:為佇列臆造乙個環狀的空間來節約空間。

資料結構 第三章 棧與佇列

定義 限定僅在表尾進行插入和刪除操作的線性表。即後進先出的線性表 last in first out 表尾即棧頂top,表頭即棧低bottom。儲存方式 順序棧 鏈棧 順序棧 一組位址連續的儲存單元,一次存放自棧低到棧頂的資料元素。結構 兩個指標top,base,乙個int size描述棧的大小 空...

資料結構第三章棧和佇列

第四章 棧和佇列 1.棧 限定僅在表尾進行插入或刪除操作的線性表,表尾端稱為棧頂,表頭端稱為棧底。棧頂移動,棧底固定。特點 先進後出 後進先出 typedef struct sqstack status push sqstack s,selemtype e status pop sqstack s,...

資料結構 第三章 棧和佇列

目錄 3.1 堆疊的基本概念 3.2 堆疊的順序儲存結構 一 構造原理 二 實現 三.多棧共享連續空間問題 3.3 堆疊的鏈式儲存結構 一.構造原理 二 實現 3.4 佇列的基本概念 3.5佇列的順序儲存結構 一.構造原理 二 實現 三.迴圈佇列 3.5 佇列的鏈式儲存結構 一.構造原理 二 實現 ...