1、假设以数组 se [ m ]存放循环队列的元素,同时设置变量 front 和 rear 分别作为队头指针和队尾指针,且队头指针指向队头前一个位置,写出判定此循环队列为满的条件,并给出循环队列的入队和出队的算法。
时间: 2023-06-14 12:04:24 浏览: 306
循环队列为满的条件是:(rear + 1) % m == front。
循环队列的入队算法:
1. 判断队列是否已满,若已满则返回队满的错误信息;
2. 将新元素插入到队尾 rear 处;
3. rear 指针向后移动一位,即 rear = (rear + 1) % m。
循环队列的出队算法:
1. 判断队列是否为空,若为空则返回队空的错误信息;
2. 取出队头元素;
3. front 指针向后移动一位,即 front = (front + 1) % m。
以下是示例代码:
```c++
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
bool isFull(SqQueue q) {
return (q.rear + 1) % MAXSIZE == q.front;
}
bool isEmpty(SqQueue q) {
return q.front == q.rear;
}
bool enQueue(SqQueue &q, int x) {
if (isFull(q)) {
return false;
}
q.data[q.rear] = x;
q.rear = (q.rear + 1) % MAXSIZE;
return true;
}
bool deQueue(SqQueue &q, int &x) {
if (isEmpty(q)) {
return false;
}
x = q.data[q.front];
q.front = (q.front + 1) % MAXSIZE;
return true;
}
```
阅读全文