vlib队列 - C语言通用堆栈模块

vlib - stack堆栈

stack源代码仓库链接

基本概念

堆栈是一种先进后出(First In Last Out,FILO)的数据结构,一般情况下只有一个出入口,从栈顶进从栈顶出。入栈push,出栈pop。
本文介绍的堆栈是C语言的通用堆栈,支持各种数据类型,采用连续地址的环形存储机制。

例子

int main()
{
	stack_t st = stack(int, 8); // 定义并构造一个最大容量为8的int型堆栈
	int i = 0;

	// 将 0,1,2,3,4 添加到堆栈中
	for (i = 0; i < 5; i++)
	{
		stack_push(st, &i);
	}
	i = 100; stack_insert(st, 2, &i, STACK_ORGIN_BOTTOM); // 在堆栈底部索引为2的位置插入100

	// 遍历堆栈的元素
	for (i = 0; i < stack_size(st); i++)
	{
		printf("st[%d] = %d\r\n", i, stack_at(st, int, i));
	}

	// 弹出栈顶两个元素
	if (stack_pop(st, &i)); printf("pop: %d\r\n", i);
	if (stack_pop(st, &i)); printf("pop: %d\r\n", i);

	// 使用完堆栈后进行删除
	_stack(st);

	system("pause");
	return 0;
}

结果:

st[0] = 0
st[1] = 1
st[2] = 100
st[3] = 2
st[4] = 3
st[5] = 4
pop: 4
pop: 3

特点

  • stack定义为stack_t类型
  • stack构造需确定类型和大小,支持各种类型和最大的容量
  • stack可以很方便的进行常用的入栈出栈操作
  • stack具备随机访问的操作,此方式可用直接获取或者修改堆栈中的元素
  • stack还提供插入、移除等操作方法,以及特殊的堆栈模式

常用方法

#define stack(type, capacity) // 构造
#define _stack(stack) // 删除
#define stack_at(stack, type, i) // 随机访问
int stack_size(stack_t stack); // 获取大小
int stack_push(stack_t stack, void* data); // 入栈
int stack_pop(stack_t stack, void* data); // 出栈
void stack_clear(stack_t stack); // 清空
int stack_insert(stack_t stack, int index, void* data, int orgin); // 插入
int stack_erase(stack_t stack, int begin, int end, int orgin); // 移除
int stack_alter_capacity(stack_t stack, int capacity); // 修改堆栈的最大容量
void stack_mode(stack_t stack, int mode, int set); // 设置或者取消某些特殊的堆栈模式
int stack_init(stack_t stack, void* array, int data_size, int capacity); // 根据已定义数组来初始化堆栈
void stack_deinit(stack_t stack); // 与初始化对应,去初始化

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

最后

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值