基于链表的堆栈实现
2014-04-22 13:05
239 查看
定义函数接口头文件“sl.h”
函数具体实现“sl.c”
测试用例“sl_test.c”
/* 基于链表的堆栈 */ #ifndef _SL_H #define _SL_H #include <sys/types.h> /* 节点 */ typedef struct StackNode { int data; /* 数据 */ struct StackNode* next; /* 后指针 */ } STACK_NODE; /* 堆栈 */ typedef struct Stack { STACK_NODE* top; /* 栈顶 */ } STACK; /* 初始化为空堆栈 */ void stack_init (STACK* stack); /* 释放剩余节点并恢复到初始状态 */ void stack_deinit (STACK* stack); /* 判断是否空 */ int stack_empty (STACK* stack); /* 压入 */ void stack_push (STACK* stack, int data); /* 弹出 */ int stack_pop (STACK* stack); /* 栈顶 */ int stack_top (STACK* stack); /* 数量 */ size_t stack_size (STACK* stack); #endif /* _SL_H */
函数具体实现“sl.c”
/* 基于链表的堆栈 */ #include <stdlib.h> #include "sl.h" /* 创建节点 */ static STACK_NODE* create_node (int data, STACK_NODE* next) { STACK_NODE* node = malloc (sizeof (STACK_NODE)); node->data = data; node->next = next; return node; } /* 销毁节点 */ static STACK_NODE* destroy_node (STACK_NODE* node) { STACK_NODE* next = node->next; free (node); return next; } /* 初始化为空堆栈 */ void stack_init (STACK* stack) { stack->top = NULL; } /* 释放剩余节点并恢复到初始状态 */ void stack_deinit (STACK* stack) { while (stack->top) stack->top = destroy_node (stack->top); } /* 判断是否空 */ int stack_empty (STACK* stack) { return ! stack->top; } /* 压入 */ void stack_push (STACK* stack, int data) { stack->top = create_node (data, stack->top); } /* 弹出 */ int stack_pop (STACK* stack) { int data = stack->top->data; stack->top = destroy_node (stack->top); return data; } /* 栈顶 */ int stack_top (STACK* stack) { return stack->top->data; } /* 数量 */ size_t stack_size (STACK* stack) { size_t size = 0; STACK_NODE* node = NULL; for (node = stack->top; node; node = node->next) ++size; return size; }
测试用例“sl_test.c”
/* 基于链表的堆栈 */ #include <stdio.h> #include "sl.h" /* 测试用例 */ int main (void) { STACK stack; stack_init (&stack); int i; for (i = 0; i < 10; ++i) stack_push (&stack, i); while (! stack_empty (&stack)) printf ("%d\n", stack_pop (&stack)); stack_deinit (&stack); return 0; }
相关文章推荐
- 基于数组或链表的堆栈实现
- 基于数组或链表的堆栈实现
- 基于链表实现堆栈
- 后序拓展序列与相关(基于链表实现)
- 另一版本的基于堆栈的虚拟机实现
- 用链表实现通用堆栈
- 基于单链表的循环链表以及双链表的实现
- 基于链表的方法实现静态内存管理
- 用链表实现堆栈
- 堆栈的两种实现形式:数组和链表
- java实现堆栈、哈希表、链表
- 基于C语言链表实现的工作任务注册与执行
- 链表的实现基于C++
- "《算法导论》之‘线性表’":基于指针实现的单链表
- 用链表实现堆栈
- 链表回文判断(基于链表反转)—Java实现
- 基于数组和链表的队列实现
- 用链表实现堆栈--链式栈
- C++链表实现堆栈:LinkList:Build a linklist using C++ class Stack
- 基于 链表 实现通讯录的功能