資料結構 迴圈佇列的順序儲存結構

2021-09-23 10:43:45 字數 2700 閱讀 2022

專案整體源**:

佇列是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出(first in first out)的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。

線性表有順序儲存和鏈式儲存,棧是線性表,所以也有這兩種儲存方式。同樣,佇列作為一種特殊的線性表,也同樣存在這兩種儲存方式。但是佇列的順序儲存結構是有許多不足的,比如假溢位,所以,我們一般使用迴圈佇列來彌補這個不足。

迴圈佇列:我們把佇列這種頭尾相接的順序儲存結構稱為迴圈佇列

迴圈佇列中引入了兩個指標,front和rear,front指向隊頭元素,rear指向隊尾元素的下乙個位置。這樣當front等於rear時,此佇列不是還剩乙個元素,而是空佇列。迴圈佇列的好處就是不會產生假溢位現象,當rear指標到達陣列尾部時,它可以改為指向下標為0的位置。

但是,還有乙個問題,我們剛才說,空佇列時,front等於rear,可是,仔細想想,佇列滿時,因為你的rear是指向隊尾元素的後乙個位置,所以,也是front等於rear,那麼如何判斷此時的佇列是空還是滿呢。

其實,我們可以保留乙個元素空間,也就是說,佇列滿時,陣列中還有乙個空閒單元。這樣front就不會等於rear了

int

initqueue

(sqqueue *q)

//初始化佇列

int

queue_length

(sqqueue *q)

//返回佇列的長度

通用的計算佇列長度公式為(rear - front + maxsize) % maxsize

int

enqueue

(sqqueue *q, elemtype e)

//入隊操作

q->data[q->rear]

= e;

//將元素e賦值給隊尾

q->rear =

(q->rear +1)

% maxsize;

//rear指標向後移一位置,若到最後則轉到陣列頭部

return0;

}

int

dequeue

(sqqueue *q, elemtype *e)

//出隊操作

*e = q->data[q->front]

; q->front =

(q->front +1)

% maxsize;

//front指標向後移一位置,若到最後則轉到陣列頭部

return0;

}

void

show_queue

(sqqueue *q)

//列印出佇列

printf

("當前佇列元素為:");

while

((q->front)

% maxsize != q->rear)

//迴圈,依次列印佇列元素

printf

("\n");

q->front = i;

//將頭指標回到原先位置

}

到此,佇列順序儲存的基本操作就已經完成了,下面附上原始碼

#include

#include

#define maxsize 5

typedef

int elemtype;

typedef

struct

sqqueue,

*ssqqueue;

intinitqueue

(sqqueue *q)

//初始化佇列

intqueue_length

(sqqueue *q)

//返回佇列的長度

intenqueue

(sqqueue *q, elemtype e)

//入隊操作

q->data[q->rear]

= e;

//將元素e賦值給隊尾

q->rear =

(q->rear +1)

% maxsize;

//rear指標向後移一位置,若到最後則轉到陣列頭部

return0;

}int

dequeue

(sqqueue *q, elemtype *e)

//出隊操作

*e = q->data[q->front]

; q->front =

(q->front +1)

% maxsize;

//front指標向後移一位置,若到最後則轉到陣列頭部

return0;

}void

show_queue

(sqqueue *q)

//列印出佇列

printf

("當前佇列元素為:");

while

((q->front)

% maxsize != q->rear)

//迴圈,依次列印佇列元素

printf

("\n");

q->front = i;

//將頭指標回到原先位置

}int

main()

資料結構 迴圈佇列的順序儲存結構

佇列只允許在隊尾插入,在隊頭刪除 迴圈佇列防止假溢位現象 順序儲存結構用陣列實現 include using namespace std define ok 1 define error 0 define maxsize 6 typedef int elemtype typedef int stat...

資料結構 環形佇列 迴圈佇列 順序儲存

佇列是對頭出 隊尾入的先進先出線性表。需要兩個指標front和rear分別來指向隊頭和隊尾。front指向隊頭元素的前乙個位置,rear總是指向隊尾元素。進隊 rear 1 出隊 front 1 隊空條件 front rear 隊滿條件 rear maxsize 1 但是這樣會出現假溢位的情況,因為...

資料結構 非迴圈佇列 順序儲存

佇列是對頭出 隊尾入的先進先出線性表。需要兩個指標front和rear分別來指向隊頭和隊尾。front指向隊頭元素的前乙個位置,rear總是指向隊尾元素。進隊 rear 1 出隊 front 1 隊空條件 front rear 隊滿條件 rear maxsize 1 include include ...