vlib - deque双端队列
基本概念
双端队列,是有两个出入口,兼备队列和堆栈的特性,两个端口都可以进出数据。 入队push,出队pop。
本文介绍的队列是C语言的通用双端队列,支持各种数据类型,采用连续地址的环形存储机制。
例子
int main()
{
deque_t dq = deque(int, 8); // 定义并构造一个最大容量为8的int型双端队列
int i = 0;
// 将 0,1,2 从两端添加到队列中
for (i = 0; i < 3; i++)
{
deque_push_back(dq, &i);
deque_push_front(dq, &i);
}
i = 100; deque_insert(dq, 3, &i, DEQUE_ORGIN_FRONT); // 在队头索引为3的位置插入100
// 遍历队列的元素
for (i = 0; i < deque_size(dq); i++)
{
printf("dq[%d] = %d\r\n", i, deque_at(dq, int, i));
}
// 弹出队列的前两个元素
if (deque_pop_front(dq, &i)); printf("pop: %d\r\n", i);
if (deque_pop_front(dq, &i)); printf("pop: %d\r\n", i);
// 使用完队列后进行删除
_deque(dq);
system("pause");
return 0;
}
结果:
dq[0] = 2
dq[1] = 1
dq[2] = 0
dq[3] = 100
dq[4] = 0
dq[5] = 1
dq[6] = 2
pop: 2
pop: 1
特点
- deque定义为deque_t类型
- deque构造需确定类型和大小,支持各种类型和最大的容量
- deque可以很方便的进行常用的入队出队操作
- deque具备随机访问的操作,此方式可用直接获取或者修改队列中的元素
- deque还提供插入、移除等操作方法,以及特殊的队列模式
常用方法
#define deque(type, capacity) // 构造
#define _deque(deque) // 删除
#define deque_at(deque, type, i) // 随机访问
int deque_size(deque_t deque); // 获取大小
int deque_push_front(deque_t deque, void* data); // 队头入队
int deque_push_back(deque_t deque, void* data); // 队尾入队
int deque_pop_front(deque_t deque, void* data); // 队头出队
int deque_pop_back(deque_t deque, void* data); // 队尾出队
void deque_clear(deque_t deque); // 清空
int deque_insert(deque_t deque, int index, void* data, int orgin); // 插队
int deque_erase(deque_t deque, int begin, int end, int orgin); // 移除
int deque_alter_capacity(deque_t deque, int capacity); // 修改队列的最大容量
void deque_mode(deque_t deque, int mode, int set); // 设置或者取消某些特殊的队列模式
int deque_init(deque_t deque, void* array, int data_size, int capacity); // 根据已定义数组来初始化队列
void deque_deinit(deque_t deque); // 与初始化对应,去初始化
方法的使用具体看仓库介绍和源代码
最后
此模块为笔者本人编写,如果喜欢希望点赞给星支持,有漏洞或者修改建议欢迎留言交流。