C语言--容器的实现。
来源:互联网 发布:mac装双系统分区 编辑:程序博客网 时间:2024/06/10 05:40
*引用本文请注明来自 blog.csdn.net/wtz1985
容器(container)这个词眼,相信大家都不陌生了,特别是JAVA或C#的人,应该是比较熟悉了,它只是一个中间接口,也就是一个纯虚类。它的实现可以通过链表或者数组等结构,它的出现就是为了其他函数体可以自由地选择适合自己的实现结构。比如哈希表、堆栈等结构,既可以用链表实现,也可以用动态数组实现,如果没有一个中间接口的话,想要实现它,那就要分开实现了,这样太浪费时间和空间了。
1、接口定义。
- /*----- container.h -------*/
- #ifndef _CONTAINER_H
- #define _CONTAINER_H
- struct _Container;
- typedef struct _Container Container;
- yptedef void (*ForeachFunc)(void* data, void* ctx);
- typedef void* (*ContainerAppendFunc)(Container* thiz, void* data);
- typedef void* (*ContainerInsertFunc)(Container* thiz, void* data, size* index);
- typedef void* (*ContainerDeleteFunc)(Container* thiz, size_t index);
- typedef void (*ContainerDestroyFunc)(Container* thiz);
- typedef void (*ContainerForeachFunc)(Container* thiz, ForeachFunc print, void* ctx);
- struct _Container
- {
- ContainerAppendFunc container_append;
- ContainerInsertFunc container_insert;
- ContainerDeleteFunc container_delete;
- ContainerDestroyFunc container_func;
- ContainrForeachFunc container_foreach;
- char priv[0];
- };
- static inline void* container_append(Container* thiz, void* data)
- {
- assert(thiz != NULL && thiz->container_append != NULL);
- return thiz->container_append(thiz, data);
- }
- static inline void* container_insert(Container* thiz, void* data, size_t index)
- {
- assert(thiz != NULL && thiz->container_insert != NULL);
- return thiz->container_insert(thiz, data, index);
- }
- static inline void* container_delete(Container* thiz, size_t index)
- {
- assert(thiz != NULL && thiz->container_delete != NULL);
- return thiz->container_delete(thiz, index);
- }
- static inline void container_destroy(Container* thiz)
- {
- assert(thiz != NULL && thiz->container_destroy != NULL);
- return thiz->container_destroy(thiz);
- }
- static inline void container_foreach(Container* thiz, ForeachFunc print, void* ctx)
- {
- assert(thiz != NULL && thiz->container_foreach != NULL);
- return thiz->container_foreach(thiz, print, ctx);
- }
- #endif /_CONTAINER_H/
2、不同的接口实现:
链表:
- /*------- container_list.h ---------*/
- #include "container.h"
- #include "dlist.h"
- #ifndef _CONTAINER_LIST_H
- #define _CONTAINER_LIST_H
- Container* container_list_create(DList* list);
- #endif /*_CONTAINER_H*/
动态数组:
- /*--------- container_vector.h -----------*/
- #include "vector.h"
- #include "container.h"
- #ifndef _CONTAINER_VECTOR_H
- #define _CONTAINER_VECTOR_H
- Container* container_vector_create(Vector* thiz);
- #endif /*CONTAINER_VECTOR_H*/
有了这些接口,具体的实现,就不必再写,相信大家都应该知道了,如果有写得不好的地方,请大家再指教指教。
~~end~~
- C语言--容器的实现。
- C语言实现类似于C++的Vector容器
- C语言实现一个泛型容器
- map容器的c实现
- map容器的c实现
- C语言写的一个容器list
- 用c语言实现c++ array容器类
- C实现的类似vector的容器
- 【C++】实现容器Vector
- C语言下的容器及泛型编程
- C语言实现的井字棋
- C语言--迭代器的实现。
- 栈的C语言实现
- 汉诺塔的C语言实现
- C语言实现的俄罗斯方块
- ls的C语言实现
- 队列的C语言实现
- 单链表的C语言实现
- 中国梁光烈防长与美军三次交手大揭密
- 虚拟主机上用ASP.Net实现UrlRewrite
- 升级后问题一大堆
- 正则表达式与Xml方式解释模板
- 大学=基础+人格
- C语言--容器的实现。
- 500人的DELPHI2009 超级QQ群48925533
- pku 1664 放苹果 csflx 解题分析
- VB中启动控制面板命令
- 网页设计师必读
- VB设置软件开机启动.
- 武林外传经典108句
- VB 窗体的任何部分皆可拖动窗体
- 实用:最经济的美容偏方大汇集