typedef int Type;typedef struct _DListNode{ struct _DListNode* prev; struct _DListNode* next; Type data;}DListNode;
【注解】这样的链表数据结构设计算不上是通用的,因为存放整数时编译一次,存放字符串时,重新定义Type再编译一次,存放其他类型同样要重复这个过程,无法同时使用多个数据类型。
再看如下的数据结构设计:typedef struct _DListNode{ struct _DListNode* prev; struct _DListNode* next; void* data;}DListNode;【注解】此处不同之处在于,只保存对象的指针,存取效率高,是C语言中常见的做法。存放整数时,可以把void*强转成整数,以避免内存分配。在目前大部分嵌入式开发中,大部分情况下,链表都存放结构体的。 2、各自特点与使用范围 专用链表的优点(从局部来看) a、性能更高。专用链表的实现和调用捆绑在一起,可以直接访问数据成员,省去了包装函数带来的性能开销,可以提高时间性能。专用链表无需实现完整的接口,只要满足自己的需求就行, 生成代码更小,因此可以提高空间性能。 b、依赖更少。自己实现不用依赖于别人。有时有现成的库可用,但是把整个库移植过去会带来存储空间的开销,那么可以自己实现一个专用的链表。并且有些嵌入式产品,数据的存储,严格依赖于自己行业的协议准则。所以必须得实现自己的专用链表。(基础库除外) c、实现简单。 通用链表的优点(从全局看) a、可靠性高。复杂的东西意味着不可靠,但它是可以重复使用的,其存在的问题会随每一次重用而被发现和改正,慢慢就会形成一个可靠的函数库。 b、开发效率高。复杂的东西也意味着更高的开发成本,同样因为它是可以重复使用的,开发成本会随每一次重用而降低,从整个项目来看,会大大提高开发效率。 【小结】链表是最常用的数据结构之一,通过学习通用链表,进而学习软件设计的方法,是最终的目的。链表只是其中的载体之一。
引用:
1、《系统程序员成长计划》 李先静 编著 (此书让我获益颇多,避免了在繁众的大量的重复的纯语法书籍中浪费时间,着眼于基础,着眼于设计。)