如何在C语言中使用deque
时间: 2023-07-09 15:09:28 浏览: 102
在C语言中使用deque(双端队列),需要先引入<stdio.h>和<stdlib.h>这两个头文件。接着,可以通过定义结构体来实现deque的使用。例如,定义一个包含元素值和前后指针的结构体双向节点:
```
typedef struct deque_node_t {
int val;
struct deque_node_t *prev;
struct deque_node_t *next;
} deque_node;
```
然后,定义双向队列的结构体:
```
typedef struct deque_t {
deque_node *head;
deque_node *tail;
} deque;
```
可以定义一些操作双向队列的函数,例如:
1. 创建一个双向队列
```
deque* createDeque() {
deque *d = (deque*) malloc(sizeof(deque));
d->head = d->tail = NULL;
return d;
}
```
2. 双向队列首部插入元素
```
void deque_push_front(deque *d, int val) {
deque_node *node = (deque_node*) malloc(sizeof(deque_node));
node->val = val;
node->prev = NULL;
node->next = d->head;
if (d->head) {
d->head->prev = node;
} else {
d->tail = node;
}
d->head = node;
}
```
3. 双向队列尾部插入元素
```
void deque_push_back(deque *d, int val) {
deque_node *node = (deque_node*) malloc(sizeof(deque_node));
node->val = val;
node->next = NULL;
node->prev = d->tail;
if (d->tail) {
d->tail->next = node;
} else {
d->head = node;
}
d->tail = node;
}
```
4. 双向队列首部弹出元素
```
int deque_pop_front(deque *d) {
deque_node *node = d->head;
int val = node->val;
d->head = node->next;
if (d->head) {
d->head->prev = NULL;
} else {
d->tail = NULL;
}
free(node);
return val;
}
```
5. 双向队列尾部弹出元素
```
int deque_pop_back(deque *d) {
deque_node *node = d->tail;
int val = node->val;
d->tail = node->prev;
if (d->tail) {
d->tail->next = NULL;
} else {
d->head = NULL;
}
free(node);
return val;
}
```
通过以上函数的组合使用,就可以实现双向队列的功能。