目錄
和隊列的定義和特點
1.1棧的定義和特點、
1.2隊列的定義和特點
1.3棧和隊列的應用
2.棧的表示和操作的實現
2.1棧的類型定義
2.2順序棧的表示和實現
2.2.1初始化
2.2.2入棧
2.2.3出棧
2.2.4取棧頂元素
2.3鏈棧的表示和實現
2.2.1初始化
2.2.2入棧
2.2.3出棧
2.2.4取棧頂元素
3.棧與遞歸(?????)
3.1采用遞歸算法解決的問題
3.2遞歸過程與遞歸棧
3.3遞歸算法的效率分析
3.4利用棧將遞歸算法轉化為非遞歸算法
4.隊列的表示和操作的實現
4.1隊列的類型定義
4.2循環隊列--隊列的順序表示和實現
4.3鏈隊--隊列的連時表示和實現
5.案例
6.小結(?)
和隊列的定義和特點
1.1棧的定義和特點、
棧:限定僅在表尾進行操作的線性表(LIFO/LIFO--先進后出,后進先出)
1.2隊列的定義和特點
隊列:限定僅在隊頭刪除,隊尾插入的線性表(FIFO/LILO -- 先進先出,后進后出)
1.3棧和隊列的應用
棧:1.數制的轉換;
原理:N=(N div d)*d +N mod d;
在計算過程中依次將余數壓入棧中,計算完畢,在依次彈出棧中的余數就是數制轉換的結果。
例題:405. 數字轉換為十六進制數 - 力扣(Leetcode)(建議自己試試也挺簡單,就不加代碼了)
2.括號匹配;
3.表達式求值
隊列:舞伴問題
這幾個其實也很簡單,(偷偷說)其實其中的而部分題目我更愿意用字符串來做。。。。
2.棧的表示和操作的實現
2.1棧的類型定義
棧的抽象數據類型定義:
ADT Stack{數據對象:D{ai | ai∈Elemset,i = 1,2,...,n,n≥0}數據關系:R = {<ai - 1,ai> | ai∈D,i = 2,...,n}約定an端為棧頂,a1端為棧底。基本操作:InitStack(&S)操作結果:構造一個空棧DestoyStack(&s)初始條件:棧S已經存在操作結果:棧S被銷毀ClearStack(&s)初始條件:棧S已經存在操作結果:棧S被清空為空棧StackEmpty(s)初始條件:棧S已經存在操作結果:若棧S為空棧,則返回true,否則返回falseGetTop(s)初始條件:棧S已經存在且非空操作結果:返回S的棧頂元素,不改變棧頂指針Push(&s,e)初始條件:棧S已經存在操作結果:插入元素為e的新的棧頂元素Pop(&s,&e)初始條件:棧S已經存在且非空操作結果:刪除S的棧頂元素,并用e返回其值StackTraverse(s)初始條件:棧S已經存在且非空操作結果:從棧頂到棧底依次對S的每個數據元素驚醒訪問}