通用栈的设计和实现[C实现]

①、栈的定义

typedef struct
{
	void **base; /* 栈底 */
	void **top;  /* 栈顶 */
	int size;    /* 栈的大小 */
}stack_t;

在此设计的通用栈将会达到以下两点要求:

①、可以处理任意的数据类型的数据

请注意栈中base和top的数据类型,其为void**,因此其可以处理各种数据类型

②、高效的数据操作和访问

void**其为双指针,意味入栈和出栈的将只是对应数据的地址,而不需要对数据本身进行拷贝,因此也达到了高效的目的。

②、宏定义

为提高栈的操作访问效率,可使用宏定义:

#define stack_maxsize(stack) (stack->size)
#define stack_isempty(stack) (stack->top == stack->base)
#define stack_depth(stack) (stack->top - stack->base)
#define stack_gettop(stack) ((stack->top == stack->base)? NULL: *(stack->top - 1))

③、操作接口

/* 栈的初始化 */
int stack_init(stack_t *stack, int size)
{
	memset(stack, 0, sizeof(stack_t));

	stack->base = (void**)calloc(size, sizeof(void*));
	if(NULL == stack->base)
	{
		return -1;
	}
	stack->top = stack->base;
	stack->size = size;
	return 0;
}

/* 入栈 */
int stack_push(stack_t *stack, void *node)
{
	if(stack->top - stack->base >= stack->szie)
	{
		return -1;
	}
	*(stack->top) = node;
	stack->top++;
	return 0;
}
/* 出栈 */
int stack_top(stack *stack)
{
	if(stack->top == stack->base)
	{
		return -1;	
	}
	stack->top--;
	*(stack->top) = NULL;
	return 0;
}
/* 释放栈 */
void stack_free(stack_t *stack)
{
	free(stack->base);
	stack->base = NULL;
	stack->top = NULL;
	stack->size = 0;
}


——邹祁峰

2013.03.09 凌晨2:18

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值