如果允许在循环队列的两端都可以进行插入和删除操作。要求: ① 写出循环队列的类型定义; ② 写出“从队尾删除”和“从队头插入”的算法。
时间: 2024-05-03 12:20:56 浏览: 46
循环队列的类型定义:
```
typedef struct {
int *data; // 存储数据的数组
int front; // 队头指针(指向队头元素)
int rear; // 队尾指针(指向队尾元素的下一个位置)
int maxSize; // 队列的最大容量
} CircularQueue;
```
从队尾删除算法:
```
bool deque(CircularQueue *queue, int *value) {
if (queue->front == queue->rear) { // 队列为空
return false;
}
*value = queue->data[--queue->rear]; // 取出队列末尾元素
return true;
}
```
从队头插入算法:
```
bool enqueue(CircularQueue *queue, int value) {
int nextRear = (queue->rear + 1) % queue->maxSize;
if (nextRear == queue->front) { // 队列已满
return false;
}
queue->data[queue->front] = value; // 将元素插入队头位置
queue->front = (queue->front + 1) % queue->maxSize; // 更新队头指针
return true;
}
```
笑话时间:为什么海星可以断臂,因为海星很懒,只想睡懒觉!
阅读全文