双向链表

来源:互联网 发布:ubuntu shell 脚本 编辑:程序博客网 时间:2024/05/22 08:10

    重新学习李先静老大(不知道以后还是不是老大,但还是把他当成老大)的呕心沥血之作《系统程序员成长计划》第一章——从双向链表学习设计。 

    以前写过一次,基本的设计思想已经学会了,但是细节的东西比较多,结果还是花了我一天的时间来调试。

    

    通用型链表相对与专用链表来说,实现起来要复杂的多,复杂的东西意味着不可靠,但是因为可以重复使用,其存在的问题在每一次重用之后而被发现和修改,因此慢慢就形成了一个可靠的函数库,也就意味着更高开发效率。    

    封装

    封装就是把模块内部,与调用者无关,或者无需(有时候是坚决不能)让调用者知道的数据结构/函数隐藏起来,避免调用者绕过正当的接口对模块进行操作,造成不必要的耦合。

    总的来说,封装带来的两个好处,1:隔离变化,2:降低复杂度

    几个封装的方法:

   1、隐藏私有数据结构,实现一个double list,从调用者角度看,只要模块给我提供一些基本的操作即可,我不关心DList结构体中有那些数据成员,相反的如果让我知道了,我甚至可以对其进行破坏,比如DList有个成员length,我甚至可以直接对其清零。

   2、隐藏内部函数,模块的接口函数的实现免不了要用内部函数实现,这些内部函数有时会暴露内部的数据结构,如果暴露给调用者,就会对模块内部的数据进行破坏。

   3、禁用全局变量,如果模块的实现和调用者都对全局变量进行操作的话,这样会带来耦合。   


代码见:http://code.google.com/p/yinlijunfunction/source/browse/dlist.c