数据结构总结(针对考研)

第一章

1. 深刻理解数据结构的概念,掌握数据结结构的“三要素”:
  • 逻辑结构、
  • 物理(存储)结构
  • 在这种结构上所定义的运算。
2. 掌握计算语句频度和估算算法时间复杂度的方法。
  • 掌握常见算法、经典算法的时间复杂度和空间复杂度。

第二章 线性表

大纲要求
1. 线性表的逻辑
2.线性表的顺序存储结构
3.线性表的链式存储结构
  • 单链表
    链表头节点的俩个优点:
    1. 由于开始节点位置被存放在头节点的指针域中,所以在链表的第一个位置的上的操作就和在表的其它位置上的操作一致,无须特殊处理。
    2. 无论链表是否为空,其头指针是指向头节点的非空指针(空表中头结点的指针域为空),因此空表和非空表的处理也就统一了。
  • 其它形式的链表:
    • 循环链表、
      最后一个结点的指针域的指针又指回第一个节点的链表。
      和单链表的差异仅仅在于,判断链表中的最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头节点”
      特点:

      1. 对于单链表只能从头节点开始遍历整个链表,而对于单循环链表,则可以从表中任意结点开始遍历整个链表。
      2. 有事对于链表常做的操作是在表尾、表头进行,此时可以改变一下链表的标识方法,不用头指针而用一个指向尾结点的指针R来标识,可以使得操作效率得以提高。
      3. 在做链表合并和分裂时,如果不是必须从链表头开始,则可以直接在链表指针处合并,时间复杂度可达O(1)。
    • 双向链表、双向循环链表

      • 对于前驱的操作方便
      • 双向循环链表 空表时 头节点的next指向自己,头结点prior也指向自己。
      • 缺点:存储密度更低
      • 特点:
        • 从某个结点出发到其直接前驱结点或直接后继结点,时间复杂度均为O(1)。
        • 查找第i个结点、向第i个结点插入或删除第i个结点,都要区分是哪个方向。
        • 如果是双向循环链表,修改指针要同时考虑在前驱环链和后继环链上的修改。
        • 某个结点的直接前驱的直接后继,或它的直接后继的直接前驱,即为该结点本身。
    • 静态链表
      借助数组来描述线性表的链式存储结构,结点也有数据域data和指针域next,与前面所见的链表中的指针不同的是,这里的指针式结点的相对地址(数组的下标),称之为静态指针。
      静态链表适用于不支持“指针”的高级语言,或者最大元素数固定但插入、删除操作频繁的链表应用中。有关基于静态链表上的线性表的操作基本与动态链表相同,除了一些描述方法有些区别外,算法思路是相同的。

      特点:

      • 所有数据元素均存储在一个连续的空间段,但是相邻俩个元素不一定处于相邻的空间;
      • 修改指针域即可完成插入和删除操作,不需要移动数据元素,但是也不能随机访问静态链表中的元素;
      • 一次性分配所有存储空间,插入、删除时无需再向操作系统中申请或释放空间,但也限制了最大表长。
    • 顺序表和链表的各自的优缺点以及适用的场合.

    • t

顺序表和链表的比较:

1.顺序表和链表各有优缺点。
顺序存储有点:

  1. 方法简单,各种高级语言中都有数组,容易实现。
  2. 不用为表示结点间的逻辑关系而增加额外的存储开销。
  3. 顺序表具有按元素序号随机访问的特点。

缺点:
4. 在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低。
5. 需要预先分配足够大的存储空间。估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出。

链表中的优缺点与顺序表相反。
在实际中怎样选取存储结构?
  1. 基本存储的考虑
    顺序表在程序之前必须明确规定它的存储规模,也就是说事先对“MAX_SIZE”要有合适的设定,过大造成浪费,过小造成溢出,可见线性表的长度或存储规模难以估计时,不宜采用顺序表;
    链表不用事先估计处处规模,但链表的存储密度较低。显然链式存储结构的存储密度是小于1倍。

  2. 基于运算的考虑
    在顺序表中按序号访问ai 的时间性能时O(1)。而链表中按序号访问的时间性能O(n),所以如果经常做的运算时按序号访问数据元素,显然顺序表优于链表;而在顺序表中做插入、删除时平均移动表中一半的元素,当数据元素的信息量较大且表较长时,这一点是不应忽视的,在链表中作插入、删除。虽然也要找插入位置,但操作主要是比较操作,从这个角度考虑显然后者优于前者。

  3. 基于环境的考虑
    顺序表容易实现,任何高级语言中都有数组类型,链表的操作是基于指针的,相对来讲,前者简单些,也是对用户考虑的有一个因素。
    总之,俩种存储结构各有长短,选择那一种由实际问题中的主要因素决定。通常“较稳定”的线性表选择顺序存储。而频繁做插入删除的即动态较强的线性表适宜算则链式存储。

本章重点
  1. 了解线性表的逻辑结构特性是数据元素之间存在着线性关系,在计算机中表示这俩种关系的俩类不同的存储结构是顺序存储结构和链式存储结构。
  2. 熟练掌握这俩类存储结构的描述方法,以及线性表的各种基本操作的实现。重点掌握:初始化、查找、插入、删除、遍历、逆置、合并、分解等操作
  3. 能够从时间和空间复杂度的角度综合比较线性表俩种存储结构的不同特点及其适用场合。

你可能感兴趣的:(算法与数据结构)