c++ dequeue
时间: 2023-09-09 21:11:26 浏览: 53
C中如何实现一个双端队列(Deque)?
在C语言中,可以使用数组或链表来实现双端队列。以下是使用数组实现双端队列的一种方法:
首先,需要定义一个结构体来表示双端队列,其中包含以下字段:
- 一个整数数组用于存储队列元素
- 两个整型变量作为队头和队尾的索引
- 一个整型变量表示队列的容量
```c
#define MAX_SIZE 100
typedef struct Deque {
int elements[MAX_SIZE];
int front;
int rear;
int capacity;
} Deque;
```
然后,可以实现一些基本的操作:
1. 初始化双端队列:
```c
void initDeque(Deque *deque) {
deque->front = -1;
deque->rear = -1;
deque->capacity = MAX_SIZE;
}
```
2. 判断队列是否为空:
```c
int isEmpty(Deque *deque) {
return deque->front == -1;
}
```
3. 判断队列是否已满:
```c
int isFull(Deque *deque) {
return (deque->rear + 1) % deque->capacity == deque->front;
}
```
4. 在队头插入元素:
```c
void insertFront(Deque *deque, int element) {
if (isFull(deque)) {
printf("Deque is full.\n");
return;
}
if (isEmpty(deque)) {
deque->front = 0;
deque->rear = 0;
} else if (deque->front == 0) {
deque->front = deque->capacity - 1;
} else {
deque->front--;
}
deque->elements[deque->front] = element;
}
```
5. 在队尾插入元素:
```c
void insertRear(Deque *deque, int element) {
if (isFull(deque)) {
printf("Deque is full.\n");
return;
}
if (isEmpty(deque)) {
deque->front = 0;
deque->rear = 0;
} else {
deque->rear = (deque->rear + 1) % deque->capacity;
}
deque->elements[deque->rear] = element;
}
```
6. 从队头删除元素:
```c
void deleteFront(Deque *deque) {
if (isEmpty(deque)) {
printf("Deque is empty.\n");
return;
}
if (deque->front == deque->rear) {
deque->front = -1;
deque->rear = -1;
} else {
deque->front = (deque->front + 1) % deque->capacity;
}
}
```
7. 从队尾删除元素:
```c
void deleteRear(Deque *deque) {
if (isEmpty(deque)) {
printf("Deque is empty.\n");
return;
}
if (deque->front == deque->rear) {
deque->front = -1;
deque->rear = -1;
} else if (deque->rear == 0) {
deque->rear = deque->capacity - 1;
} else {
deque->rear--;
}
}
```
这样,双端队列的基本操作就完成了。你可以根据需要添加其他操作或功能。