写一个循环队列的结构体,该队列元素最多为m,并写出计算当前队列中元素个数的函数
时间: 2024-02-15 15:02:50 浏览: 77
设以数组se[m]存放循环队列的元素,同时设变量rear 和front分别作为队头队尾指针,且队头指针指向队头前一个位置,写出这样设计的循环队列入队和出队算法。
5星 · 资源好评率100%
下面是一个循环队列的结构体定义,以及计算当前队列中元素个数的函数实现:
```c++
struct CircularQueue {
int front; // 队头下标
int rear; // 队尾下标
int maxSize; // 队列最大容量
int* data; // 队列数据
// 初始化循环队列
CircularQueue(int m) {
front = rear = 0;
maxSize = m + 1;
data = new int[maxSize];
}
// 销毁循环队列
~CircularQueue() {
delete[] data;
}
// 判断循环队列是否为空
bool isEmpty() {
return front == rear;
}
// 判断循环队列是否已满
bool isFull() {
return (rear + 1) % maxSize == front;
}
// 元素入队
bool enqueue(int e) {
if (isFull()) {
return false;
}
data[rear] = e;
rear = (rear + 1) % maxSize;
return true;
}
// 元素出队
bool dequeue() {
if (isEmpty()) {
return false;
}
front = (front + 1) % maxSize;
return true;
}
// 获取队头元素
int getFront() {
if (!isEmpty()) {
return data[front];
}
return -1; // 队列为空,返回一个特殊值
}
// 获取队列中元素个数
int size() {
return (rear - front + maxSize) % maxSize;
}
};
```
在上面的代码中,我们定义了一个结构体 `CircularQueue`,表示循环队列。其中包括队头下标 `front`、队尾下标 `rear`、队列最大容量 `maxSize` 和队列数据 `data`。通过定义这些属性和方法,我们可以方便地实现循环队列的基本操作。
`size()` 函数的实现与前面所述的相同,用于计算当前队列中元素的个数。在该函数中,我们利用了循环队列的特性,通过 `(rear - front + maxSize) % maxSize` 计算出队列中的元素个数。
阅读全文