#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
