、如果允许在循环队列的两端都可以进行插入和删除操作。 要求: ① 写出循环队列的类型定义; ② 写出“从队尾删除”和“从队头插入”的算法。
时间: 2024-05-13 21:20:50 浏览: 23
① 循环队列的类型定义:
```c
typedef struct {
int front; // 队头指针
int rear; // 队尾指针
int size; // 队列大小
int *data; // 数据指针
} CircularQueue;
```
② “从队尾删除”和“从队头插入”的算法:
从队尾删除:
```c
int dequeue(CircularQueue *q) {
if (q->front == q->rear) { // 队列为空
return -1;
}
int val = q->data[q->rear]; // 取出队尾元素
q->rear = (q->rear - 1 + q->size) % q->size; // 更新队尾指针
return val;
}
```
从队头插入:
```c
int enqueue(CircularQueue *q, int val) {
int next_front = (q->front - 1 + q->size) % q->size; // 计算下一个队头指针位置
if (next_front == q->rear) { // 队列已满
return -1;
}
q->data[q->front] = val; // 插入队头元素
q->front = next_front; // 更新队头指针
return 0;
}
```
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)