專案整體源**:
佇列是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出(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 ...