@adrian
由於順序佇列的底層使用的是陣列,因此需預先申請一塊足夠大的記憶體空間初始化順序佇列。除此之外,為了滿足順序佇列中資料從隊尾進,隊頭出且先進先出的要求,我們還需要定義兩個指標(top 和 rear)分別用於指向順序佇列中的隊頭元素和隊尾元素,如圖 1 所示:
由於順序佇列初始狀態沒有儲存任何元素,因此 top 指標和 rear 指標重合,且由於順序佇列底層實現靠的是陣列,因此 top 和 rear 實際上是兩個變數,它的值分別是隊頭元素和隊尾元素所在陣列位置的下標。
在圖 1 的基礎上,當有資料元素進佇列時,對應的實現操作是將其儲存在指標 rear 指向的陣列位置,然後 rear+1;當需要隊頭元素出隊時,僅需做 top+1 操作。
例如,在圖 1 基礎上將 用順序佇列儲存的實現操作如圖 2 所示:
//入隊
intenqueue
(int
*a,int rear,
int data)
//出隊
void
dequeue
(int
*a,int front,
int rear)
}int
main()
輸出結果:
**示例:
#include
#define max 5
//表示順序表申請的空間大小
intenqueue
(int
*a,int front,
int rear,
int data)
a[rear%max]
=data;
rear++
;return rear;
}int
dequeue
(int
*a,int front,
int rear)
printf
("%d "
,a[front]);
//front不再直接 +1,而是+1後同max進行比較,如果=max,則直接跳轉到 a[0]
front=
(front+1)
%max;
return front;
}int
main()
輸出結果:
實驗二 棧和佇列 順序棧 順序佇列
棧是什麼?棧是一種結構,也是一種方式。棧代表著 後進先出 我是這麼理解的 如圖 就像是放在試管裡的雞蛋,新放進去的雞蛋肯定是在最上層,想拿走的話只能從最上層乙個個拿,這種方式叫做棧。棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對...
順序棧 鏈棧 順序佇列 鏈佇列區別
順序棧的主要特徵是用乙個陣列實現棧的儲存,top指標確定棧頂元素位置 定義形式如下 define max 100 template class seqstack void push t x t gettop t pop bool isempty bool isfull int getsize pri...
鏈式棧 鏈式佇列 順序佇列
暑期學習第一天,學習了鏈式棧 鏈式佇列和順序佇列 這三種都是舉一反三的型別 鏈式棧標頭檔案 ifndef stack h define stack h define ok 0 define error 1 結點 typedef struct stacknode stacknode 棧 typedef...