資料結構與演算法(佇列)

2021-10-01 04:33:01 字數 2658 閱讀 1961

引言:在上次複習棧的基本操作後,這一次我們來複習佇列的相關知識與操作。至此——我們開始資料結構佇列的學習。

2.迴圈佇列

3.鏈式佇列

後記在棧的學習中,我們知道棧是一種只能在一端進行操作的資料結構。而佇列,是一種可以在兩端進行操作的資料結構,是先進先出的操作順序。

定義:在一端進行插入操作,在另一端進行刪除操作。

既然我們知道了佇列是兩端操作,所以我們定義兩個指標用來表達資料。

struct queue//定義佇列

;

同理,以上的是最基本的實現,其他操作要看需求。

void

in_queue

(struct queue *p,

int k)

int

out_queue

(struct queue *q)

現在我們來看一下完整**:

#include

using

namespace std;

#define max 103

struct queue

;void

in_queue

(struct queue *p,

int k)

//插入

intout_queue

(struct queue *q)

//輸出

intmain()

for(i=

0;i)return0;

}

在我們學習的佇列的基本使用後,我們來思考,在輸出時,front指標時加一的。所以佇列在使用後就會有一部分不在重用。所以,我們考慮迴圈佇列

如果我們將陣列的首尾相接,那麼我們就創立了迴圈佇列。這時,佇列長度滿足(rear-front+max)%max。

我們來看下**

struct queue//和普同的佇列是一樣,但是其他操作不同

;

void

in_queue

(struct queue *p,

int k)

int

out_queue

(struct queue *q)

現在我們來看完整**:

#include

using

namespace std;

#define max 103

struct queue

;void

in_queue

(struct queue *p,

int k)

//插入

intout_queue

(struct queue *q)

//輸出

intmain()

for(j=

0;j)return0;

}

鏈式佇列,其實就是只能在兩端操作的單鏈表

當然,我們這裡定義頭結點

struct queue//佇列節點

;struct link_q//佇列的鏈式結構

;

void

start_queue

(struct link_q *q)

//就是初始化頭結點

void

in_queue

(struct link_q *p,

int k)

int

out_queue

(struct link_q *l)

現在我們可以寫出完整**:

#include

using

namespace std;

struct queue

;struct link_q

;void

start_queue

(struct link_q *q)

//初始化

void

in_queue

(struct link_q *p,

int k)

//插入

intout_queue

(struct link_q *l)

//輸出

intmain()

for(i=

0;i)return0;

}

本次我們寫佇列的實現,其主要問題就是空間問題,所以我們實現了迴圈佇列。但是動態空間的優勢可能更符合我們的需求,所以我們又實現了鏈式佇列。到這裡,佇列就結束了,我們將繼續往下學習。

資料結構與演算法 佇列

學習了好長 一段時間的資料結構,由於時間關係一直沒有寫部落格。這次打算將這段時間的學習內容寫下來做個整理。佇列作為線性結構的一種,其實用性不用多說。這裡總結下兩種結構的佇列實現。迴圈佇列 先列下以順序表結構形成的普通順序佇列存在的問題 隊頭不斷刪除元素,將使佇列的頭部空出單元 隨著刪除 插入的進行,...

資料結構與演算法 佇列

佇列 佇列與棧不同,它是一種先進先出的結構 實現 1 陣列 2 鍊錶 記錄的資料 1 隊首位置 第乙個元素的位置 2 隊尾位置 最後乙個元素的位置 3 佇列大小 size 佇列操作 entryqueue 入隊 exitqueue 出隊 isqueueempty 隊列為空 isqueuefull 佇列...

演算法與資料結構 佇列

adt queue d d 資料關係 r r a i d,i 2,3,n r 約定a 1a 1 a1 端為隊首,a na n an 端為隊尾。基本操作 create 建立乙個空佇列 emptyque 若隊列為空,則返回true,否則返回false insertque x 向隊尾插入元素x delet...