棧和佇列 3順序佇列

2021-10-02 05:57:13 字數 1618 閱讀 7065

@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...