資料結構 棧和佇列

2021-06-27 06:39:05 字數 2986 閱讀 7955

本章的基本內容是:

兩種特殊的線性表——棧和佇列

ø從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。

ø從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。 

p棧:限定僅在表的一端進行插入和刪除操作的線性表。

p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。

p空棧:不含任何資料元素的棧。

a

1,a

2,……,a

n

棧的操作特性:後進先出

注意:棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。

棧的抽象資料型別定義

adt stack

data

棧中元素具有相同型別及後進先出特性,

相鄰元素具有前驅和後繼關係

operation

initstack

前置條件:棧不存在

輸入:無

功能:棧的初始化

輸出:無

後置條件:構造乙個空棧

destroystack

前置條件:棧已存在

輸入:無

功能:銷毀棧

輸出:無

後置條件:釋放棧所占用的儲存空間

push

前置條件:棧已存在

輸入:元素值x

功能:在棧頂插入乙個元素x

輸出:如果插入不成功,丟擲異常

後置條件:如果插入成功,棧頂增加了乙個元素

pop

前置條件:棧已存在

輸入:無

功能:刪除棧頂元素

輸出:如果刪除成功,返回被刪元素值,否則,丟擲異常

後置條件:如果刪除成功,棧減少了乙個元素

gettop

前置條件:棧已存在

輸入:無

功能:讀取當前的棧頂元素

輸出:若棧不空,返回當前的棧頂元素值

後置條件:棧不變

empty

前置條件:棧已存在

輸入:無

功能:判斷棧是否為空

輸出:如果棧為空,返回1,否則,返回0

後置條件:棧不變

endadt

順序棧類得分明

const int  max_size=100;

template 

class  seqstack

兩棧共享空間類宣告

const intstack_size=100; 

template

classbothstack ;

連棧的類宣告

template

classlinkstack

3.2 

佇列佇列的邏輯結構

p佇列:只允許在一端進行插入操作,而另一端進行刪除操作的線性表。

p允許插入(也稱入隊、進隊)的一端稱為隊尾,允許刪除(也稱出隊)的一端稱為隊頭。

p空佇列:不含任何資料元素的佇列。

佇列的邏輯結構

佇列的抽象資料型別定義

adt  queue

data

佇列中元素具有相同型別及先進先出特性,

相鄰元素具有前驅和後繼關係

operation

initqueue

前置條件:佇列不存在

輸入:無

功能:初始化佇列

輸出:無

後置條件:建立乙個空佇列

destroyqueue

前置條件:佇列已存在

輸入:無

功能:銷毀佇列

輸出:無

後置條件:釋放佇列所占用的儲存空間

enqueue

前置條件:佇列已存在

輸入:元素值x

功能:在隊尾插入乙個元素

輸出:如果插入不成功,丟擲異常

後置條件:如果插入成功,隊尾增加了乙個元素

dequeue

前置條件:佇列已存在

輸入:無

功能:刪除隊頭元素

輸出:如果刪除成功,返回被刪元素值

後置條件:如果刪除成功,隊頭減少了乙個元素

getqueue

前置條件:佇列已存在

輸入:無

功能:讀取隊頭元素

輸出:若佇列不空,返回隊頭元素

後置條件:佇列不變

empty

前置條件:佇列已存在

輸入:無

功能:判斷佇列是否為空

輸出:如果隊列為空,返回1,否則,返回0

後置條件:佇列不變

endadt

迴圈佇列類的宣告

const intqueuesize=100;

template

class cirqueue

;練佇列類的宣告

template

classlinkqueue

;鏈佇列的實現——入隊

template

void linkqueue::enqueue(datatype x)

鏈佇列的實現——出隊

templatedatatype

>

datatypelinkqueue

::dequeue( )

迴圈佇列和鏈佇列的比較

時間效能:

ø迴圈佇列和鏈佇列的基本操作都需要常數時間o (1)。

空間效能:

ø迴圈佇列:必須預先確定乙個固定的長度,所以有儲存元素個數的限制和空間浪費的問題。

ø鏈佇列:沒有佇列滿的問題,只有當記憶體沒有可用空間時才會出現佇列滿,但是每個元素都需要乙個指標域,從而產生了結構性開銷。

本章總結

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution int pop node stack2.top stack2.pop return node private stack stack1 stack stack2 大家都知道斐波那契數列,現...

資料結構 棧和佇列

棧和佇列是兩種特殊的線性表,它們的邏輯結構和線性表相同,只是其運算規則較線性表有更多的限制,故又稱它們為運算受限的線性表。棧和佇列被廣泛應用於各種程式設計中。棧的順序儲存結構簡稱為順序棧,它是運算受限的順序表。棧的鏈式儲存結構稱為鏈棧。佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運...