※棧(限制插入/刪除資料的位置)
3.2.1
1.棧的定義
棧是只能在表的一端進行插入刪除操作的線性表,允許插入(入棧)和刪除(出棧)的一端稱為棧頂,另一端稱為棧底,不含有任何資料元素的棧稱為空棧。
後進先出,即任何時刻出棧的元素都只能是棧頂元素。
設定指示器,記錄棧頂位置。
2.棧的抽象資料型別定義(stack)
棧的初始化(構建空棧) 棧的銷毀 插入 刪除 取棧頂元素 判空
3.2.2 棧的順序儲存結構及實現
1.順序棧的儲存結構
通常把陣列元素下表為0的一端作為棧底,附設top變數指向棧頂元素所在陣列中的下標
設棧陣列長度為stacksize,則設棧為空時棧頂位置top=-1,棧滿時棧頂位置為top=stacksize-1。入棧時棧頂位置top+;出棧時棧頂位置top-1.
2.順序棧的實現
const int stacksize = 10; //10是示例性的資料,根據實際問題具體定義
template //定義模板類seqstack
class seqstack
; ①建構函式——順序棧初始化
將棧頂指標top置為-1.
②析構函式為空
③入棧操作
插入元素x需要將棧頂位置top+1,然後在top的位置填入x。
template void seqstack:: push(datatype x)
④出棧操作
取出棧頂元素,然後棧頂位置top-1.
template datatype seqstack:: pop( )
⑤取棧頂元素
將top位置的棧頂元素取出並返回
template datatype seqstack:: gettop( )
⑥判空操作
判斷top是不是-1
template int seqstack:: empty()
3.2.3棧的鏈結儲存結構及實現
1.棧鏈的儲存結構
因為只能在棧頂執行插入和刪除操作,故以單鏈表頭部做棧頂方便而且沒必要設定頭結點。
2.操作
建構函式(鏈棧的初始化)
析構函式
入棧操作(只需要處理棧頂)
出棧操作(只需處理棧頂)
取棧頂元素 (只需返回棧頂指標top所指結點的資料域,並不修改棧頂指標)
判空操作(判斷top指標是否為空)
3.2.4 順序棧和鏈棧的比較
元素個數變化較大用鏈棧,反之用順序棧。
※佇列3.3.1 佇列的邏輯結構
佇列是只允許在一端進行插入操作(入隊,隊尾),在另一端進行刪除操作(出隊,隊頭)的線性表。
特點:先進先出
3.3.2 佇列的順序儲存結構及實現
1.佇列的順序儲存結構(順序佇列)
設定隊頭隊尾兩個位置變數front和rear。入隊時入隊時rear加1,出隊時front加1。規定:front指向隊頭元素的前乙個位置,rear指向隊尾元素的位置。
2.迴圈佇列的儲存結構
作用:解決假溢位問題 假溢位:當元素被插入到陣列中下標最大的位置後,陣列空間就備用盡了,但此時陣列低端還有空閒空間。
方法:拖尾相接,即允許佇列直接從陣列下邊最大的位置延續到下標最小的位置。可以通過取餘實現。設儲存佇列的陣列長度為queuesize,操作語句為rear=(rear+1)%queuesize
判斷隊空/隊滿:front=rear 為了區分隊空隊滿,可以浪費乙個儲存空間,使隊尾和隊首位置相差為1,即 (rear+1)% queuesize=front
3.3.3 佇列的鏈式儲存結構及實現
1.鏈佇列的儲存結構
為使空佇列和非空佇列操作一樣,設定頭結點。
根據先入先出特性,設定隊頭(刪除)指標指向鏈佇列的頭結點,隊尾(插入)指標指向終端節點。
2.鏈佇列的實現
出隊操作時,出隊後判斷出隊前佇列長度是否為1 :if(p-next=nullptr) rear=front;
資料結構筆記 第三章 棧和佇列
棧 限定僅在表尾進行插入和刪除操作的線性表。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。設指標top指示棧頂元素在陣列中的位置。進棧 top加1 出棧 top減1 棧空 top 1 棧滿 top max size 1 順序棧類的宣告 const int max size 100 template ...
資料結構第三章棧和佇列
第四章 棧和佇列 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 佇列的鏈式儲存結構 一.構造原理 二 實現 ...