写一个C++的双端队列算法的程序
时间: 2023-03-23 21:02:22 浏览: 119
以下是一个使用C语言实现双端队列算法的程序:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
//定义双端队列结构体
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Deque;
//初始化队列
void initDeque(Deque *dq) {
dq->front = 0;
dq->rear = 0;
}
//插入元素到队头
void insertFront(Deque *dq, int val) {
if (dq->front == 0) {
printf("队头已满,无法插入!\n");
return;
}
dq->front--;
dq->data[dq->front] = val;
}
//插入元素到队尾
void insertRear(Deque *dq, int val) {
if (dq->rear == MAX_SIZE - 1) {
printf("队尾已满,无法插入!\n");
return;
}
dq->data[dq->rear] = val;
dq->rear++;
}
//从队头删除元素
int deleteFront(Deque *dq) {
if (dq->front == dq->rear) {
printf("队头已空,无法删除!\n");
return -1;
}
int val = dq->data[dq->front];
dq->front++;
return val;
}
//从队尾删除元素
int deleteRear(Deque *dq) {
if (dq->front == dq->rear) {
printf("队尾已空,无法删除!\n");
return -1;
}
dq->rear--;
int val = dq->data[dq->rear];
return val;
}
//获取队头元素
int getFront(Deque *dq) {
if (dq->front == dq->rear) {
printf("队头已空!\n");
return -1;
}
return dq->data[dq->front];
}
//获取队尾元素
int getRear(Deque *dq) {
if (dq->front == dq->rear) {
printf("队尾已空!\n");
return -1;
}
return dq->data[dq->rear - 1];
}
int main() {
Deque dq;
initDeque(&dq);
insertRear(&dq, 1); //队列:1
insertFront(&dq, 2); //队列:2 1
insertFront(&dq, 3); //队列:3 2 1
insertRear(&dq, 4); //队列:3 2 1 4
printf("队列头部元素:%d\n", getFront(&dq)); //输出:3
printf("队列尾部元素:%d\n", getRear(&dq)); //输出:4
deleteFront(&dq); //队列:2 1 4
deleteRear(&dq); //队列:2 1
printf("队列头部元素:%d\n", getFront(&dq)); //输出:2
printf("队列尾部元素:%d\n", getRear(&dq)); //输出:1
return 0;
}
```
以上程序实现了双端队列
阅读全文