棧和佇列
一、 棧
1、 棧的定義:棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧。
2、 在任何時候出棧的元素都只能是棧頂元素,即最後最後入棧者最先出棧。所以棧中元素除了具有線性關係外,還具有後進先出的特性。
3、 棧的抽象資料型別定義:
adt stack
data
棧中元素具有相同型別及後進先出特性,相鄰元素具有前驅和後繼關係
operation
initstack
前置條件:棧不存在
輸入:無
功能:棧的初始化
輸出:無
後置條件:構造乙個空棧
destroystack
前置條件:棧已存在
輸入:無
功能:銷毀棧
輸出:無
後置條件:釋放棧所占用的儲存空間
push
前置條件:棧已存在
輸入:元素值x
功能:入棧操作,在棧頂插入乙個元素x
輸出:如果插入不成功,則丟擲異常
後置條件:如果插入成功,則棧頂增加乙個元素
pop前置條件:棧已存在
輸入:無
功能:出棧操作,刪除棧頂元素
輸出:如果刪除成功,返回被刪元素值,否則,丟擲異常
後置條件:如果刪除成功,則棧頂減少了乙個元素
gettop
前置條件:棧已存在
輸入:無
功能:取棧頂元素,讀取當前的棧頂元素
輸出:若棧不空,返回當前的棧頂元素值
後置條件:棧不變
empty
前置條件:棧已存在
輸入:無
功能:判空操作,判斷棧是否為空
輸出:如果站為空,返回1,否則返回0
後置條件:棧不變
endadt
4、 棧的順序儲存結構稱為順序棧
(1) 順序棧入站演算法push
template
void seqstack::push(dt x)
if(top==stacksize-1)throw」上溢」;
data[++top]=x;
(2) 順序棧出棧演算法pop
template
dt seqstack::pop()
if(top==-1)throw」下溢」;
(3) 兩棧共享空間入棧演算法push
template
void bothstack::push(int i,dtx)
if(top1==top2-1)throw」上溢」;
if(i==1)data[++top1]=x;
if(i==2)data[--top2]=x;
(4) 兩棧共享空間出棧演算法pop
template
dt bothstack::pop(int i)
if(i==1){
if(top1==-1)throw」下溢」;
return data[top1--];
if(i==2){
if(top2==stacksize)throw」下溢」;
return data[top2++];
5、 棧的鏈結儲存結構稱為鏈棧
(1) 鏈棧入棧演算法push
template
void linkstack::push(dt x)
s=new node;s->data=x;
s->next=top;top=s;
(2) 鏈棧入棧演算法pop
template
dtlinkstack::pop()
if(top==null)throw」下溢」;
x=top->data;p=top;
top=top->next;
delete p;
return x;
二、 佇列
6、 佇列的定義:佇列是只允許在一端進行插入操作,在另一端進行刪除操作的線性表。允許插入的一端稱為隊尾,允許刪除的一端稱為對頭。佇列中的元素除了具有線性關係外,還具有先進先出的特性。
7、 佇列的順序儲存結構----迴圈佇列
(1) 迴圈隊列入隊演算法enqueue
template
void cirqueue ::enqueue(dt x)
if((rear+1)%queuesize==front)throw」上溢」;
rear=(rear+1)% queuesize;
data[rear]=x;
(2) 迴圈佇列出隊演算法dequeue
template
dt cirqueue::dequeue()
if(rear==front)throw」下溢」;
front=(front+1) % queuesize;
return data[front];
(3) 讀取隊頭元素演算法getqueue
template
dt cirqueue:: getqueue()
if(rear==front)throw」下溢」;
i=(front+1) % queuesize;
return data[i];
8、 佇列的鏈結儲存結構----鏈佇列
(1) 鏈佇列建構函式演算法linkqueue
template
linkqueue::linkqueue()
{s=new node;s->next=null;
front=rear=s;
(2) 鏈隊列入隊演算法enqueue
template
void linkqueue::enqueue(dt x)
s=new node;s->data=x;
s->next=s;
rear=s;
(3) 鏈佇列出隊演算法dequeue
template
dt linkqueue::dequeue()
if(rear==front)throw」下溢」;
p=front->next;x=p->data;
front->next=p->next;
if(p->next==null)rear=front;
delete p;
return x;
第三章 棧和佇列
棧和佇列是兩種常用的資料結構,同時又是操作受限的線性表,也是兩種重要的抽象資料型別。1 1棧是限定僅在表尾進行插入和刪除操作的線性表。棧中元素具有線性關係和後進先出的特性。2雖然對插入和刪除操作的位置限制減少了棧的靈活性,但同時也使得棧的操作更有效更容易實現。3棧的儲存結構分兩種,一種是順序儲存結構...
第三章 棧和佇列
第三章棧和佇列 一 棧1.棧 限定僅在表尾進行插入和刪除操作的線性表 允許插入和刪除的一端稱為棧頂 另一端稱為棧底 2.空棧 不含任何資料元素的棧。3.在任何時候出棧的元素都只能是棧頂元素,即最後入棧者最先出棧,具有後進先出的特性。4.棧的抽象資料型別定義 1 push 輸入 元素值 x 輸出 如果...
第三章 棧和佇列
3.1 棧 3.1.1 棧的邏輯結構 1.棧 限定僅在表的一端進行插入和刪除操作的線性表。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。空棧 不含任何資料元素的棧。棧的操作特性 後進先出 注意 棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。2.棧的抽象資料型別定義 a...