码迷,mamicode.com
首页 > 编程语言 > 详细

【算法导论】第10章,基本数据结构

时间:2018-04-27 13:28:34      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:优势   表示法   动态   结构   none   队列实现   基本数据   额外   情况   

10.1 栈和队列

都是动态集合,Delete操作是预先设定好的。

Insert:push Delete: pop

实现,一个计数器记录元素数量

同理,队列实现是一个计数器记录首尾元素的位置,如果首元素太过靠后,尾元素可以过来。

 

10.2 链表

双向链表:每一个元素是一个对象,有prev, next两个指针,还有元素本身的数值,两边的元素是None

L.head指向第一个元素。

链表搜索 、 插入、 删除、

哨兵:主要作用:简化边界值的处理!

  看着也像是一个元素,只不过值为空,这样一个双向链表可以变成一个有哨兵的双向循环链表,哨兵位于表头和表尾中间。

不能滥用哨兵:如果有很多个很短的链表,那么哨兵占用的额外存储空间会造成存储浪费。

 

10.3 指针和对象的实现

对象多数组表示,位置用另一个方向的下标来表示

对象单数组表示,连续的数组储存所有的信息,位置用下标来表示。优势:允许不同长度的对象存储于同一数组中。

对象的分配与释放: 一般由gc负责

  以下针对多数组表示的双向链表:

  维护一个单链表:自由表,只有next数组,每个对象不是在链表中,就是在自由表中。自由表类似一个栈,下一个分配的就是刚刚被释放的。

 

10.4 有根树的表示

用链式数据结构表示:

二叉树:很容易

节点数量无限制的数:左孩子右兄弟表示法

其他表示方法:视具体情况而定,例如完全二叉树在堆排序中用一个数组表示。

【算法导论】第10章,基本数据结构

标签:优势   表示法   动态   结构   none   队列实现   基本数据   额外   情况   

原文地址:https://www.cnblogs.com/yesuuu/p/8926354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!