栈的实现(C语言版)

#include <stdio.h>
#include "malloc.h"
#include "assert.h"


typedef struct tag_link
{
	int data;
	struct tag_link* next;
}Link;

typedef struct tag_Stack
{
	Link* head;
	int size;
} Stack;
void StackInit(Stack* stack )
{
	stack->head=NULL;
	stack->size=0;
}

void StackPush(Stack* stack,int data)
{
	Link* link = (Link*)malloc(sizeof(Link));
	assert(link != NULL);
	link->next=stack->head;
	link->data=data;
	stack->head=link;
	stack->size++;
}
int StackEmpty(Stack* stack)
{
	return stack->size==0;
}
int StackPop(Stack* stack, int* data)
{
	Link* link=stack->head;
	if (StackEmpty(stack))
	{
		return 0;
	}
	
	*data = stack->head->data;
	stack->head=stack->head->next;
	free(link);
	stack->size--;
	return 1;
}

void StackClear(Stack* stack)
{
	int i;
	while(!StackEmpty(stack))
	{
		StackPop(stack,&i);
	}
}

int main()
{
	int i=0;
	Stack stack;
	StackInit(&stack);
	for (i=0;i<5;i++)
	{
		StackPush(&stack,i);
	}
	while(!StackEmpty(&stack))
	{
		StackPop(&stack,&i);
		printf("%d\n",i);
	}

	return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值