1.1 棧的基本概念
棧(stack):只允許在一端進行插入或刪除操作的線性表
棧頂(top):線性表允許進行插入和刪除的那一端
特點:lifo(last in first out)後進先出——操作特徵
1.2 棧的基本操作
1.3 佇列的基本概念
佇列(quene):是一種操作受限的線性表,只允許在表的一端進行插入,而在表的另一端進行刪除。
隊頭(front):允許刪除的一端
隊尾(rear):允許插入的一端
1.4 佇列的基本操作
2.1 棧的順序儲存結構
difine maxsize 50
typedef structsqstack;
棧頂指標:s.top,初始時設定s.top = -1 ;棧頂元素:s.data[s.top].
進棧操作:棧不滿時,棧頂指標先加一,再送值到棧頂元素『
出棧操作:棧非空時,先取棧頂元素值,再將棧頂指標減1.
棧空條件:s.top = -1;
棧滿條件:s.top ==maxsize-1;
棧長: s.top+1;
順序棧的基本運算
(1)初始化
void initstack(&s)
(2)判斷棧是否為空
bool stackempty(s)
(3)進棧
bool push(sqstack &s,elemtype x)
(4)出棧
bool pop(sqstack &s,elemtype &x)
2.2 棧的鏈式儲存結構
採用鏈式儲存的棧稱為鏈棧,其優點是便於多個棧共享儲存空間和提高其效率。
其儲存型別可以描述為:
typedef struct linknode*listack //棧型別定義
2.3 佇列的順序儲存結構
佇列的順序儲存結構是指分配一塊連續的儲存單元存放佇列中的元素,並附設兩個指標front和rear分別指示隊頭元素和隊尾元素的位置。設隊友指標指向隊頭元素,隊尾指標指向隊尾元素的下乙個位置。
其儲存型別可以描述為
#define maxsize 50
typedef structsqquene;
初始狀態(隊空條件):q.front == q.rear ==0
進隊操作:隊不滿時,先送值到隊尾元素,再將隊尾指標加1。
出隊操作:隊不空時,先取隊頭元素值,再將隊頭指標加1
【注】迴圈佇列
為彌補offset順序佇列的缺點,引入迴圈佇列。臆造乙個環狀空間。當隊首指標q.front = maxsize-1後,在前進乙個位置就自動到0,這可以利用除法取餘運算(%)來實現
初始時:q.front = q.rear = 0
隊首指標進1: q.front = (q.front+1)%maxsize
2.4 佇列的鏈式儲存結構
佇列的鏈式表示成為鏈佇列,實際上是乙個同時帶有隊頭指標和隊尾指標的單鏈表。
佇列的鏈式儲存型別可以描述為
typedef structlinknode;
typedef structlinkquene;
3.1 棧在括號匹配中的應用
演算法的思想如下:
(1) 初始設定乙個空棧,順序讀入括號
(2) 若是右括號,則不合法,或使至於棧頂的最急迫期待得以消解
(3) 若是左括號,則作為乙個更新更急迫的期待壓入棧中,使原有的棧中所有未消解的期待的急迫性降了一級。演算法結束時,棧為空,否則括號序列不匹配。
3.2 棧在表示式求值中的應用
3.3 棧在遞迴中的應用
3.4 佇列在層次遍歷中的應用
3.5 佇列在計算機系統中的應用(緩衝區,程序按照排隊次序進行處理執行)
資料結構之堆疊與佇列
define maxsize 20 define error 1 typedef struct stack stack createstack int maxsize 生成空堆疊,其最大長度為maxsize int isfull stack s,int maxsize 判斷堆疊s是否已滿 else ...
資料結構 堆疊與佇列 1
棧是一種特殊的線性表,即lifo線性表 last in first out,後進先出 進行插入和刪除的一端是浮動端,通常稱為棧頂,並用一指標指示,稱作棧頂指標,而另一端是固定端,通常被稱為棧底。initiate s 初始化 push s,elem 入棧 pop s,elem 出棧 isempty s...
資料結構 堆疊與佇列 2
佇列是一種特殊的線性表,它只允許在表的前端front進行刪除操作,在表的後端rear進行插入操作。進行插入操作的稱為隊尾rear,進行刪除操作的為隊頭。佇列中沒有元素時,稱為空佇列。佇列具有先進先出的特點。佇列空的條件 front rear 佇列滿的條件 rear maxsize 迴圈佇列 將儲存佇...