数据结构与算法(Java版) | 线性结构和非线性结构

2023-05-16

之前,我们说过,数据结构是算法的基础,因此接下来在这一讲我就要来给大家重点介绍一下数据结构了。

首先,大家需要知道的是,数据结构包括两部分,即线性结构和非线性结构。知道这点之后,接下来我势必就要来为大家分别进行详细介绍了,下面咱们不妨先来看一下线性结构。

线性结构

关于线性结构,下面我一共罗列出来了五点需要大家进行掌握。

第一点,线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。就拿我们学过的一维数组来说,大家应该知道每一个下标就唯一对应一个值吧,而这就叫做一对一的线性关系,因此一维数组就是一种典型的线性结构,当然,除了一维数组之外,链表也是一种线性结构。

第二点,线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构

第三点,顺序存储的线性表称为顺序表,且顺序表中的存储元素是连续的。例如数组,它就是一个顺序表,不必我说,大家也都知道它里面的存储元素是连续的吧!

注意,这里的连续指的是存储元素之间的地址是连续的,为什么我会这么说呢,因为顺序表在内存中是以连续存储的方式进行存储的,而这也就是说,一旦在内存中为顺序表分配好了存储空间,那么它里面的元素就会被存储在一块连续的内存空间中,自然这些存储元素之间的地址就是连续的了。

第四点,链式存储的线性表称为链表,与顺序表不同的是,链表中的存储元素不一定是连续的,且元素节点中存放的是数据元素以及相邻元素的地址信息

初次谈起链表这种存储结构,相信大家可能会一头雾水,如果你没学过的话,不过,没学过也没关系,因为我们这套系列教程后面就会给大家介绍到,比方说单链表、双向链表等等。当然,这里我们说的是链表,既然说的是链表,那它肯定就与顺序表不同了,具体点说,就是链表中的存储元素就不一定是连续的了,也就是说有可能是连续的,也有可能是不连续的,感觉我说了句废话,哈哈哈😂!而且,链表中的每一个存储元素你都可以看作是一个节点,至于每一个节点中存放的是什么,我相信大家也都知道了,即数据元素以及相邻元素的地址信息。

看到这里,我相信大家已经已然知晓这一点了,即链表中节点与节点之间是通过地址来相互连接的,而且它们之间的地址还不一定连续。正是因为节点与节点之间相互连接的地址不一定连续,所以链表才有了这样一个好处,即可以充分的利用碎片内存。

第五点,线性结构常见的有数组、队列、链表和栈,这里大家先知道有这四种常见的线性结构就行,后面我再来给大家进行详细介绍啊!

说起数组,相信大家对其应该是再熟悉不过的了,不过你有可能不知道的是,数组也可以分好多种哟,例如稀疏数组;至于队列嘛,它也有单向队列、环形队列之分;链表就更是如此了,它同样也有单链表、环形链表、双向链表之分;至于栈嘛,大家可能会感觉有点陌生,不过它也有不同的实现方式,例如可以用数组来实现,或者也可以用链表来实现。凡此种种,后面我都会给大家详细介绍到。

最后,再给大家提个醒吧,就是大家学完数据结构之后,别人问你线性结构有哪些,你可不要连最基本的线性结构包括哪些都答不上来哟,你得答上来才行,否则这不就是出大问题了嘛😭!

非线性结构

与线性结构相反,非线性结构,其数据元素之间可能就不存在那种一对一的线性关系了,或者亦可说至少已经不是那种一对一的线性关系了。

例如,一个节点下面不仅可以有左节点,而且还可以有右节点,如下所示。

在这里插入图片描述

甚至,它下面可能还有第三个节点,而这就叫做多路查询树。

在这里插入图片描述

当然,如果大家这块听得不是太明白,那么也不打紧,因为后面我就会给大家详细介绍到。

上面我们讲到线性结构常见的有数组、队列、链表和栈,那么非线性结构又具体包括哪些呢?非线性结构包括二维数组、多维数组、广义表、树结构以及图结构

关于数组,尤其是二维数组,我想大家对其应该是再熟悉不过的了,而且马上我们就会讲到它,当然,讲二维数组我们会重点讲稀疏数组,至于稀疏数组是什么,大家下一讲就会知道;至于树结构和图结构,它俩是我们用的最多的非线性结构,而且由它俩还引申出来了很多很多算法,因此它俩将是我们后续学习的一个重点,到时候学的时候大家可要打起万分精神来学哟!

