头文件 deque.h
#ifndef _DEQUE_H
#define _DEQUE_H
#include <stdio.h>
#include <stdlib.h>
#define QUEUENUM 5
typedef int DataType;
typedef struct {
DataType _data[QUEUENUM];
DataType* _head;
DataType* _tail;
size_t size;
}deque;
//初始化函数
void dequeInit(deque* qu);
//清空队列的函数
void dequeEmpty(deque* qu);
//在队列中插入数据(尾插)
int dequePush(deque* qu, DataType x);
//删除队列中的数据(头删)
int dequePop(deque* qu);
//返回队首的数据
DataType dequeFront(deque* qu);
//返回队尾的数据
DataType dequeBack(deque* qu);
//队列的size大小
size_t dequeSize(deque* qu);
//判断队列是否为空
int dequeIsEmpty(deque* qu);
#endif //_DEQUE_H
源文件 deque.c
#include "deque.h"
//初始化函数
void dequeInit(deque* qu){
qu->_head = qu->_tail = qu->_data;
qu->size = 0;
}
//清空队列的函数
void dequeEmpty(deque* qu){
qu->_head = qu->_tail;
qu->size = 0;
}
//在队列中插入数据(尾插)
int dequePush(deque* qu, DataType x){
*qu->_tail = x;
if (qu->_tail + 1 == qu->_head ||
(qu->_tail + 1 - qu->_data == QUEUENUM &&
qu->_head == qu->_data)){
return -1; //此时队列已满,无法插入数据
}
qu->_tail++;
if (qu->_tail - qu->_data == QUEUENUM){
qu->_tail = qu->_data; //此处构造一个环形队列
}
qu->size++;
return 0;
}
//删除队列中的数据(头删)
int dequePop(deque* qu){
if (dequeIsEmpty(qu)){
return 0;
}
qu->_head++;
if (qu->_head - qu->_data == QUEUENUM){
qu->_head = qu->_data; //此处也是为了构造环形队列
}
qu->size--;
return 0;
}
//返回队首的数据
DataType dequeFront(deque* qu){
return *qu->_head;
}
//返回队尾的数据
DataType dequeBack(deque* qu){
if (qu->_tail == qu->_data){
return qu->_data[QUEUENUM - 1];
}
return qu->_tail[-1];
}
//队列的size大小
size_t dequeSize(deque* qu){
return qu->size;
}
//判断队列是否为空
int dequeIsEmpty(deque* qu){
return qu->_head == qu->_tail;
}
测试 源文件 main.c
#include "deque.h"
int main(){
deque test;
dequeInit(&test);
dequePush(&test, 1);
dequePush(&test, 2);
dequePush(&test, 3);
printf("%d\n", dequeFront(&test));
dequePop(&test);
printf("%d\n", dequeFront(&test));
dequePop(&test);
printf("%d\n", dequeFront(&test));
dequePush(&test, 4);
dequePush(&test, 5);
dequePop(&test);
printf("%d\n", dequeFront(&test));
dequePush(&test, 6);
dequePush(&test, 7);
dequePop(&test);
printf("%d\n", dequeFront(&test));
dequePop(&test);
printf("%d\n", dequeFront(&test));
system("pause");
return 0;
}