下面是一篇系统、实用的教程文章——《数据结构之顺序表》,适合用于学习笔记、教学讲解或技术博客发布。


📘 数据结构之顺序表(Sequential List)

🧩 一、什么是顺序表?

顺序表(Sequential List) 是一种最基础、最常用的线性表结构。
它使用 一组连续的存储单元(数组) 来依次存放线性表中的各个元素。

简单来说:

顺序表 = 数组 + 线性逻辑顺序

示意图:

下标:  0    1    2    3    4
数据: [10] [20] [30] [40] [50]


⚙️ 二、顺序表的特点

特性描述
存储方式连续存储(数组)
逻辑顺序 = 物理顺序方便随机访问
随机访问性能好O(1) 复杂度
插入删除代价高O(n) 复杂度(需移动元素)

🧮 三、顺序表的两种实现方式

1. 静态顺序表

使用固定长度数组定义,如:

#define MAXSIZE 100
typedef struct {
    int data[MAXSIZE];
    int length;
} SqList;

特点:

  • 简单易实现
  • 长度固定,不能动态扩展

2. 动态顺序表

使用动态内存分配(malloc/new),可灵活扩容:

typedef struct {
    int *data;
    int length;
    int capacity;
} SeqList;


🧰 四、顺序表的基本操作

1️⃣ 初始化

void InitList(SeqList *L, int initSize) {
    L->data = (int *)malloc(sizeof(int) * initSize);
    L->length = 0;
    L->capacity = initSize;
}

2️⃣ 插入元素

在第 pos 个位置插入 x

void InsertList(SeqList *L, int pos, int x) {
    if (pos < 0 || pos > L->length) return;
    if (L->length >= L->capacity) return; // 需扩容机制
    for (int i = L->length; i > pos; i--)
        L->data[i] = L->data[i - 1];
    L->data[pos] = x;
    L->length++;
}

3️⃣ 删除元素

删除位置 pos 的元素:

void DeleteList(SeqList *L, int pos) {
    if (pos < 0 || pos >= L->length) return;
    for (int i = pos; i < L->length - 1; i++)
        L->data[i] = L->data[i + 1];
    L->length--;
}

4️⃣ 查找元素

按值查找:

int LocateElem(SeqList *L, int x) {
    for (int i = 0; i < L->length; i++)
        if (L->data[i] == x) return i;
    return -1;
}


⚡ 五、顺序表的复杂度分析

操作时间复杂度说明
访问(按下标)O(1)随机访问快
查找(按值)O(n)需遍历
插入O(n)可能移动大量元素
删除O(n)同上
空间复杂度O(n)连续空间

💡 六、顺序表与链表的比较

比较项顺序表链表
存储方式连续存储离散存储
查找性能O(1) 随机访问O(n) 线性查找
插入删除O(n) 移动元素O(1) 修改指针
空间利用率固定/可扩展动态分配
使用场景数据量较小、随机访问频繁插删频繁、空间不连续

🧠 七、实际应用场景

  • 数组封装类(如 Python list、C++ vector)
  • 顺序存储的数据缓存
  • 矩阵或图的邻接矩阵表示
  • 需要随机访问的算法(如二分查找)

📚 八、扩展阅读与出站链接