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