4. 写出一个循环队列的结构体,该队列元素最多是m个。(写核心代码) 1. 写出如何判断该队列为空的函数 2. 写出如何判断该队列为满的函数 3. 写出计算当前队列中的元素个数的函数
时间: 2024-02-13 18:05:01 浏览: 108
循环队列的结构体及核心代码如下:
```c++
struct CircularQueue {
int* data;
int head;
int tail;
int capacity;
CircularQueue(int m) {
data = new int[m];
head = tail = 0;
capacity = m;
}
~CircularQueue() {
delete[] data;
}
bool isEmpty() {
return head == tail;
}
bool isFull() {
return (tail + 1) % capacity == head;
}
int size() {
return (tail - head + capacity) % capacity;
}
bool enQueue(int value) {
if (isFull()) return false;
data[tail] = value;
tail = (tail + 1) % capacity;
return true;
}
bool deQueue() {
if (isEmpty()) return false;
head = (head + 1) % capacity;
return true;
}
int front() {
if (isEmpty()) return -1;
return data[head];
}
int rear() {
if (isEmpty()) return -1;
return data[(tail - 1 + capacity) % capacity];
}
};
```
其中,data是一个动态分配的数组,head和tail分别表示队列头和队列尾的下标,capacity表示队列的容量。
isEmpty()函数判断队列是否为空,它的返回值为true时队列为空,否则队列非空。
isFull()函数判断队列是否为满,它的返回值为true时队列为满,否则队列未满。
size()函数计算队列中的元素个数,它的返回值为当前队列中的元素个数。
enQueue()函数将元素value插入到队列尾部,如果队列已经满了则返回false,否则返回true。
deQueue()函数将队列头部元素出队,如果队列已经为空则返回false,否则返回true。
front()函数返回队列头部元素的值,如果队列为空则返回-1。
rear()函数返回队列尾部元素的值,如果队列为空则返回-1。
阅读全文