当前位置:编程学习 > C/C++ >>

通用栈的设计和实现[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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,