标签:优势 表示法 动态 结构 none 队列实现 基本数据 额外 情况
10.1 栈和队列
都是动态集合,Delete操作是预先设定好的。
栈
Insert:push Delete: pop
实现,一个计数器记录元素数量
同理,队列实现是一个计数器记录首尾元素的位置,如果首元素太过靠后,尾元素可以过来。
10.2 链表
双向链表:每一个元素是一个对象,有prev, next两个指针,还有元素本身的数值,两边的元素是None
L.head指向第一个元素。
链表搜索 、 插入、 删除、
哨兵:主要作用:简化边界值的处理!
看着也像是一个元素,只不过值为空,这样一个双向链表可以变成一个有哨兵的双向循环链表,哨兵位于表头和表尾中间。
不能滥用哨兵:如果有很多个很短的链表,那么哨兵占用的额外存储空间会造成存储浪费。
10.3 指针和对象的实现
对象多数组表示,位置用另一个方向的下标来表示
对象单数组表示,连续的数组储存所有的信息,位置用下标来表示。优势:允许不同长度的对象存储于同一数组中。
对象的分配与释放: 一般由gc负责
以下针对多数组表示的双向链表:
维护一个单链表:自由表,只有next数组,每个对象不是在链表中,就是在自由表中。自由表类似一个栈,下一个分配的就是刚刚被释放的。
10.4 有根树的表示
用链式数据结构表示:
二叉树:很容易
节点数量无限制的数:左孩子右兄弟表示法
其他表示方法:视具体情况而定,例如完全二叉树在堆排序中用一个数组表示。
标签:优势 表示法 动态 结构 none 队列实现 基本数据 额外 情况
原文地址:https://www.cnblogs.com/yesuuu/p/8926354.html