順序佇列是一種只能在一頭進和另一頭出的資料結構,所以結構體裡設2個指標分別指向頭部和尾部,用陣列來儲存資料。
1順序佇列會有一種假溢位的現象:當元素進隊或出隊的時候,front或rear會加一,在乙個陣列中,兩個指標都在向陣列後面移動,直到它倆到達了陣列尾部,但前面就會空出未使用的位置。解決方法就是取餘運算,把它當做迴圈佇列。#define maxsize 1024
23 typedef int
elemtype;
45 typedef struct
sequenqueuesequenqueue;
1011 sequenqueue *init_sequenqueue()
1819
20 p->front = 0
;21 p->rear = 0;22
return
p;23
24 }
進隊的運算:p->rear = (p->rear+1) % maxsize
出隊的運算:p->front = (p->front+1) % maxsize
假設陣列長度為6,開始時front和rear都指向0,進隊abcd四個元素,再進隊ef元素,rear指向下標為0的位置,出隊ab元素front指向c元素。再進隊gh元素使rear和front在同一位置,此時隊滿但卻發現front==rear不能作為隊空的判斷條件。應對方法有2種:一種為少使用乙個位置,如上圖d所示。判斷隊滿的條件為(p->rear+1) % maxsize) == (p->front % maxsize)(右邊取餘運算可省略)。另一種是用計數器的方法,入隊加一出隊減一,一直加到陣列的最大長度即為滿。
1入隊和出隊int sequenqueue_full(sequenqueue *p)910
int sequenqueue_empty(sequenqueue *p)
1int delete_sequenqueue(sequenqueue *p)
1011
int enter_sequenqueue(sequenqueue *p,elemtype e)
靜態順序佇列 C語言
如下 include include define maxsize 20 靜態順序佇列的最大容量 typedef struct sqqueue void initqueue sqqueue q 初始化佇列 void enqueue sqqueue q,int e 入隊 由於是迴圈佇列,故少用乙個元素...
動態順序佇列 C語言
如下 include include define initsize 6 typedef struct sqqueue void initqueue sqqueue q 初始化佇列 void enqueue sqqueue q,int e 進隊 由於是迴圈佇列,故少用乙個元素空間,該函式在有maxs...
佇列的順序實現(c語言)
include include define maxsize 100 typedef struct sqqueuesqqueue 初始化 sqqueue initqueue 入隊 int enqueue sqqueue sqqueue,int elem 出隊 int dequeue sqqueue ...