用双端链表实现通用栈

来源:互联网 发布:steam动态桌面软件 编辑:程序博客网 时间:2024/05/18 01:26

      这篇 还是双端链表基础上实现,这里面只是在套组件,套写过的东西,就需要重新组合一下而已,也许以后在公司也就是这个样子,感觉C语言越来越强大了,还需要好好搞搞C语言,关于栈,不想多BB,感觉说啥概念没意思了,也就是上代码,这是如何实现的

  stack.h文件

#ifndef _STACK_H_#define _STACK_H_#include "dlist.h"#include "tools.h"//栈的控制信息typedef struct Stack{    Dlist *dlist;   //用双端链表的控制信息直接封装栈}Stack;//关于栈的接口Stack *init_stack(void);    //栈的初始化void destroy_stack(Stack **stack);    //栈的销毁void push(Stack *stack, void *value);    //入栈Boolean pop(Stack *stack);    //出栈Boolean get_top(Stack *stack, void **value);   //得到栈顶元素Boolean is_stack_empty(Stack *stack);    //判断栈是否为空int get_stack_count(Stack *stack);    //得到栈的元素个数#endif

  stack.c文件


#include "stack.h"//关于栈的接口Stack *init_stack(void)    //栈的初始化{    Stack *stack = (Stack *)Malloc(sizeof(Stack));    stack->dlist = init_dlist();    return stack;}void destroy_stack(Stack **stack)    //栈的销毁{    if(stack == NULL || *stack == NULL){        return ;    }        //先释放栈控制信息中双端链表,在释放栈的控制信息    destroy_dlist( &((*stack)->dlist) );    free(*stack);    *stack = NULL;}void push(Stack *stack, void *value)    //入栈{    if(stack == NULL || value == NULL){        return ;    }    push_front(stack->dlist, value);}Boolean pop(Stack *stack)    //出栈{    if(stack == NULL || is_stack_empty(stack)){        return FALSE;    }    return pop_front(stack->dlist);}Boolean get_top(Stack *stack, void **value)   //得到栈顶元素{    if(stack == NULL || is_stack_empty(stack)){        return FALSE;    }    if(value != NULL){        get_front(stack->dlist, value);    }    return TRUE;}Boolean is_stack_empty(Stack *stack)    //判断栈是否为空{    return get_stack_count(stack) == ZERO; }int get_stack_count(Stack *stack)    //得到栈的元素个数{    if(stack == NULL){        return -1;    }    return get_dlist_count(stack->dlist);}

60多行代码写完了,栈,还是双端链表给力。

0 0
原创粉丝点击