資料結構 第三章 棧和佇列

2021-09-29 06:50:00 字數 3041 閱讀 5138

3.1特殊的線性表——棧

3.2特殊的線性表——佇列

3.1特殊的線性表——棧

3.1.1棧的邏輯結構

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

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

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

棧的操作特性:後進先出。

3.1.2棧的順序儲存結構及實現

順序棧類

//順序棧類的宣告

const

int max_size=

100;

template

<

class

t>

class

seqstack

//入棧

void seqstack

::push ( t x)

//判斷是否為空棧

bool seqstack

::empty (

)// 取棧頂

t seqstack

::gettop (

)//出棧

t seqstack

:: pop (

)

兩棧共享空間

兩棧共享空間:使用乙個陣列來儲存兩個棧,讓乙個棧的棧底為該陣列的始端,另乙個棧的棧底為該陣列的末端,兩個棧從各自的端點向中間延伸。

棧1的底固定在下標為0的一端;

棧2的底固定在下標為stacksize-1的一端;

top1和top2分別為棧1和棧2的棧頂指標;

stack_size為整個陣列空間的大小。

兩棧共享空間類

//兩棧共享空間類的宣告

const

int stack_size=

100;

template

<

class

t>

class

bothstack

;//輸入

void bothstack

::push

(int i, t x )

//刪除

t bothstack

::pop

(int i)

if(i==2)

}//判斷某個棧為空

bool bothstack

::empty

(int i)

if(i==2)

}//取某個棧棧頂

t bothstack

::gettop

(int i)

if(i==2)

}

3.1.3棧的鏈結儲存結構及實現
//鏈棧的類宣告

template

<

class

t>

class

linkstack;~

linkstack()

;void

push

(t x)

; t pop()

; t gettop()

;bool

empty()

;private

: node

*top;

}//插入

void linkstack

::push

(t x)

//刪除

t linkstack

::pop()

//鏈棧的析構

linkstack::~

linkstack()

}

順序棧和鏈棧的比較

時間效能:相同,都是常數時間o(1)。

空間效能:

順序棧:有元素個數的限制和空間浪費的問題。

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

結論:當棧的使用過程中元素個數變化較大時,用鏈棧是適宜的,反之,應該採用順序棧。

3.2特殊線性表——佇列

3.2.1 佇列的邏輯結構

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

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

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

佇列的操作特性:先進先出(fifo,lilo)。

隊空:front=rear

隊滿:front=rear

為什麼要將隊空和隊滿的判定條件分開?

如何確定不同的隊空、隊滿的判定條件?

方法一:附設乙個儲存佇列中元素個數的變數num,當num=0時隊空,當num=queuesize時為隊滿;

方法二:修改隊滿條件,浪費乙個元素空間,隊滿時陣列中只有乙個空閒單元;

方法三:設定標誌flag,當front=rear且flag=0時為隊空,當front=rear且flag=1時為隊滿。迴圈佇列類

const

int queuesize=

100;

template

<

class

t>

class

cirqueue

; private

: t data[queuesize]

;int front, rear;

};

鏈佇列類

template

<

class

t>

class

linkqueue

;

迴圈佇列和鏈佇列的比較

時間效能:

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

空間效能:

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

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

資料結構第三章棧和佇列

第四章 棧和佇列 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 佇列的鏈式儲存結構 一.構造原理 二 實現 ...

資料結構 第三章棧和佇列

棧中允許插入和刪除的一端為棧頂 top 另一段為棧底botton 遵循後進先出的原則 棧的抽象資料型別描述 clear置空 isempty判棧空 peek取棧 push入棧 pop出棧 順序棧及其基本操作的實現 top為0時為空 top stackelem.length 棧的長度top 鏈棧中插入乙...