1.存储密度的概念
存储密度=单链表数据项所占空间/结点所占空间;一般情况下,因为结点中包含数据项和指针,所以正常而言密度是小于1的。
2.链队不是链表
对于链队而言,删除操作只能在对头操作,而插入只能在对位操作,这里需要注意的是当链队中只有一个元素的时候,那么在进行删除的时候,她的头尾指针都是需要修改的
3.链表不能随机访问任何一个元素
4.顺序表
对于顺序表而言,每次进行删除某一个位置的元素(非末尾元素),都必须将后面的元素向前移,填补空缺
5.线性表(List)–一种数据结构
线性表:有序、除头尾外其他每个节点有且仅有一个前继和一个后继、表中的元素类型都相同
线性表(ADT)根据物理结构又分为顺序存储结构(元素连续存储、随机存取结构)和链式存储结构(元素分散存储);
顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构的存取操作复杂度为O(1),插入、删除操作复杂度为O(n),所以顺序存储结构的线性表适合存取不适合增删。
链式存储结构:指的是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。这里注意和顺序存储结构的区别,因为顺序存储结构是存储在相连地址的存储单元中,所以一个元素的下个元素就是该元素地址的下一个地址的元素,不需要存储它的后继的位置信息,而链式存储结构就一样了,由于它不要求连续的存储单元,所以它必须额外存储它的后继的地址单元。【注意:单链表的插入】如果将s插入到p的后面,应该是这样的s.next=p.next;p.next=s
这两个语句千万能调换,否则链表将变成p–>s–>s而不是p–>s–>p.next的效果;C语言还有用数组来描述链表,这种方式称为静态链表。
6.链表的效率
在表头*插入和删除速度很快,仅需要改变一两个引用,所以话费O(1)的时间。就平均而言,查找、删除和在指定节点后面插入都需要O(n)次比较,虽然在数组中也是比较O(n)次,但是链表仍然快一些,因为链表的删除不需要移动元素*。
7.二叉树
普通的二叉搜索树可以快速的找到给定关键字的数据,并且可以快速的插入和删除数据项,但是树插入的如果是有序数(正序或者逆序)的话,她的快速查找(插入、删除)的能力就会丧失了,因为此时它就变成非平衡树,非平衡树是没有快速查找的能力的。
8.红黑树
当插入节点时,要遵循红-黑规则,这时候插入的话树就是平衡的。红黑规则如下:(这里提一下平衡树的概念:<