欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

堆栈的实现与应用--工具

程序员文章站 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/


相关标签: 堆栈