2007-07-15
c实现的stack
关键字: 数据结构,stackstack.h
c 代码
- #ifndef __STACK_H__
- #define __STACK_H__
- ///////////////////////////////////////////
- //这里只提供了一个框架,具体由用户自己定义
- //要自定义元素,可以去修改相应文件vector或
- //double_list中的值。
- //////////////////////////////////////////
- typedef enum {
- VECTOR,
- LIST,
- }cate_enum;
- typedef void *stack_t;
- typedef const void * const_stack_t;
- stack_t stack_new(cate_enum cate);
- void stack_destroy(stack_t stk);
- int stack_pop(stack_t stk);
- int stack_push(stack_t stk, const void *elem);
- const void *stack_top(const_stack_t stk);
- int stack_size(const_stack_t stk);
- int stack_is_empty(const_stack_t stk);
- int stack_equal(const_stack_t lstk, const_stack_t rstk);
- void stack_print(const_stack_t stk);
- #endif
stack.c
c 代码
- #include "stack.h"
- #include "double_list.h"
- #include "vector.h"
- //////////////////////////////////////////
- typedef struct _stack_t{
- cate_enum category;
- void *stk;
- }_stack_t;
- stack_t stack_new(cate_enum cate)
- {
- _stack_t * stk = (_stack_t *)malloc(sizeof(_stack_t));
- stk->category = cate;
- switch(stk->category)
- {
- case VECTOR:
- stk->stk = vector_new();
- break;
- case LIST:
- stk->stk = dlist_new();
- break;
- default:
- free(stk);
- return 0;
- }
- return (stack_t)stk;
- }
- void stack_destroy(stack_t stk)
- {
- _stack_t *ps = (_stack_t *)stk;
- switch(ps->category)
- {
- case VECTOR:
- vector_destroy(ps->stk);
- break;
- case LIST:
- dlist_destroy(ps->stk);
- break;
- }
- free(ps);
- }
- int stack_pop(stack_t stk)
- {
- _stack_t *ps = (_stack_t *)stk;
- switch(ps->category)
- {
- case VECTOR:
- return vector_pop_back(ps->stk);
- case LIST:
- return dlist_pop_back(ps->stk);
- default:
- return 0;
- }
- }
- int stack_push(stack_t stk, const void *elem)
- {
- _stack_t *ps = (_stack_t *)stk;
- switch(ps->category)
- {
- case VECTOR:
- return vector_push_back(ps->stk, elem);
- case LIST:
- return dlist_push_back(ps->stk, elem);
- default:
- return 0;
- }
- }
- const void *stack_top(const_stack_t stk)
- {
- const _stack_t *ps = (const _stack_t *)stk;
- switch(ps->category)
- {
- case VECTOR:
- return vector_back(ps->stk);
- case LIST:
- return dlist_back(ps->stk);
- default:
- return 0;
- }
- }
- int stack_size(const_stack_t stk)
- {
- const _stack_t *ps = (const _stack_t *)stk;
- switch(ps->category)
- {
- case VECTOR:
- return vector_size(ps->stk);
- case LIST:
- return dlist_size(ps->stk);
- default:
- return 0;
- }
- }
- int stack_is_empty(const_stack_t stk)
- {
- const _stack_t *ps = (const _stack_t *)stk;
- switch(ps->category)
- {
- case VECTOR:
- return vector_is_empty(ps->stk);
- case LIST:
- return dlist_is_empty(ps->stk);
- }
- }
- int stack_equal(const_stack_t lstk, const_stack_t rstk)
- {
- const _stack_t *lps = (const _stack_t *)lstk;
- const _stack_t *rps = (const _stack_t *)rstk;
- if(rps->category != lps->category)
- return 0;
- switch(lps->category)
- {
- case VECTOR:
- return vector_equal(lps->stk, rps->stk);
- case LIST:
- return dlist_equal(lps->stk, rps->stk);
- }
- }
- void stack_print(const_stack_t stk)
- {
- const _stack_t *ps = (const _stack_t *)stk;
- switch(ps->category)
- {
- case VECTOR:
- return vector_print(ps->stk);
- case LIST:
- return dlist_print(ps->stk);
- }
- }
发表评论
- 浏览: 59007 次
- 性别:

- 来自: 乌托邦

- 详细资料
搜索本博客
最近加入圈子
链接
最新评论
-
基于web的项目管理,还需 ...
我要说楼主你这一套很不实用不符合XP精神
-- by Joo -
基于web的项目管理,还需 ...
我能想到的就是:再加一个maven的reporsitory服务器(如果项目中要使 ...
-- by pipilu -
【团队管理】大家Have A ...
你分配任务的时候有询问过他们的意见吗? 你在总结的时候有说个人的优点吗? ...
-- by alanwu -
基于web的项目管理,还需 ...
svn,ftp需要服务器,自己架的话还需要维护,麻烦 trac呢无法集成到我们的 ...
-- by xombat -
基于web的项目管理,还需 ...
汗你的团员会用你的工具工作么?怎么看也是手动svn,ftp,白板,纸条方便 一些 ...
-- by 抛出异常的爱






评论排行榜