順序迴圈佇列的基本運算(C語言)
阿新 • • 發佈:2019-01-09
迴圈佇列sq中:
1. front(隊頭指標)指向實際佇列元素的第一個元素的前一個位置,rear(隊尾指標)指向實際佇列元素的最後一個元素位置。(可根據需要自定義) 2. 迴圈佇列中的滿並非真正意義上的滿,即並不是所有的位置上都儲存有元素,而是front和rear之間仍然隔著一個空位。若不隔此空位,當sq->rear == sq->front時,是滿?還是空?。 3. 初始時:sq->front = sq->rear = 0;(初始化) 隊空條件:sq->front == sq->rear;(判空) 隊滿條件:(sq->rear+1)%MaxLen == sq->front;(判滿)完整程式碼如下:
//queue.cpp - 順序迴圈佇列的基本運算 #include <iostream> #define MaxLen 20 //順序佇列的節點型別定義 typedef char ElementType; typedef struct queue { ElementType data[MaxLen]; //順序佇列的儲存方式 - 一維陣列 int front, rear; //front - 頭指標、rear - 尾指標 } queue; //基本運算 void InitQueue(queue *sq); //初始化佇列 bool EnQueue(queue *sq, ElementType x); //入佇列 bool OutQueue(queue *sq, ElementType &x); //出佇列 bool IsEmpty(queue *sq); //判空 bool IsFull(queue *sq); //判滿 //具體實現 //初始化佇列 void InitQueue(queue *sq) { sq->front = 0; sq->rear = 0; } //判空 bool IsEmpty(queue *sq) { if(sq->front == sq->rear) //佇列為空 return true; else return false; } //判滿 - 這裡的滿不是真正意義上的滿,最滿的情況時,front和rear之間還隔有一個空位 bool IsFull(queue *sq) { if( (sq->rear+1)%MaxLen == sq->front ) //佇列上溢位 return true; else return false; } //入佇列 bool EnQueue(queue *sq, ElementType x) { if( IsFull(sq) ) //佇列已滿,無法再入佇列 return false; else { sq->rear = (sq->rear+1) % MaxLen; sq->data[sq->rear] = x; return true; } } //出佇列 bool OutQueue(queue *sq, ElementType &x) { if( IsEmpty(sq) ) //佇列為空,無法出佇列 return false; else { sq->front = (sq->front+1) % MaxLen; x = sq->data[sq->front]; return true; } }