vlib队列 - C语言通用双端队列模块

vlib - deque双端队列

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); // 与初始化对应,去初始化

方法的使用具体看仓库介绍和源代码

最后

此模块为笔者本人编写,如果喜欢希望点赞给星支持,有漏洞或者修改建议欢迎留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值