数据结构与算法(flutter)之线性表(二)

线性表的关系可以看成是一种有序对的集合,目的在于表示线性表中的任意两个相邻元素之间的关系。其中ai-1,称为ai的先行元素,ai是i-1的后继元素。简单地表示线性表,我们可以写成(a1,a2,a3,...,an-i,an)。下面尝试以更清楚和更口语化的说明来重新定义 "线性表"。

  • 有序表可以是空集合,或者可写成 (a1,a2,a3,...,an-i,an)。
  • 存在唯一的第一个元素a1与唯一的最后一个元素 an。
  • 除了第一个元素a1外,每一个元素都有唯一的先行者(predecessor),例如 ai的先者为 ai-1。
  • 除了最后一个元素 an外,每一个元素都有唯一的后继者 (successor),例如ai+1是ai后继者。

线性表也可用在计算机的数据存储结构中, 基本上按照内存存储方式可分为以下两种。

静态数据结构

  • 它也称为 "密集表" (Dense List),它使用连续分配约内存空间来存储有序表中的数据。它是在编译时就给相关的变量分配好内存空间。
  • 优点: 设计时相当简单, 而且读取与修改表中任意一个元素的时间总是固定的。缺点是删除或加入数据时, 需要移动大量的数据。
  • 缺点: 在建立静态数据结构的初期,必须事先声明最大可能要占用的固定内存空间, 因此容易造成内存的浪费。例如, 数组就是一种典型的静态数据结构。

动态数据结构

  • 它又称为"链表" (Linked List),它使用不连续的内存空间存储具有线性表特性的数据。
  • 优点是数据的插入或删除都相当方便,不需要移动大量数据。另外,动态数据结构的内存是在程序执行时才进行分配的,所以不需要事先声明, 这样能充分节省内存。
  • 缺点是在设计数据结构时较为麻烦,另外在查找数据时,也无法像静态数据一般可以随机读取,必须直到按顺序找到该数据为止。
相关推荐
GreenTea3 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
Bode_20023 小时前
多资源规划(含生产调度、库存管理及产能规划)的创新优化算法
算法·调度
土司大王4 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹4 小时前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
土司大王4 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode
罗西的思考6 小时前
机器人模型(WM / WAM / VLA)综合分析与对比:从「看」到「想」再到「做」
人工智能·算法·机器学习
小哈里7 小时前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
小π军8 小时前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司8 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
a187927218318 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解