[数据结构]数据结构复习总结

 

 

线性表的特点
1.表的个数有限
2.表中元素具有逻辑上的顺序性,在序列中各元素排序有其先后次序
3.表中元素都是数据元素,每一个元素都是单个元素
4.表中元素的数据类型都相同.这意味着每一个元素占有相同大小的存储空间
5.表中元素具有抽象性.仅仅讨论元素间的逻辑关系,不考虑元素究竟表示什么内容.
[注]线性表是一种逻辑结构,表示元素之间一对一的相邻关系.
顺序表和链表是指存储结构,两者属于不同层面的概念.


头指针和头结点的区分:不管带不带头结点,头指针始终指向链表第一个结点,而头结点是带头结点
链表中的第一个结点,结点内通常不存储信息.
引入头结点后,可以带来两个优点:
(1)由于开始结点的位置被存放在头结点的指针域中,所以子啊链表的第一个位置上的操作和在表的其他
位置上的操作一致,无须进行特殊处理.
(2)无论链表是否为空,其头结点是指向头结点的非空指针(空表中头结点的指针域为空)因此空表和非空表
的处理也就统一了.

 

顺序表和链表的比较
1.存取方式
顺序表可以顺序存取,也可以随机存取,链表只能从表头顺序存取元素
2.逻辑结构与物理结构
采用顺序存储时,逻辑上相邻的元素,其对应的物理存储位置也相邻.
而采用链式存储时,逻辑上相邻的元素,其物理存储位置则不一定相邻,
其对应的逻辑关系是通过指针链接来表示的.

3.查找,插入和删除
对于按值查找,当顺序表在无序的情况下,两者的时间复杂度均为O(n)
当顺序表有序时,可采用折半查找,此时时间复杂度为O(log2n).
按照序号查找,顺序表支持随机访问,时间复杂度仅为O(1),
而链表的平均时间复杂度为O(n).顺序表的插入,删除操作,平均需要移动半个表长
的元素.链表的插入,删除操作,只需要修改相关结点的指针域即可.
由于链表每个结点带有指着域,因而在存储空间上比顺序存储要付出比较大的代价,
存储密度不够大.

4.空间分配
顺序存储在静态存储分配情形下,一旦存储空间装满就不能填充,如果再加入新元素将出现
内存溢出,需要预先分配足够大的存储空间.预先分配过大,可能会倒置顺序表后部大量闲置.
预先分配过小,优惠造成溢出.动态存储分配虽然存储空间可以扩充,但需要移动大量元素,
导致操作效率降低,而且若内存中没有更大块的连续存储空间将导致分配失败.
链式存储的结点空间只在需要的时候申请分配,只要内存有空间就可以分配,操作灵活高效.

 

二叉树与度为2的有序树的区别:
1. 度为2的树至少有三个结点,而二叉树可以为空
2. 度为2的有序树的孩子结点的左右次序是相对于另一个孩子结点而言的,如果某个结点只有一个
  孩子结点,这个孩子结点就无须区分其左右次序,而二叉树无论其孩子数是否为2,均需确定其
  左右次序,也就是说二叉树的结点次序不是相对于另一个结点而言,而是确定的.


完全二叉树的特点:
设高度为H,有n个结点
1.若i<=[n/2],则结点i为分支结点,否则为叶子结点
2.叶子结点只可能在层次最大的两层上出现.对于最大层次中的叶子结点,都依次排列在该层
最左边的位置上.
3.如果有一个度为1的结点,只可能有一个,且该结点只有左孩子而无右孩子(重要特征)
4.按层序编号后,一旦出现某结点(其编号为i)为叶子结点或只有左孩子,则编号大于i的结点
  均为叶子结点.
5.若n为奇数,则每个分支结点都有左子女和右子女;
若n为偶数,则编号最大的分支结点(编号为n/2)只有左子女,没有右子女,其余分支结点左右子女都有


二叉树的性质:
设度为0,1,2的结点个数分别为N0,N1和N2.
1.非空二叉树的叶子结点数等于度为2的结点数+1,即N0=N2+1
2.非空二叉树上第K层上至多有2^K-1个结点(K>=1)
3.高度为H的二叉树至多有2^H-1个结点(H>=1)
4.对于完全二叉树按从上到下,从左到右的顺序依次编号1,2..,N,则有以下关系:
a.当i>1时,结点i的双亲结点编号为[i/2],
即当i为偶数时,其双亲结点的编号为i/2,它是双亲结点的左孩子;
当i为奇数时,其双亲结点的编号为(i-1)/2,它是双亲结点的右孩子
b.当2i<=N,结点i的左孩子编号为2i,否则无左孩子
c.当2i+1<=N,结点i的右孩子编号为2i+1,否则无右孩子
d.结点i所在层次(深度)为[log2i]+1
5.具有N个(N>0)结点的完全二叉树的高度为[log2^(N+1)]或者[log2^N]+1

 

posted @ 2019-11-18 18:00  Xu_Lin  阅读(223)  评论(0编辑  收藏  举报