【C语言数据结构】链栈
2017-09-19 16:21
323 查看
LinkStack.h
#ifndef LINKSTACK_H #define LINKSTACK_H typedef void LinkStack; LinkStack* LinkStack_Create(); void LinkStack_Destroy(LinkStack* stack); void LinkStack_Clear(LinkStack* stack); int LinkStack_Push(LinkStack* stack, void* item); void* LinkStack_Pop(LinkStack* stack); void* LinkStack_Top(LinkStack* stack); int LinkStack_Size(LinkStack* stack); #endif // LINKSTACK_HLinkStack.c
#include "LinkStack.h" #include "LinkList.h" #include "malloc.h" typedef struct _tag_LinkStackNode { LinkListNode node; void *item; }TLinkStackNode; LinkStack* LinkStack_Create() { return LinkList_Create(); } void LinkStack_Destroy(LinkStack* stack) { LinkStack_Clear(stack); LinkList_Destroy(stack); } void LinkStack_Clear(LinkStack* stack) { while(LinkStack_Size(stack) > 0) { LinkStack_Pop(stack); } } int LinkStack_Push(LinkStack* stack, void* item) { TLinkStackNode *node = (TLinkStackNode *)malloc(sizeof(TLinkStackNode)); int ret = ((item != 0) && (node != 0)); if(ret) { node->item = item; ret = LinkList_Insert(stack,(LinkListNode *)node,0); } if(!ret) { free(node); } return ret; } void* LinkStack_Pop(LinkStack* stack) { TLinkStackNode *node = (TLinkStackNode *)LinkList_Remove(stack,0); void *ret = 0; if(node != 0) { ret = node->item; free(node); } return ret; } void* LinkStack_Top(LinkStack* stack) { TLinkStackNode *node = (TLinkStackNode *)LinkList_Remove(stack,0); void *ret = 0; if(node != 0) { ret = node->item; } return ret; } int LinkStack_Size(LinkStack* stack) { return LinkList_Length(stack); }
相关文章推荐
- [数据结构]c语言实现链栈的入栈,出栈,清空,销毁等操作
- 数据结构_链栈的建立与相关操作_C语言源代码
- 数据结构C语言实现之链栈
- C语言数据结构-链栈
- 数据结构-链栈(C语言)
- C语言实现数据结构中的链栈
- 数据结构 - 链栈的基本操作(C语言)
- 数据结构 C语言 双向链栈 迷宫问题
- 手工数据结构系列-C语言模拟队列和栈 hdu1702
- 深入C语言之字节对齐 - [C 数据结构 算法]
- 算法与数据结构-堆的基本操作C语言实现
- 数据结构:二叉查找树(C语言实现)
- C语言-数据结构-二叉树
- 数据结构:循环队列(C语言实现)
- C语言数据结构_链表的实现
- C语言各种数据结构定义总结
- 考研笔记数据结构线性结构之C语言
- C语言数据结构——树的定义
- C语言实现数据结构中的链队列
- 数据结构---C语言栈的链式表示与实现