双向链表
来源:互联网 发布: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
- SzNOI 双向约瑟夫(双向链表)
- 双向链表&&堆栈
- 双向链表
- 使用双向链表
- 双向链表
- 双向循环链表
- 双向循环链表
- 双向链表
- 实现双向链表
- 双向循环链表
- 建立双向链表
- 双向链表
- 双向链表
- 双向循环链表
- 双向链表
- 链表-双向链表
- 双向链表
- 双向动态链表
- ExtJs应用框架设计2
- 在做到3.1数据库查询时需要注意的地方
- ANT在配置管理中的应用
- BeyondCompare时提示"许可证密钥已被撤销"的解决办法
- JavaScript可否多线程? 深入理解JavaScript定时机制
- 双向链表
- 常用小代码
- 阳明哲学
- 工作总结20120308
- axis实现webservice
- linux移植系列重要参考
- 黑马程序员——通信套接字
- (译)Javascript的时间方法的内部机制
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管