#include <iostream> #include <cstdio> #include <cstdlib> #include <ctime> using namespace std; using ElemType = int; const int MAXSIZE = 20; // 隊列結構 class Queue { public: ElemType data[MAXSIZE]; int front; // 隊首 int rear; // 隊尾 }; // 初始化隊列 void initQueue(Queue &queue) { queue.front = 0; queue.rear = 0; } // 判空:front == rear bool isEmpty(const Queue &queue) { if (queue.front == queue.rear) return true; return false; } // 判滿:(rear+1) % MAXSIZE == front bool isFull(const Queue &queue) { if (queue.front == (queue.rear+1) % MAXSIZE) return true; return false; } // 進隊列 void addElem(Queue &queue, ElemType val) { if (isFull(queue)) { cout << "queue is full...\n"; return; } queue.data[queue.rear] = val; queue.rear = (queue.rear + 1) % MAXSIZE; } // 出隊列 void delElem(Queue &queue) { if (isEmpty(queue)) { cout << "queue is empty...\n"; return; } cout << "隊首元素為" << queue.data[queue.front] << endl; queue.front = (queue.front + 1) % MAXSIZE; } // 獲取隊列長度:(rear - front) % MAXSIZE int getLen(const Queue &queue) { return (queue.rear - queue.front) % MAXSIZE; } int main() { Queue queue; int queLen = 0; initQueue(queue); queLen = getLen(queue); cout << "當前隊列的長度為:" << queLen << endl; addElem(queue, 1); addElem(queue, 2); addElem(queue, 3); addElem(queue, 4); queLen = getLen(queue); cout << "當前隊列的長度為:" << queLen << endl; delElem(queue); delElem(queue); queLen = getLen(queue); cout << "當前隊列的長度為:" << queLen << endl; }
【補充】
循環隊列隊首和隊尾的一些關系(假設隊首下標為front,隊尾下標為rear,數組長度為MAXSIZE):
- 隊列為空:rear == front
- 隊列為滿:(rear + 1) % MAXSIZE == front //(基於給隊列留一個空閑位置而實現,不然和隊列為空時條件重合)
- 隊列長度:(rear - front) % MAXSIZE