至此,关于线性结构和非线性结构的介绍,我就给大家讲到这里了,希望经过我的讲解,大家能对线性结构和非线性结构有一个最基本的认识。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法(Java版) | 线性结构和非线性结构 的相关文章

  • canvas画波形图

    最近公司要在浏览器上加个波形图 xff0c 本人搞C 43 43 的 xff0c 不会html5 xff0c 在网上搜了半天没找到一个例子 xff0c 只好自己研究了 郁闷啊 画这个图主要用到html5的canvas xff0c 不多说 x
  • layer 弹框 cropper 裁剪上传图片,thinkphp 3 使用 CropAvatar.class.php

    最近要做一个上传裁剪图片功能 xff0c 但是网上收出来的东西 xff0c 知识点都是对的 但是就是没说清楚 xff0c 也无法连续起来用 经过自己整理出来的一套代码 xff0c 亲测可用 xff01 不用多说 xff0c 直接上菜 PS
  • 解决mysql登录出现10061的问题

    问题出现的原因 xff1a 可能是系统自动关闭了mysql服务的运行 解决方法 xff1a 任务管理器 文件 运行新任务 services msc 找到mysql 启动即可成功 任务管理器 文件 运行新任务 services msc 找到m
  • Archlinux配置邮件(以qq邮箱为例)

    Archlinux配置邮件 以qq邮箱为例 安装s nail span class token function sudo span pacman S s nail 配置SMTP发送邮件 开启IMAP SMTP服务 打开qq邮箱网页版 gt
  • 电子爱好者总结的28个电子行业技术网站

    以下是一位电子爱好者总结的28个电子行业技术网站 21IC 电子 http www 21IC COM 中国电子资源网 xff1a http www ec66 com 中国电子进修网 http www studydz com 电子设计技术网
  • S_OK,S_FALSE,E_FAIL

    今天在调试一个ICOP的操作的时候 xff0c 发现连接被动关闭的时候老是会在一处断言处失败 xff0c 跟了很久终于发现了问题 在此记录一下 xff1a 断言报错的代码如下 xff1a HRESULT CIoCPWorker UnregI
  • Win7 应用程序无法正常启动(0xc000000d)的解决方法

    自从重装了WIN7系统后 xff0c VS2010编译出来的项目程序就不能正常启动 xff0c 启动的时候总是提示 应用程序无法正常启动 xff08 0xc000000d xff09 请单击 确定 关闭应用程序 在网上查找了很多解决方案 x
  • MySQL存储过程where条件执行失败的问题

    前几天对服务器实体做了属性缓存机制 xff0c 当时测试也没有出现大的问题 xff0c 昨天有人跟我说 xff0c 登陆的时候角色等级显示错误 xff0c 我复测了一下 xff0c 发现不只是等级错误 xff0c 进入游戏后角色位置 金钱
  • 程序员与厨师

    不管你信不信 反正我是信了 每一个程序员上辈子都是呆在厨房的厨子 好吧 你不信 我来证明给你看 1 下厨前 你得知道做的是早餐还是中晚餐 中晚餐的话 怎么也得走趟超市 如遇到好友聚会 怎么着也得做出一桌对得起朋友的饭菜 还有你得分析 朋友中
  • VS2010/VS2012 设置全局头文件和库路径

    在VS2010之前 xff0c 设置项目的全局头文件和库路径是非常方便的 xff0c 直接选择菜单Tools gt Options gt Projects and Solutions gt VC 43 43 Directories xff0
  • Linux下rz/sz安装及使用方法

    新搞的云服务器用SecureCRT不支持上传和下载 xff0c 没有找到rz命令 记录一下如何安装rz sz命令的方法 一 工具说明 在SecureCRT这样的ssh登录软件里 通过在Linux界面里输入rz sz命令来上传 下载文件 对于
  • 关于mysql存储过程创建动态表名及参数处理

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog 最近游戏开始第二次内测 xff0c 开始处理操作日志 xff0c 最开始把日志放到同一个表里面 xff0c 发现一天时间 xff0c 平均1
  • 关于mysql自增id的获取和重置

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog mysql获取自增id的几种方法 使用max函数 xff1a select max id from tablename 优点 xff1a 使
  • 关于SQL中Union和Join的用法

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog 一直以来 xff0c 对于数据库SQL方面都是半吊子水平 xff0c 能写一些基本的增删改查的语句 xff0c 大部分时间都是用下Where
  • 使用Cmake生成跨平台项目编译解决方案

    项目最近有需求在windows下面运行 xff0c 我花了几周时间将linux的服务器移植到windows下面 xff0c 目前已经能够正常运行服务器 xff0c 目前又有了新需求 xff0c 两边的代码结构和组织是分开的 xff0c 因此
  • linux下shell技巧

    经常看到一些大牛操作linux的时候 xff0c 双手运指如飞 xff0c 指令如流水般输出 xff0c 会不会感到羡慕呢 xff1f 本文就整理了一些linux下shell的技巧 xff0c 保管你学会之后 xff0c shell输出ap
  • Cmake在windows支持预编译头文件(stdafx.h)

    最近一直在研究cmake构建项目 xff0c 之前接触cmake的时候就感觉不太喜欢cmake xff0c 觉得它太乱了 xff0c 产生了太多的中间文件 xff0c 产生的项目文件也不是特别友好 xff0c 在windows下 xff0c
  • win服务器设置开机自动登录

    之前设置了一个开机自动执行脚本 xff0c 发现重启服务器之后没有生效 xff0c 原因在于 xff0c 服务器重启之后 xff0c 不会自动登录用户 xff0c 因此没有执行脚本 xff1b 因此第一步先设置服务器启动之后自动登录用户 x
  • Zynq ZC702平台 QSPI + eMMC实现

    预备知识 xff1a UG821 The processor system boot is a two stage process Another boot mode supported through FSBL is eMMC boot
  • 什么是Vista?

    Vista是微软下一代操作系统 xff0c 以前叫做Longhorn xff08 微软当初内部的代号 xff09 7月22日微软对外宣布正式名称是Windows Vista 作为微软的最新操作系统 xff0c Windows Vista第一

随机推荐