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

【数据结构】线性表概括

目录

 一、线性表

二、分类

三、实现


 一、线性表

线性表(linear list)是 n个具有相同特性的数据元素的有限序列。 

线性表中数据元素的个数称为线性表的长度。长度等于零的线性表称为空表。

线性表的逻辑图:

        线性表中的数据元素具有相同类型,相邻元素具有前驱和后继关系,相邻元素中在前的元素是后一个元素的前驱,在后的元素是前一个元素的后继。

        在这个序列中第一个元素没有前驱,最后一个元素没有后继。其他每个元素有且仅有一个前驱和一个后继

二、分类

        线性表有两种存储结构:顺序存储和链接存储。一般来说可以分为顺序表和链表这两种基本结构。

        一般来说,线性表主要包括顺序表和链表。

        顺序表是将元素依次存储在一块连续的存储空间中,可以通过索引直接访问任何一个元素,因此具有较高的访问效率。

        链表则是通过节点之间的链接关系来存储元素,每个节点包含数据域和指针域,指针域指向下一个节点。

        链表的优点在于插入和删除操作效率较高,不需要移动大量元素,但访问效率相对较低,需要从头节点开始逐个遍历。

        还有一些特殊的线性表:栈和队列。

        栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。栈的应用非常广泛,如函数调用、表达式求值等。根据实现方式的不同,栈可以分为顺序栈和链栈。

        队列是一种先进先出(FIFO)的数据结构,允许在队尾插入元素,在队头删除元素。常见的队列类型有顺序队列和链队列。

下面是关于线性表的大概类型结构图:

  • 顺序表和链表的区别

存储空间

  • 顺序表:在物理存储上,顺序表的元素是连续存放的。所以在内存中,顺序表的各个元素占据着相邻的存储单元。
  • 链表:链表的元素在逻辑上连续,但在物理存储上不一定连续。链表的每个元素(节点)包含 数据 和 指向下一个节点的指针,节点可以通过指针链接起来形成逻辑上的连续序列,但它们在内存中的位置可能是分散的。

随机访问

  • 顺序表:支持随机访问,时间复杂度为O(1)。可以通过数组下标直接计算出元素的存储位置,从而快速访问。
  • 链表:不支持随机访问,访问一个元素的时间复杂度为O(N)。因为需要从链表头节点开始,沿着指针逐个遍历节点,才能找到目标节点。

插入和删除操作

  • 顺序表:可能需要搬移元素,效率低,时间复杂度是O(N)。
  • 链表:只需修改指针指向。

容量概念

  • 顺序表:通常有固定的容量限制(静态顺序表),但在动态顺序表中空间不够可以扩容。
  • 链表:没有固定的容量概念,理论上可以无限添加节点,只要内存足够。

应用场景

  • 顺序表:适用于元素个数相对固定,且需要频繁进行元素访问的场景。
  • 链表:适用于元素个数不确定,且需要频繁进行插入和删除操作的场景

缓存利用率

  • 顺序表:由于元素物理存储连续,在访问元素时,可以利用缓存的预取机制,缓存利用率高,能够提高数据访问的速度。
  • 链表:元素物理存储分散,缓存预取机制难以发挥作用,缓存利用率低。

三、实现

1. 顺序表的实现

  • 【数据结构】顺序表(sequential list)

2. 链表的实现

  • 【数据结构】链表(linked list)

3. 栈的实现

  • 【数据结构】栈(stack)

4. 队列的实现

  • 【数据结构】队列(queue)

http://www.xdnf.cn/news/1172053.html

相关文章:

  • [特殊字符] 从数据库无法访问到成功修复崩溃表:一次 MySQL 故障排查实录
  • SQL基础⑧ | 表格篇
  • React中的antd的表格使用方法
  • 在 Ubuntu 上将 Docker 降级到版本 25.0.5 (二) 降低版本,涉及兼容性问题
  • 解决 i.MX6ULL 通过 ADB 连接时权限不足问题 not in the plugdev group
  • C++ 扫描局域网某个端口是否开放(如 5555 )(android adb) 线程并发加速
  • 苍穹外卖DAY11
  • 华为云数据库 GaussDB的 nvarchar2隐式类型转换的坑
  • gig-gitignore工具实战开发(一):项目愿景与蓝图规划
  • C#与WPF使用mvvm简单案例点击按钮触发弹窗
  • C Primer Plus 第6版 编程练习——第10章(上)
  • MySQL金融级数据一致性保障:从原理到实战
  • 视频、音频录制
  • Javascript常见的使用场景
  • 基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(上)
  • Deep learning--模型压缩的五种方法
  • 什么是5G-A三防平板?有什么特点?哪些领域能用到?
  • Java 抽象类 vs 接口(Abstract Class vs Interface)对比笔记
  • 220V降5V,输出100MA,为家电电器消费类产品提供电源WD5202L
  • 【Dify】-进阶11- 权限与发布配置详解
  • ESP32-CAM实战:DIY基于OpenAI的AI视觉识别相机
  • 显微科研中的关键选择:不同显微镜相机技术特性与应用适配性全面解析
  • k8s pvc是否可绑定在多个pod上
  • 学生信息管理系统 - HTML实现增删改查
  • 硬件基础 -- 信号完整性
  • solidity从入门到精通 第四章:智能合约的生命周期
  • 需要系统的学习下Docker的使用
  • 【图像处理基石】如何对遥感图像进行目标检测?
  • Upload-Labs通关全攻略详细版
  • 二进制安装 Kubernetes 高可用集群