資料結構與演算法 迴圈佇列鏈式佇列

2021-08-17 06:32:00 字數 3158 閱讀 8981

佇列

1、也是一種操作受限的線性表,規定只能在一端插入,一端刪除,有先進先出的特點。

2、順序佇列,隊首指標指向隊首元素,隊尾指標指向隊尾元素的前乙個元素,此時隊列為空的判定條件是

q.front == q.rear == 0

;

2、順序佇列會有假溢位的現象,為此設計了迴圈佇列。

1)為了區分隊滿和隊空的條件,迴圈佇列往往採用少用乙個單元進行入隊

隊滿判定條件:(q.rear+1)%maxsize == q.front

;隊空條件:q.front == q.rear

隊中元素的個數:(q.rear+maxsize-q.front)%maxsize

2)也可以在型別中增設size屬性

隊空:q.size == 0 && q.front == q.rear

隊滿:q.size == maxsize-1 && q.front == q.rear

順序迴圈佇列實現**一般迴圈佇列預設是順序佇列,因為鏈式佇列不會考慮儲存空間和溢位的問題,

此串**入隊enquene()有問題,不能實現入隊操作,待解決

/*

迴圈佇列,隊首指標指向隊首元素,隊尾指標指向隊尾元素的前乙個元素

*/#include

#include

#define maxsize 10

typedef

int elemtype;

typedef

enumstatus;

typedef

structsqquene;

/*初始化隊首隊尾指標

*/status init(sqquene &q)

/*判斷佇列是否為空

*/bool emptyquene(sqquene q)

return

false;

} /*

判斷佇列是否為滿

*/bool fullquene(sqquene q)

return

false;

} /*

fixme

入隊 */

status enquene(sqquene &q,elemtype x)

q.data[q.rear] = x;

q.rear = (q.rear+1)%maxsize;

return success;

} /*

出隊 */

status dequene(sqquene &q,elemtype &x)

q.data[q.front] = x;

q.front = (q.front+1)%maxsize;

return success;}/*

列印 */

void printquene(sqquene q)

int index = 0;

index = q.front%maxsize;

while(index <= q.rear)

printf("\n");

} int main(void)

printquene(q);

printf("出隊\n");

鏈式佇列實現**

/*

帶頭結點的鏈式佇列,

隊首指標(頭結點)指向隊首結點,

隊尾指標指向隊尾結點

*/#include

#include

#define maxsize 10

typedef

int elemtype;

typedef

enumstatus;

typedef

struct linknodelinknode;

typedef

structlinkquene;

/*初始化

*/status init(linkquene &q)

q.front->next = null;

return success;}/*

判空 */

bool emptyquene(linkquene q)

return

false;}/*

入隊 */

status enquene(linkquene &q,elemtype x)

s->data = x;

s->next = null;

q.rear->next = s;

q.rear = s;

return success;

} /*

出隊 */

status dequene(linkquene &q,elemtype &x)

linknode *s = q.front->next;

x = s->data;

q.front->next = s->next;

if(q.rear == s)

free(s);

return success;

}status printquene(linkquene q)

linknode * s= q.front;

while(s->next)

printf("\n");

return success;

}int main(void);

for(int i = 0;i

printf("入隊後遍歷佇列\n");

printquene(q);

printf("出隊序列\n");

資料結構與演算法 佇列(佇列 迴圈佇列 鏈式佇列)

和昨天的棧有一些類似,小孱弱弱今天分享的資料結構 佇列,那是非常有意思 顧名思義呀,佇列佇列,就是排隊呀,應該還記得棧的資料操作模式吧,僅在棧尾進行插入和刪除操作,我們的佇列呢,僅在佇列頭部刪除,佇列尾部插入,這就很清楚了吧,佇列的應用很廣泛,一定要搞清楚裡面的思想哦。進入正題 先是迴圈佇列,為什麼...

資料結構(三)順序佇列,鏈式佇列與迴圈佇列

順序佇列,就是陣列,不多贅述 鏈式佇列就是用鍊錶來實現佇列,像鍊錶一樣,在頭部增加頭部指標指向頭結點,在尾部增加尾部指標指向隊尾節點。如下 鏈式佇列,也就是用鍊錶實現的對列,用指標指向頭結點做front,尾部也來乙個指標指向rear,而當front和rear相等時,隊列為空 include incl...

資料結構與演算法 佇列 迴圈佇列

部分內容來自於 資料結構 c語言版 清華大學出版社,嚴蔚敏 吳偉民 編著 如果我們將佇列設定為順序儲存結構,那麼,因為出隊的時候是從隊首出隊,入隊的時候是從隊尾入隊,而入隊需要在後面的記憶體中開闢空間,一直這樣總會把所有的記憶體耗盡.雖然我們在出隊的時候會釋放空間,但是釋放的空間是在靠前的記憶體位址...