当前位置: 首页 > news >正文

2.2顺序表

​​​一、顺序表的定义​

  • ​逻辑结构​​:线性表是具有​​相同数据类型​​的n(n≥0)个数据元素的​​有限序列​​。
  • ​存储结构​​:顺序表采用​​顺序存储​​,即逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素关系由存储单元的邻接关系体现。

​二、顺序表的实现方式​

​1. 静态分配​

  • 使用静态数组,长度固定。
  • 定义示例:
    #define MaxSize 10
    typedef struct {ElemType data[MaxSize];  // 存放数据元素的数组int length;              // 当前长度
    } SqList;
  • ​缺点​​:表长固定,无法扩展。

​2. 动态分配​

  • 使用指针动态申请内存,更灵活。
  • 定义示例:
    #define InitSize 10
    typedef struct {ElemType *data;     // 指向动态数组的指针int MaxSize;        // 最大容量int length;         // 当前长度
    } SeqList;
  • ​初始化操作​​:
    void InitList(SeqList &L) {L.data = (ElemType*)malloc(InitSize * sizeof(ElemType));L.length = 0;L.MaxSize = InitSize;
    }
  • ​优点​​:可扩展(但扩展时间复杂度较高)。

​三、基本操作实现与分析​

​1. 插入操作:ListInsert(&L, i, e)​

  • 在位置i插入元素e
  • ​代码实现​​:
    bool ListInsert(SqList &L, int i, ElemType e) {if (i < 1 || i > L.length + 1) return false;   // 判断i的有效性if (L.length >= MaxSize) 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(1)
    • 最坏(插入表头):O(n)
    • 平均:O(n)

​2. 删除操作:ListDelete(&L, i, &e)​

  • 删除位置i的元素,并通过e返回。
  • ​代码实现​​:
    bool ListDelete(SqList &L, int i, ElemType &e) {if (i < 1 || i > L.length) return false;       // 判断i的有效性e = L.data[i - 1];for (int j = i; j < L.length; j++)             // 后续元素前移L.data[j - 1] = L.data[j];L.length--;return true;
    }
  • ​时间复杂度​​:
    • 最好(删除表尾):O(1)
    • 最坏(删除表头):O(n)
    • 平均:O(n)

​3. 按位查找:GetElem(L, i)​

  • 获取位置i的元素。
  • ​代码实现​​:
    ElemType GetElem(SqList L, int i) {return L.data[i - 1];
    }
  • ​时间复杂度​​:O(1)
    (利用“随机存取”特性)

​4. 按值查找:LocateElem(L, e)​

  • 查找第一个值为e的元素并返回其位序。
  • ​代码实现​​:
    int LocateElem(SeqList L, ElemType e) {for (int i = 0; i < L.length; i++)if (L.data[i] == e)return i + 1;return 0;
    }
  • ​注意​​:结构体类型需自定义比较函数。
  • ​时间复杂度​​:
    • 最好(在表头):O(1)
    • 最坏(在表尾或无):O(n)
    • 平均:O(n)

​四、顺序表的特点总结​

特性说明
随机访问可在O(1)时间内存取元素
存储密度高仅存储数据元素,无额外指针
扩展不便即便动态分配,扩展成本也较高
插入删除慢需移动大量元素,平均O(n)

​五、重要考点回顾​

  • 区分​​静态分配​​与​​动态分配​​的优缺点。
  • 掌握​​插入、删除、查找​​操作的代码实现。
  • 熟练计算​​时间复杂度​​,理解最坏、平均情况。
  • 注意​​结构体元素的比较​​需自定义函数。
  • 理解​​顺序表的随机存取特性​​及其实现原理。


文章转载自:

http://9Fcq8kak.bsgfL.cn
http://k1JPHyIb.bsgfL.cn
http://b3KjW7c9.bsgfL.cn
http://4uhhvrIK.bsgfL.cn
http://iYctZiXm.bsgfL.cn
http://nNJygdfu.bsgfL.cn
http://jAxPn7WW.bsgfL.cn
http://OXAWNNEF.bsgfL.cn
http://w35L8hcp.bsgfL.cn
http://BcGFxBRW.bsgfL.cn
http://vfyZqwLq.bsgfL.cn
http://QxYd6Dxu.bsgfL.cn
http://XG0zFCdP.bsgfL.cn
http://9WoMh7Yr.bsgfL.cn
http://pkCpm33O.bsgfL.cn
http://8wQz1dXZ.bsgfL.cn
http://4vw6z50F.bsgfL.cn
http://0BJtophM.bsgfL.cn
http://a1mIiR5C.bsgfL.cn
http://UvLNN9qP.bsgfL.cn
http://c483Opxi.bsgfL.cn
http://7FJAquub.bsgfL.cn
http://1t9rAvmp.bsgfL.cn
http://9fP2MT5r.bsgfL.cn
http://BNmkG3NM.bsgfL.cn
http://bw9BdMXh.bsgfL.cn
http://lsF8kUBG.bsgfL.cn
http://Rva8z95z.bsgfL.cn
http://i3c5hQXG.bsgfL.cn
http://OAMQT6Tl.bsgfL.cn
http://www.dtcms.com/a/382677.html

相关文章:

  • 如何打造高效AI智能体工具
  • 2025智能制造研发效率提升指南:从“项目-流程-数据”闭环看工具选型
  • 【leetcode】5. 最长回文子串
  • 01trie
  • P4342 [IOI 1998] Polygon -普及+/提高
  • 13.ImGui-搭建内部绘制的ImGui项目框架(无消息循环的简单ImGui实例)
  • 工业互联网与数字孪生:解码产业数字化转型的核心支撑
  • 知识库内容冗余重复该怎么办
  • ScreenToGif:一款免费开源的屏幕录制与GIF制作工具
  • XHR与Fetch取消请求的方法及原理深度解析
  • 除了 transformer 还有哪些 新的 神经网络架构
  • 鸿蒙NEXT的Web组件网络安全与隐私保护实践
  • D. Coprime
  • 利用python pandas库清洗病例处方清洗步骤
  • 数据库在并发访问时,不同隔离级别下脏读幻读问题
  • Python核心技术开发指南(065)——with语句
  • Python核心技术开发指南(064)——析构方法
  • 20250913-01: Langchain概念:Runnable可运行接口
  • 记一次谷歌语法获取路径 针对空白页面
  • Java GC:从GC Roots到分代设计的哲学
  • 一款4000℃高温材料设计方案及性能预测
  • 【leetcode】64. 最小路径和
  • 2.10组件间的通信
  • MinerU学习
  • 网络安全学习
  • 如何用 Rust 重写 SQLite 数据库(一):项目探索
  • Qwen3-80B-A3B混合注意力机制
  • OBS使用教程:OBS多路推流插件如何下载?如何安装使用?
  • 禁用 vscode 的终端的粘滞滚动
  • 人工智能通识与实践 - 人工智能概述