2011年5月29日
摘要: 双向链表无非在pre函数操作的时候更加简洁,不过增加了空间上的开销...双向链表在insert和remove操作中比单项链表稍微复杂一下,下面给出图解:双向链表图示:由下图可以发现,fence的定义仍然采用第二种定义,即fence指向当前位置的前一位置,实际上双向链表向前寻址也很方便了,两种fence定义也就没什么区别了,不过仍然用第二种定义无非是习惯而已,毕竟写单向链表的时候用的是第二种定义,而双向链表大部分都是基于单向链表的...insert图示即代码://插入insert操作,请结合图解看程序更好理解//关键是褛清指针修改的先后顺序//然后是对特殊情况的处理//有两处特殊处理://第一处 阅读全文
posted @ 2011-05-29 03:58 geeker 阅读(2673) 评论(0) 推荐(1) 编辑
摘要: 在书中看到一有趣的东西,叫做freeList,无非就是优化Link节点类,是的new Link操作跑的更快 !方法是重载运算符,重新定义new,和delete方法。英文书,原理细节描述不清,我的大致理解是,new操作的时候,要跑到内存中去取一块内存单元,CPU在跑着程序,如果能从较近的地方取内存肯定要比去远的地方要好的多。于是,就采取自行管理链表所需内存的方式,定义一freeList链表,为Link类的静态成员变量,初始值为NULL,表示没有“近内存”。调用new方法的时候,如果freelist不为空,那么就在freelist中取一块内存(近内存),如果为NULL,那么只能调用原new操作符, 阅读全文
posted @ 2011-05-29 01:31 geeker 阅读(618) 评论(0) 推荐(0) 编辑
摘要: LList需要注意一点就是fence的重新定义,这无非是方便了insert()操作而已,试想,如果fence还指向当前位置的话,那么进行insert操作的时候,当前位置的地址存储在上一个元素的next中,那么要想拿到上一个元素,对于单项链表必须从表头开始一个一个的移动,so 麻烦 !!!于是重新定义 fence使其指向当前位置的上一位置,这样的话上面的问题就解决了,不过又冒出一新的问题,拿第一个元素的上一个怎么处理啊,简单,加一个head节点即可,代表第0个位置,不存值。两中fence定义的图解如下:原本fence定义:修正后的Fence定义图:Insert解析图,注意指针的改动顺序:remo 阅读全文
posted @ 2011-05-29 00:26 geeker 阅读(519) 评论(0) 推荐(0) 编辑