数据结构中的顺序表和链表

2023-11-05

  最近在复习数据结构中的线性表,下面总结一下顺序表和链表的区别。

1. 顺序表

  线性表的顺序存储称为顺序表,顺序表使得逻辑地址连续的元素在物理地址上也连续。

1.1 存储结构

  最常用的存储结构是一维数组。

  一维数组可以是静态分配,例如:int arr[3]={1,2,3}。这种分配方式,数组的大小和空间是事先固定了,要避免查询修改数据时的访问越界和溢出问题。

  一维数组也可以是动态分配,使用 new 和 delete 来实现动态内存分配和释放。在C++中,推荐使用标准模板库 vector 容器来动态存储线性表。(vector是一个动态数组,它可以自动调整大小,并且在插入和删除元素时会自动处理内存分配和释放。)

1.2 顺序表特点

  顺序表最主要的特点是随机访问,即通过首地址和元素符号可在时间为O(1)内找到指定的元素。

  顺序表存储密度高,每个节点只存储数据元素。

  顺序表逻辑上相邻的元素物理上也相邻,所以插入和删除操作需要移动大量元素。

1.3 顺序表应用场景

  1. 用于快速排序和归并排序的存储容器。

2.链表

  链表通过指针链接的方式建立起元素之间的逻辑关系,对于逻辑上相邻的元素,物理地址之间不一定相邻。相比于顺序表的插入和存储需要移动大量元素,链表插入和删除元素不需要移动元素,只需要修改指针,但是也失去顺序表可随机存取的优点。

2.1 存储结构

  实现链表的过程中,需要编程定义链表节点。常见的链表结构有以下几种:

  1. 单链表。单链表的链表节点存放元素自身信息和一个指向其后继节点的指针。通常而言,单链表会增加一个头节点(并不存储元素相关信息),以方便运算的实现。
  2. 双链表。双链表的链表节点存放元素自身信息、指向后继节点的指针、指向前驱节点的指针,
  3. 循环链表。循环链表是单链表的扩展,单链表最后一个节点的指针不是NULL,而改为指向头节点,整个链表形成一个环。
  4. 静态链表。借助数组来描述链式存储结构称为静态链表。所以静态链表也需要分配较大的连续空间(使用数组),并且插入和删除不需要移动元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构中的顺序表和链表 的相关文章

