通用栈的设计和实现[C实现]
①、栈的定义
[cpp]
{
void **base; /* 栈底 */
void **top; /* 栈顶 */
int size; /* 栈的大小 */
}stack_t;
在此设计的通用栈将会达到以下两点要求:
①、可以处理任意的数据类型的数据
请注意栈中base和top的数据类型,其为void**,因此其可以处理各种数据类型
②、高效的数据操作和访问
void**其为双指针,意味入栈和出栈的将只是对应数据的地址,而不需要对数据本身进行拷贝,因此也达到了高效的目的。
②、宏定义
为提高栈的操作访问效率,可使用宏定义:
[cpp]
#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))
③、操作接口
[cpp]
/* 栈的初始化 */
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;
}
[cpp]
/* 入栈 */
int stack_push(stack_t *stack, void *node)
{
if(stack->top - stack->base >= stack->szie)
{
return -1;
}
*(stack->top) = node;
stack->top++;
return 0;
}
[html]
/* 出栈 */
int stack_top(stack *stack)
{
if(stack->top == stack->base)
{
return -1;
}
stack->top--;
*(stack->top) = NULL;
return 0;
}
[cpp]
/* 释放栈 */
void stack_free(stack_t *stack)
{
free(stack->base);
stack->base = NULL;
stack->top = NULL;
stack->size = 0;
}
补充:软件开发 , C++ ,