数据结构线性表

线性表的定义

线性表是一种逻辑结构,由相同数据类型的有限序列组成。元素之间存在顺序关系,除首尾元素外,每个元素有且仅有一个直接前驱和一个直接后继。

线性表的基本操作

  • 初始化:创建空表。
  • 插入:在指定位置添加元素。
  • 删除:移除指定位置的元素。
  • 查找:按值或位置检索元素。
  • 修改:更新指定位置的元素值。
  • 遍历:顺序访问所有元素。
  • 判空/判满:检查表的状态。

线性表的存储结构

顺序存储(顺序表)

使用连续的存储单元依次存放元素,逻辑顺序与物理顺序一致。
特点

  • 随机访问高效(时间复杂度 O(1))。
  • 插入/删除需移动元素(平均时间复杂度 O(n))。
  • 需预先分配固定空间,可能浪费或溢出。

代码示例(C语言)

复制代码
#define MAX_SIZE 100  
typedef struct {  
    int data[MAX_SIZE];  
    int length;  
} SeqList;  

// 初始化  
void InitList(SeqList *L) {  
    L->length = 0;  
}  

// 插入  
int InsertList(SeqList *L, int pos, int value) {  
    if (pos < 1 || pos > L->length + 1 || L->length >= MAX_SIZE)  
        return 0; // 失败  
    for (int i = L->length; i >= pos; i--)  
        L->data[i] = L->data[i - 1];  
    L->data[pos - 1] = value;  
    L->length++;  
    return 1; // 成功  
}  
链式存储(链表)

通过指针链接节点,节点包含数据域和指针域。
类型

  • 单链表:每个节点指向下一个节点。
  • 双向链表:节点包含前驱和后继指针。
  • 循环链表:尾节点指向头节点。

特点

  • 动态分配空间,无需预定义大小。
  • 插入/删除效率高(时间复杂度 O(1),若需查找前驱则为 O(n))。
  • 随机访问效率低(时间复杂度 O(n))。

代码示例(单链表)

复制代码
typedef struct Node {  
    int data;  
    struct Node *next;  
} ListNode;  

// 创建节点  
ListNode *CreateNode(int value) {  
    ListNode *node = (ListNode *)malloc(sizeof(ListNode));  
    node->data = value;  
    node->next = NULL;  
    return node;  
}  

// 头插法  
void InsertAtHead(ListNode **head, int value) {  
    ListNode *newNode = CreateNode(value);  
    newNode->next = *head;  
    *head = newNode;  
}  

应用场景

  • 顺序表:元素数量固定、频繁查询的场景(如数组存储静态数据)。
  • 链表:动态增删、内存灵活分配的场景(如实现队列、栈或图邻接表)。

性能对比

操作 顺序表 链表
访问元素 O(1) O(n)
插入/删除 O(n) O(1)
空间灵活性

通过理解逻辑结构与存储实现的差异,可结合实际需求选择合适结构。

相关推荐
leo__5202 小时前
如何计算一个二维地质模型的表面重力值和重力异常
算法
代码游侠2 小时前
应用——基于Linux的音乐播放器项目
linux·运维·笔记·学习·算法
点云SLAM2 小时前
boost中boost::adjacency_list 与 boost::adjacency_list_traits
数据结构·图论·最大流·boos中图模块·泛型算法·traits 解耦设计·adjacency_list
梦帮科技3 小时前
第二十二篇:AI驱动的工作流优化:性能瓶颈自动检测
数据结构·数据库·人工智能·python·开源·极限编程
智驱力人工智能3 小时前
仓库园区无人机烟雾识别:构建立体化、智能化的早期火灾预警体系 无人机烟雾检测 无人机动态烟雾分析AI系统 无人机辅助火灾救援系统
人工智能·opencv·算法·目标检测·架构·无人机·边缘计算
Christo33 小时前
2022-《Deep Clustering: A Comprehensive Survey》
人工智能·算法·机器学习·数据挖掘
夏乌_Wx3 小时前
练题100天——DAY33:种花问题+三个数的最大乘积+子数组最大平均数Ⅰ
数据结构
程序员阿鹏3 小时前
List和Set的区别
java·开发语言·数据结构·后端·list