数据结构——线性表

2023-11-13

  1. 线性表:线性表是最基本的,最常见的一种数据结构。

在这里插入图片描述
1.1 前驱元素:若A元素在B元素的前面,则称A为B的前驱元素。后继元素:若B元素在A元素的后面,则称B为A的后继元素。
1.2 线性表的特征:数据元素之间只有一对一的关系。
第一个数据元素没有前驱,这个数据元素叫头结点。
最后一个数据元素没有后继,这个数据元素叫尾结点。
1.3 线性表的分类:线性表分为两种不同的存储数据的方式,顺序表和链表。

  1. 顺序表:顺序表是在计算机中已数组的形式方式进行存储。

在这里插入图片描述

2.1:一般作为容器存储数据,都需要向外部遍历的方式。
2.2:遍历的方式有两种方法:重写iterator方法,和实现Iterator接口,重写hasNext方法和next方法。
2.3顺序表的时间复杂度如下:

  • 不论数据元素量N有多大,只需要get(i)一次就拿到对的元素,所以时间复杂度为O(1)。

  • 每一次插入,都需要把i的位置后面的元素移动一次,随着元素N的增大,移动的元素也越多,时间复杂度为O(n)。

  • 每一次删除,都需要把i的位置后面的元素移动一次,随着元素的N的增大,移动的元素也越多,时间复杂度O(n)。

  • 由于顺序表的底层由数组实现,数组的长度是固定的,所以在操作的过程中涉及到了容器扩容操作。这样会导致顺 序表在使用过程中的时间复杂度不是线性的,在某些需要扩容的结点处,耗时会突增,尤其是元素越多,这个问题 越明显。

2.4 java中的Arraylist,底层就是顺序表,使用数组的方式实现,提供了增删改的和扩容的功能。

  1. 链表:链表是一种物理存储单元上非连续,非顺序的存储结构,链表由一系列的结点组成,链表的每一个元素都可以是一个结点,结点可以在运行时动态生成。
    在这里插入图片描述
    3.1单向链表:单向链表是链表的一种,它是由多个结点组成的,每一个结点由一个数据域和一个指针域组成,数据域是用来存储数据,指针域是用来指向下一个结点,头结点的数据域不存储数据,尾结点的指针域是空的。
    在这里插入图片描述
    3.2双向链表:双向链表也是叫双向表,也是链表的一种,也是由多个结点组成的,每一个结点由一个数据域和两个指针域组成的,数据域是用来存储数据,两个指针域是用来指向上一个结点和下一个结点,头结点没有指向上一个结点也不存储数据,尾结点没有指向一下一个结点但是它指向上一个节点和存储数据域。
    在这里插入图片描述
    3.3 java中LinkedList也是使用双向链表的,并提供增删改等方法。
    3.4 链表的复杂度如下 :
  • 每一次查询都需要从链表的头部开始一次向后查找,随着数据元素N的增多比较的元素越多时间复杂度为O(n)。
  • 每一次插入需要找到i位置的前一个元素,然后在插入数据,随着数据元素的增多,查找的元素越多,时间复杂度为O(n)。
  • 每一次移除需要找到i位置的前一个元素,然后在移除数据,随着数据元素的增多,查找的元素越多,时间复杂度为O(n)。
  • 相对顺序表,链表的查询操作性能会比顺序表低。因此,我们在查询较多的情况下使用顺序表,增删操作比较多的情况下使用链表操作。
  1. 栈:栈是一种先进后出的数据结构,是一种只能在一端进行插入和删除操作的特俗线性表。它按照先进后出的原则存储数据,先进的数据会被压在最底的栈,后进的数据会在最上的顶栈。读取数据的时候会先从栈顶先弹出直到底栈,我们称数据进入到栈的动作叫压栈,数据出栈叫弹栈。
    在这里插入图片描述
  2. 队列:队列是一种基于先进先出的数据结构,是一种在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的规则存储数据,先进的数据会被先读取到的,最后进的数据到最后才被读取到。
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构——线性表 的相关文章

  • java web系统设计思路_JavaWeb——实战入门,设计思路总结。

    期末考试炸掉了 关于此次期末考试题 我一言难尽 过后总结 还是应该加强功底 勤能补拙 做一篇入门的设计思路总结 巩固一下基础 如讲解有误 请多多包涵 我的设计思路如下 1 在navicat mysql可视化 上建立数据库 gt 建立数据表
  • 实现计算机视觉——人脸检测

    概述 计算视觉是人工智能的一部分 旨在设计能够像人类视觉一样进行观察的智能算法 在本文中 我们将介绍三个主要范围 人脸检测 物体检测 面部识别 对象跟踪 在第一篇文章中 我们将重点介绍计算机视觉 以及基于 Python OpenCV 库的人
  • mybatis-plus 新增/修改实现自动填充指定字段

    需要修改的字段在模型类上添加 TableField fill FieldFill xxx 注解 FieldFill的选项 哪个字段在什么时候填充需要手动设置注解 新建一个MetaObjectHandler的实现类MyMetaObjectHa

