vlib - 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); // 与初始化对应,去初始化
方法的使用具体看仓库介绍和源代码
最后
此模块为笔者本人编写,如果喜欢希望点赞给星支持,有漏洞或者修改建议欢迎留言交流。