随机推荐

  • Android应用自动更新实现方法及源代码

    Android应用自动更新实现方法及源代码 一 引言 随着移动应用的普及 保持应用程序的最新版本对于提供良好用户体验和修复漏洞非常重要 为了简化用户手动更新应用的步骤 开发者可以通过实现自动更新功能 使得应用程序能够在后台自动检查并下载最新
  • IDEA如何手动配置插件

    打开idea 点击File进入setting设置 点击plugins 点击设置按钮 这样你就会看到这样一个界面 别担心这是你的插件路径 这是idea插件下载官网https plugins jetbrains com 在这里可以随意下载插件
  • 关于Maven报错的一些解决办法(别处贴的)

    1 警告 The tag handler class for s form org apache struts2 views jsp ui FormTag was not found on the Java Build Path 这个问题终
  • 原生JavaScript实现ajax异步请求代码

    jQuery封装了JavaScript的一些常用方法 而jQuery中的 ajax get post 是比较常用的方法 也是大家最熟悉 最常用的 但是在面试时 通常面试官 会要求你手写原生ajax异步请求的代码 此时即便你的jquery学的
  • Solr删除文档数据

    使用控制台删除solr的无用数据 目前我使用了两种方式 001 登录你的solr地址 我的地址为 http localhost 8983 solr 如下图所示 上图箭头处选择你的my core 我的mycore为damsearch 002
  • [Python图像处理] 二.OpenCV+Numpy库读取与修改像素

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • 恐龙酷跑(python)

    恐龙酷跑小游戏 摘要 一 引言 二 系统结构 三 实现代码 四 运行结果 五 总结和展望 摘要 论述了Python语言中Pygame库的框架结构和一些常用的该库API 使用Python库进行2D游戏开发时需要注意的事项 以及进行2D游戏开发
  • 【Docker】Docker安装telnet

    文章目录 1 概述 1 概述 在使用docker容器时 有时候里边没有安装telnet 敲vim命令时提示说 telnet command not found 这个时候就需要安装vim 可是当你敲apt get install telnet
  • error LNK2019: 无法解析的外部符号 Netbios,该符号在函数 “unsigned char * __cdecl getMACAddress(unsigned char * cons

    我已经正确的加了库 头文件也能找到了 但是还是出现这个问题 说明还是库有问题 原因是我加入的是dcmtk库 是通信有关的 所以还需要在头文件位置加上如下的代码 pragma comment lib netapi32 lib
  • 元数据编辑器--(坑集锦)

    概述 Angular中的输入输出是通过注解 Input和 Output来标识 它位于组件控制器的属性上方 输入输出针对的对象是父子组件 我借鉴的博客地址 https segmentfault com a 1190000007890167 1
  • 人像抠图学习笔记

    目录 人脸分割BiseNetV2 u2net 人脸分割BiseNetV2 宣传的 BiSeNet V2出来了 72 6 的mIOU 156FPS的速度 让分割飞起来 模型30多m TensorFlow平台的 cpu版时间80ms 人脸抠图
  • 两个排序后数组中是否存在相同数字

    因为两个数组都是排好序的 所以只要一次遍历就行了 首先设两个下标 分别初始化为两个数组的起始地址 依次向前推进 推进的规则是比较两个数组中的数字 小的那个数组的下标向前推进一步 直到任何一个数组的下标到达数组末尾时 如果这时还没碰到相同的数
  • Linux下的find指令

    一 概述 因为Linux下面一切皆文件 经常需要搜索某些文件来编写 所以对于linux来说find是一条很重要的命令 linux下面的find指令用于在目录结构中搜索文件 并执行指定的操作 它提供了相当多的查找条件 功能很强大 在不指定查找
  • 第23章组织通用管理

    组织通用管理是项目管理的关键前提和基础 它为项目管理提供思想路线和基本原则与方法 项目管理则是通用管理方法在特定场景下的具体表现 在把项目管理方法运用于实际工作的时候总会表现其通用的方法 反过来说 通用的方法又必定会支配和制约着人们对项目管
  • 理解 Linux 网络栈:Linux 网络协议栈简单总结

    1 Linux 网络路径 1 1 发送端 1 1 1 应用层 1 Socket 应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的 Linux Socket 是从 BSD Socket
  • Window10文件在另一个程序中打开无法删除

    1 打开任务管理 点详细信息 2 打开性能 gt 3 打开下方的 资源监视器 4 句柄中输入文件名 5 鼠标右键结束进程 就可以删除文件啦
  • matlab判断cell为空,问与答1:在VBA代码中如何判断单元格是否为空?

    问 如下图所示的工作表 我希望使用VBA代码将空行的背景色设置为灰色 以便于查看 即将上半部分的工作表变为下半部分的样式 我需要判断某行的单元格为空 然后将该行相应的单元格背景色设置为灰色 如何判断单元格是否为空 答 先看看实现所需效果的代
  • 普通人可以做的七个小众副业,让你告别死工资

    现在有什么副业又简单又可以赚得一定的收入呢 当然是有的 下面分享七个适合普通人操作的七个小众副业 1 手工制品 现在手工制品越来越贵 可以做的种类也很多 比如粘土 针织 滴胶 奶油 手机壳 发夹之类的 又是兴趣 又能赚钱 一举两得 可以在一
  • OPF 难解case

    14bus case 当前线路功率极限为Slmax 调整为0 89 Slmax OPF收敛 调整为0 93 1 0001 Slmax OPF不收敛 调整为1 1 Slmax OPF 收敛 其实整个计算过程中 line flow 是not a
  • 数据结构中的顺序表和链表

    目录 1 顺序表 1 1 存储结构 1 2 顺序表特点 1 3 顺序表应用场景 2 链表 2 1 存储结构 最近在复习数据结构中的线性表 下面总结一下顺序表和链表的区别 1 顺序表 线性表的顺序存储称为顺序表 顺序表使得逻辑地址连续的元素在