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

堆栈是一个逻辑线性结构;

特点:

    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/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值