堆栈的实现与应用--工具
程序员文章站
2022-05-06 09:32:56
...
堆栈是一个逻辑线性结构;
特点:
1、单端出入数据;
2、先进后出;
我是将堆栈的一整套信息封装起来,用户在用时,不会触碰到工具内部的元素。
如何封装?
typedef struct MEC_STACK {
void **stack;
int capacity;
int top;
}MEC_STACK;
上述定义的是一个堆栈的控制头,如果要建立堆栈,就需要先申请一个控制头,然后才能申请真正的堆栈空间。
要求用户使用MEC_STACK *的方式使用堆栈!
申请控制头:
MEC_STACK *myStack = NULL;
建立堆栈,在这个函数里面申请了真正的堆栈空间
void initMecStack(MEC_STACK **head, int capacity) {
if(NULL == head || NULL != *head || capacity <= 0) {
return;
}
*head = (MEC_STACK *) malloc(sizeof(MEC_STACK));
(*head)->capacity = capacity;
(*head)->top = 0;
(*head)->stack = (void **) calloc(sizeof(int), capacity);
}
主函数是这样写的,仅仅做个演示:
MEC_STACK *myStack = NULL; //指针类型变量初始化都要赋值NULL;
initMecStack(&myStack, 3);
//让1,2,3入栈
push(myStack, 1);
push(myStack, 2);
push(myStack, 3);
printf("%d\n", readMecStackTop(*myStack));
printf("%d\n", pop(myStack));
printf("%d\n", readMecStackTop(*myStack));
destoryMecStack(&myStack);
运行结果如下:
这里演示的是操作int类型的堆栈,我的GitHub上的代码只是一个堆栈工具,要想使用,需要将代码中void *类型的参数改为具体的参数类型。
附上GitHub地址:
https://github.com/yangchaoy259189888/Stack/
下一篇: 【Java基础】分清堆和栈