← 首页·文章列表

数据结构二

一、线性表的定义与逻辑特征


二、顺序表(顺序存储结构)

1. 存储特点

2. 地址计算

若首地址为 LOC(a₁),每个元素占用 k 个存储单元,则第 i 个元素的地址为:

LOC(aᵢ) = LOC(a₁) + (i-1) × k

举例(对应第10题):
首地址100,元素长度2,则第5个元素地址 = 100 + (5-1)×2 = 108。

3. 插入操作

举例(对应第8题):
向长度为 n 的向量第 i 个元素之前插入,向后移动 n - i + 1 个元素。

4. 删除操作

注意区分:插入时移动 n-i+1;删除时移动 n-i(你曾在此误填为 n-1)。

5. 顺序表操作时间复杂度汇总


三、链表(链式存储结构)

1. 存储特点

2. 基本性质

3. 删除结点操作的时间复杂度


四、时间复杂度通用分析思路(线性表篇)

虽然本试卷未单独出大段程序分析,但时间复杂度思想贯穿始终。对于线性表操作,可直接按以下逻辑判断:

  1. 观察操作是否需要“移动元素”或“遍历”:

    • 若可通过下标直接计算地址(随机存取),则为 O(1)。
    • 若与数据规模 n 成正比(如移动一半元素、遍历整表),则为 O(n)。
  2. 平均移动次数的推导(通用解法):

    • 插入:在 n+1 个可能位置等概率插入,第 i 个位置需移动 n-i+1 个元素。
      平均次数 = [∑(n-i+1)] / (n+1) = [(n)+(n-1)+...+1+0] / (n+1) = n(n+1)/2 / (n+1) = n/2。
    • 删除:在 n 个元素中等概率删除,删除第 i 个需移动 n-i 个。
      平均次数 = [∑(n-i)] / n = [(n-1)+(n-2)+...+1+0] / n = n(n-1)/2 / n = (n-1)/2 ≈ n/2。
  3. 链表遍历与找前驱:

    • 单链表找第 i 个结点:需从表头移动 i-1 次指针,时间复杂度 O(n)。
    • 删除已知结点 *p 时,由于单链表无法直接获得前驱,必须从表头开始查找,时间 O(n)。

五、易错点自查清单