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 鏈棧中插入乙...