随机推荐

  • spyder debug

    按钮作用 1 debug file 进入调试 2 run current line 运行当前行 3 step into function or method of current line 进入函数或方法内运行 4 run until cu
  • 节点对于ip的重要性

    网络节点是选择代理IP的主要标准 那么 你知道节点对代理IP质量有什么影响吗 神龙IP为你解答 浅析节点对代理IP的影响 1 代理IP的节点越多 重复率越低 全球IPv4网络非常有限 国内IPv4网络也是如此 各地区IPv4网络更加有限 代
  • 63. Unique Paths II

    思路1 这个题目第一个思路还是用DFS 和第62题一样 但是在递归的时候需要判断有无障碍物 因为第62题用的DFS Leetcode提示Time Limit Exceeded 所以这道题没有尝试DFS的做法 而是直接使用了DP 思路2 根据
  • Anaconda运行python文件

    一 打开Anaconda Prompt 二 切换到要运行的python文件所在文件夹 1 先切换到该盘 例我的是D盘 2 切换到该文件夹 cd A文件夹 cd A文件夹绝对路径 三 运行python文件 例运行test py文件 pytho
  • Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 随着互联网的发展 越来越多的用户通过互联网来交流 电子邮件成为人们日常生活交流的重要工具 用户每星期可能收到
  • react条件渲染

    在React 中 你可以创建不同的组件来封装各种你需要的行为 然后 依据应用的不同状态 只渲染对应状态下的部分内容 React中的条件渲染和javascript中的一样 使用javascript运算符if或者条件运算符去创建元素来表现当前的
  • Jog运动模式

    Jog 运动 就是按住按键 电机一直走 弹起按键电机停止 在 Jog 运动模式下 各轴可以独立设置目标速度 加速度 减速度 平滑系数等运动参数 能 够独立运动或停止 轴 1 运动在 Jog 模式下 初始目标速度为 100pulse ms 动
  • 【iOS】获取当前 NSViewController 的 window 以及其所在 NSWindowController 的 window

    前言 场景 登录成功后 我们需要关闭当前登录页的 NSViewController 以及 NSWindowController 这时就需要获得当前的 window 进行关闭 解决 这里分别针对 NSView NSViewController
  • 【CV中的Attention机制】ShuffleAttention

    GiantPandaCV导语 这个系列已经好几个月没有更新了 开始继续更这个方向论文 19年 20年又出现了很多关于Attention的研究 本文SA Net shuffle attention for deep convolutional
  • python操作leveldb数据库

    1 leveldb简介 优点 1 leveldb是一个开源的持久化的键值数据库 2 具有很高的随机写 顺序读写性能 但是随机读性能一般 适合写多读少的场景 在一台4核Q6600的CPU机器上 每秒钟写数据超过40w 而随机读的性能每秒钟超过
  • vue小技巧:性能优化使用篇 => 路由/tab切换取消当前页面异步请求

    tab在前端是非常常见的一个组件 在vue里面 结合了双向绑定原理 更是将页面无感刷新提升到了极致 假设每个tab选项都需要请求一次接口 做一次异步操作 但是假如我们有一个手速超快的人 我摊牌了 就是我 他在一秒钟内能切换3次tab选项 也
  • redis zset利用并集求差集

    解决的痛点是缓存里的数据结构 zset 有序集合 它只能做并集 交集 不能做差集 我的需求是需要它做差集 总的内容缓存 差 用户已看的缓存 就能得到 用户没有看的 也就是接下来要给用户看的内容我的思路是利用并集操作完成 内容的缓存池 val
  • Unity中关于Destroy的API

    Unity中关于Destroy的API 常用的关于Destory的API 销毁游戏物体 Destroy gameObject 从游戏物体删除该脚本 Destroy this 从游戏物体删除刚体 Destroy rigidbody 加载物体5
  • 红帽官宣新任总裁兼 CEO!转型关键人物 Paul Cormier “退而不休”

    整理 郑丽媛 出品 CSDN ID CSDNnews 在今年 5 月的红帽峰会上 曾有传言称红帽总裁兼 CEO Paul Cormier 可能很快就会退休 事实证明 这一传言有所偏差 Paul Cormier 的确要退位 但并没有打算退休
  • 「干货分享」DevExpress常用控件——RichEditControl使用指南

    做WinForms的一般都知道 传统 NET界面有一个RichTextBox控件 这个是一个富文本控件 可以存储图片文字等内容 它有自己的文件格式RTF 在DevExpress控件组里面也有一个同等的控件 他的名字是RichEditCont
  • k8s-如何快速编写yaml文件(新手)

    k8s 如何快速编写yaml文件 新手 1 使用kubectl create 命令生成yaml文件 kubectl create depolyment web image nginx o yaml dty run depolyment 工作
  • 升级到Window11体验

    1 把禁掉的微软更新服务开启 2 去官网按照指导来 用微软账号 3 打开Window预览体验计划 比较慢 不要开代理不然会有错误 多转几圈多等一会儿 其次就是最近网络有问题虽然能够上网图标却显示未连接Internet 4 登录之前在官网弄的
  • 操作系统修炼秘籍(1):秘籍简介

    毋庸置疑 操作系统 Operating System OS 是一个非常大的概念 涉及到的内容非常非常多 在探讨它的时候 往往会将操作系统置于一个比较底层的角度去对待 这也使得多数人对OS是 闻之丧胆 对OS相关的资料或概念也是望而却步 这也
  • python编程基础-task5-面向对象的编程

    一 类的例子 class Song object class表示要创建类 Song是类的名称 def init self lyrics self lyrics lyrics 这里是设置了lyrics是的全局变量 后面的类里都可以使用这个参数
  • 数据结构——线性表

    线性表 线性表是最基本的 最常见的一种数据结构 1 1 前驱元素 若A元素在B元素的前面 则称A为B的前驱元素 后继元素 若B元素在A元素的后面 则称B为A的后继元素 1 2 线性表的特征 数据元素之间只有一对一的关系 第一个数据元素没有前