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

第一章

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. 能够从时间和空间复杂度的角度综合比较线性表俩种存储结构的不同特点及其适用场合。
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构1800题1. 算法的计算量的大小称为计算的( )。【北京邮电大学2000 二、3 (20/8分)】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于( )【中科院计算所 1998 二、1 (2分)】 A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2) 这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 【南京理工大学 1999 一、1(2分) 【武汉交通科技大学 1996 一、1( 4分)】 4.一个算法应该是( )。【中山大学 1998 二、1(2分)】 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 5. 下面关于算法说法错误的是( )【南京理工大学 2000 一、1(1.5分)】 A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是( )【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为( )两大类。【武汉交通科技大学 1996 一 、4(2分)】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值