读书人

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

发布时间: 2013-03-13 10:56:58 作者: rapoo

通用栈的设计和实现[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

读书人网 >编程

热点推荐