用双端链表实现通用栈
2015-12-09 17:48
344 查看
这篇 还是双端链表基础上实现,这里面只是在套组件,套写过的东西,就需要重新组合一下而已,也许以后在公司也就是这个样子,感觉C语言越来越强大了,还需要好好搞搞C语言,关于栈,不想多BB,感觉说啥概念没意思了,也就是上代码,这是如何实现的
stack.h文件
stack.c文件
60多行代码写完了,栈,还是双端链表给力。
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多行代码写完了,栈,还是双端链表给力。
相关文章推荐
- jquery one 绑定一次监听事件
- HDU-3502-Huson's Adventure Island(BFS+如压力DP)
- Xamarin for VS 4.0.1.145 Stable版免费完整破解补丁
- Java程序员必知的10个调试技巧
- POJ-2352 Stars 树状数组
- Javascript之DOM(Document类型)
- java基础(一)
- 仿微信长按选项删除该聊天和置顶该聊天ContextMenu
- 同步调用、回调和异步调用
- static
- POJ-2352 Stars 树状数组
- PHP编程效率的20个要点
- ios--控件--自定义封装一个控件
- Ajax技术详解
- SQLite C++获取表信息、获取列名、获取列类型
- 逻辑思维训练500题
- 博客开篇
- 推荐一下django学习的网址!!!
- 只说说C++内联函数
- 【语音识别】HTK安装及学习