標籤:資料結構 隊列
隊列
什麼是隊列?
一種可以實現“先進先出”的儲存結構。
出隊 入隊 -->>隊列
出棧 壓棧 -->>棧
鏈式隊列 ---用鏈表實現的
靜態隊列 ---用數組實現的
靜態隊列通常必須是迴圈隊列..
039.迴圈隊列需要幾個參數來確定極其含義的講解
front代表的是隊列的第一個元素
rear代表的是隊列的最後一個有效元素的下一個元素
隊列為空白:
front和rear的值相等,但不一定為零
隊列初始化
front和rear的值都是零.
迴圈隊列入隊的偽演算法
1)將入隊的值存入r所代表的位置
2)r=(r+1)%數組的長度
迴圈隊列出隊的偽演算法
1)將出隊的值存入f所代表的位置
2)f=(f+1)%數組的長度
判斷隊列是否已滿
if((r+1)%數組的長度 == f)
已滿
else
不滿
隊列的具體操作
#include <stdio.h>#include <malloc.h>/** * *隊列的建立...等操作 * */typedef struct Queue{int * pBase;int front;int rear;}QUEUE;void init(QUEUE *);bool en_queue(QUEUE *, int val);void traverse_queue(QUEUE *);bool full_queue(QUEUE *);bool empty_queue(QUEUE *);bool out_queue(QUEUE *, int *);int main(void){Queue q;int val;init(&q);en_queue(&q, 1);en_queue(&q, 2);en_queue(&q, 3);en_queue(&q, 4);en_queue(&q, 5);en_queue(&q, 6);en_queue(&q, 7);traverse_queue(&q);if(out_queue(&q, &val)){printf("出隊成功,出隊的元素是 %d \n", val);}else{printf("出隊失敗");}traverse_queue(&q);return 0;}void init(QUEUE *PQ){PQ->pBase = (int *)malloc(sizeof(int)*6);PQ->front = 0;PQ->rear = 0;}bool full_queue(QUEUE * PQ){if((PQ->rear + 1)%6 == PQ->front)return true;elsereturn false;}bool en_queue(QUEUE * PQ, int val){if(full_queue(PQ)){return false;}else{PQ->pBase[PQ->rear] = val;PQ->rear = (PQ->rear +1 )%6;return true;}}void traverse_queue(QUEUE *PQ){int i = PQ->front;while(i != PQ->rear){printf("%d ", PQ->pBase[i]);i = (i+1)%6;}printf("\n");return;}bool empty_queue(QUEUE *PQ){if(PQ->front == PQ->rear)return true;elsereturn false;}bool out_queue(QUEUE *PQ, int *pVal){if(empty_queue(PQ)){return false;}else{*pVal = PQ->pBase[PQ->front];PQ->front = (PQ->front +1)%6;return true;}}
(郝斌講學)資料結構學習篇(五)---隊列的CRUD操作