数据结构

知识点导航

线性结构
树形结构
图结构
查找与排序

顺序表

线性表的一种存储结构,用一组地址连续的存储单元依次存储线性表中的数据元素

预计学习时间: 2小时
知识点: 8个
难度: 基础

基本概念

存储结构

顺序表采用顺序存储结构,用一组地址连续的存储单元依次存储线性表中的数据元素。 通过数组实现,支持随机访问,但插入删除需要移动元素。

基本操作

  • 插入操作:O(n) 时间复杂度
  • 删除操作:O(n) 时间复杂度
  • 查找操作:O(n) 时间复杂度
  • 随机访问:O(1) 时间复杂度

数据结构定义

typedef struct {
    ElemType *data;    // 存储空间基地址
    int length;        // 当前长度
    int capacity;      // 最大容量
} SequentialList;

优缺点分析

优点

  • • 随机访问效率高
  • • 存储密度高
  • • 实现简单

缺点

  • • 插入删除需要移动元素
  • • 需要预先分配存储空间
  • • 可能造成存储空间浪费

可视化演示

当前顺序表状态

长度: 5容量: 10
索引:
0
1
2
3
4
5
6
7
8
9
数据:
1
2
3
4
5
null
null
null
null
null

操作控制

算法实现

选择算法类型

插入算法

bool Insert(SequentialList &L, int i, ElemType e) {
    if (i < 1 || i > L.length + 1) return false;
    if (L.length >= L.capacity) return false;
    
    for (int j = L.length; j >= i; j--) {
        L.data[j] = L.data[j-1];
    }
    L.data[i-1] = e;
    L.length++;
    return true;
}

时间复杂度: O(n)

空间复杂度: O(1)

练习测试

基础练习

  • 顺序表的插入操作
  • 顺序表的删除操作
  • 顺序表的查找操作
  • 顺序表的遍历操作

进阶练习

  • 顺序表的合并操作
  • 顺序表的排序操作
  • 顺序表的去重操作
  • 顺序表的反转操作