数据结构线性表

线性表的定义

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

线性表的基本操作

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

线性表的存储结构

顺序存储(顺序表)

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

  • 随机访问高效(时间复杂度 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)
空间灵活性 低 高

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

相关推荐
ZhengEnCi9 分钟前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Flynn Liang29 分钟前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
liminla!1 小时前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法
维克兜率天2 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
罗西的思考3 小时前
【轻量化复刻大模型】线性注意力交互式演示
人工智能·算法·机器学习
神也畏惧菠萝3 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
揽星河..3 小时前
【C语言】分支和循环
c语言·c++·算法
丘山望岳4 小时前
单调栈和单调队列
数据结构
Fuyo_11195 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法