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

【数据结构】初识数据结构

引入:

哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我想让大家知道的是:数据结构非常有趣,很多算法是智慧的结晶,我希望大家在学习数据结构的过程是一种愉悦的心情感受。因此我开创了《数据结构》专栏,在这里我将把数据结构内容以有趣易懂的方式展现给大家。

1.数据结构的起源

早期人们都把计算机理解为数值计算工具,就是感觉计算机时用来计算的。所以计算机解决问题时,应该是先从具体问题中抽象出一个适当的数据类型,设计出一个解此数据模型的算法,然后在编写程序,得到一个实际的软件。

 可现实中,我们更多的不是解决数值计算的问题,而是需要一些科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好的解决问题。所以:数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的关系和操作等相关等问题的学科。这样看来是不是有点难以理解,我直接简单点概括:研究数据在计算机中的存储方式。1968年,美国的高德纳教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。同年,“数据结构”作为一门独立的课程,在计算机科学的学位课程中开始出现,也就是说,从那之后计算机相关专业的学生开始接收“数据结构”的“折磨”--其实说是享受才对。

2.基本概念和术语

说到数据结构是什么,我们得先来了解什么时数据。正所谓“巧妇难为无米之炊”,再强大的计算机,也是要有“米”下锅才可以干活的,否则就是一堆破铜烂铁,这个“米”就是数据。

2.1数据

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别的,并输入给计算机处理的符号集合,数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图片、视频等非数值类型。比如我们现在常用的一些搜索引擎,一般会有网页、图片、视频等分类,图片是图像数据、音频当然是声音类型,视频更不用说了,而网页其实指的就是全部数据的搜索,包括重要的数字和字符等文字数据。再比如我们在学校学习的各种各样的知识都可以成为数据,分享给大家使用。也就是说,我们这里说的数据,其实就是符号,而这些符号必须具备两个前提:

  1. 可以输入到计算机中
  2. 能被计算机程序处理

2.2数据元素

数据元素是组成数据的、具有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。比如:在人类中什么是数据元素,当然是人啦。

2.3数据项

数据项一个数据元素可以由若干个数据项组成,比如人这样的数据元素,可以有眼睛、耳朵、手等这些数据,也可以有姓名、年龄、性别等数据。数据项是数据不可分割的最小单位。在“数据结构”中,我们把数据项定义为最小的单位,是有助于我们解决问题的,所以,记住数据项是数据的最小单位。但当我们真正讨论问题的时候,数据元素才是数据结构中建立数据模型的着眼点。当我们讨论一本书时,是讨论这本书里面的角色这样的“数据元素”,而不是针对这些角色的姓名、年龄这些展开讨论。

2.4数据对象

数据对象:是性质相同的数据元素的集合,是数据的子集。什么叫性质相同,是数据元素相同数量和类型的数据项,比如,在刚才的例子中,人都有姓名、性别等相同的数据项。既然数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同的性质,在不产生混肴的情况下,我们都将数据对象简称为数据。

2.5数据结构

结构简单点来说就是关系,比如在化学中我们学过的分子结构,就是说组成分子的原子之间的排列方式。严格点说,结构是指各个组成部分相互搭配和排列的方式。在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称为结构,那数据结构是什么呢?数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在计算机中,数据元素并不是孤立、杂乱无章的,而是具有内在联系的数据集合,数据元素之间存在的一种或者多种特定关系,也就是数据的组成形式。

3.逻辑结构和物理结构

按照视点的不同,我们把数据结构分为了逻辑结构和物理结构两部分。

3.1逻辑结构

逻辑结构:是指数据对象中数据元素之间的相互关系。逻辑结构主要分为4种。

3.1.1集合结构

集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间又没有其他的关系。各个数据元素是“平等的”,他们的共同属性是“同属于一个集合”。数据结构中的集合关系就类似于数学中的集合。

3.1.2线性结构 

线性结构:线性结构中的数据元素之间是一对一的关系。

3.1.3树形结构

树形结构:树型结构中的元素之间存在一种一对多的层次关系。(有点像我们的族谱)

3.1.4图形结构 

图形结构:图形结构的数据元素是多对多的关系。

 我们在用示意图表示数据的逻辑结构时,要注意两点:

  1. 将每一个数据元素看作一个结点,用圆圈表示。
  2. 元素之间的逻辑关系用结点之间的连线表示。如果这个关系是有方向的,那就像我这个一样用箭头表示。

3.2 物理结构

物理结构:是指数据的逻辑结构在计算机中的存储形式。数据的存储结构正确反映数据元素之间的逻辑关系这才是最为关键的,数据元素的存储结构形式有两种:顺序存储和链式存储。在未来我们学习顺序表和链表时会更加深入学习。

3.2.1顺序存储结构

顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。这种存储结构说来也简单,就是排队,数组元素都按顺序排好,每个元素占一小段空间。和我们学习过的数组一样。

3.2.2链式存储结构

链式存储结构:把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的,也可以是不连续的。打个比方就像我们去医院挂号,每个人去领个号,等待的时候你想去哪就去哪,只要及时回来就行。数据元素的存储关系并不能反映他的逻辑关系,因此需要一个指针存放数据元素的地址,这样就能通过地址找到相关数据元素的位置了。

相关文章:

【数据结构】初识数据结构

引入: 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我…...

相机知识的补充

一:镜头 1.1MP的概念 相机中MP的意思是指百万像素。MP是mega pixel的缩写。mega意为一百万,mega pixel 指意为100万像素。“像素”是相机感光器件上的感光最小单位。就像是光学相机的感光胶片的银粒一样,记忆在数码相机的“胶片”&#xff…...

在Linux操作系统中实现磁盘开机自动挂载

当一个分区创建好,然后文件系统创建完毕之后, 需要使用mount命令将分区挂载到空目录上,这个挂载关系是临时的,也就是说当重启机器的时候,硬盘分区于空目录之间的挂载关系就会解除。 磁盘于目录之间的挂载关系断开意味…...

单片机编程实例400例大全(100-200)

今天继续分享单片机编程实例第100-200例。 今天的实例会比前面100复杂一些,我大概看了下,很多都具备实际产品的参考价值。 今天继续分享单片机编程实例第100-200例。 今天的实例会比前面100复杂一些,我大概看了下,很多都具备实际…...

新兴游戏引擎Godot vs. 主流游戏引擎Unity和虚幻引擎,以及版本控制工具Perforce Helix Core如何与其高效集成

游戏行业出现一个新生事物——Godot,一个免费且开源的2D和3D游戏引擎。曾经由Unity和虚幻引擎(Unreal Engine)等巨头主导的领域如今迎来了竞争对手。随着最近“独特”定价模式的变化,越来越多的独立开发者和小型开发团队倾向于选择…...

Leetcode—1652. 拆炸弹【简单】

2024每日刷题&#xff08;127&#xff09; Leetcode—1652. 拆炸弹 实现代码 class Solution { public:vector<int> decrypt(vector<int>& code, int k) {int codeSize code.size();vector<int> ans(codeSize, 0);if(k 0) {return ans;}if(k > 0)…...

JAVASE---抽象类相关

instanceof 和类型转换 System.out.println(X instanceof Y );主要看X与Y之间是否存在父子&#xff08;继承&#xff09;关系&#xff0c;如果存在则编译可完成&#xff0c;否则无法 进行编译。 1.父类引用指向子类的对象 2.把子类转换为父类&#xff0c;向上转型; 3.把父类转…...

深入理解C++中的inline函数

在C编程中&#xff0c;我们经常会遇到inline关键字&#xff0c;它用于修饰函数&#xff0c;以建议编译器将该函数的调用替换为函数体的直接拷贝。这就是inline函数的基本概念。然而&#xff0c;inline函数并非真正意义上的函数&#xff0c;而只是一种"在调用点插入函数体&…...

Rust 动态数组Vector

导航 一、动态数组是什么&#xff0c;怎么用1、动态数组Vector是什么2、动态数组怎么用&#xff08;1&#xff09;创建动态数组&#xff08;2&#xff09;尾部追加元素&#xff08;3&#xff09;尾部删除元素&#xff08;4&#xff09;删除指定位置元素&#xff08;5&#xff0…...

Linux主机重启后报错:[FAILED] Failed to start Switch Root.

一、问题描述 某次云主机因计费问题&#xff0c;导致批量重启&#xff0c;重启后发现某台云主机竟进入紧急救援模式&#xff08;emergency模式&#xff09;&#xff0c;如下所示&#xff1a; 二、原因及处理 1&#xff09;原因&#xff1a;加载根分区失败&#xff0c;导致无…...

git--.gitignore--使用/详解/实例

简介 本文介绍git的.gitignore忽略文件的用法。 项目中并不是所有文件都需要保存到版本库中的&#xff0c;例如“target”目录及目录下的文件就可以忽略。 忽略某个文件&#xff08;不提交到版本库的方法&#xff09;&#xff1a;在Git工作区的根目录下创建一个.gitignore文件…...

初识java——javaSE(2)--运算符与逻辑控制【求个关注】

文章目录 一 运算符1.1 算术运算符当两个不同类型的值相加时&#xff1a;/ 运算符%运算符 1.2 关系运算符1.3 逻辑运算符短路&#xff1a;逻辑非 1.4 位运算符&|^位运算符当作逻辑运算符中使用 ~>><<>>> 1.5 赋值运算符1.6 三目运算符 二 逻辑控制if语…...

JAVA前端快速入门基础_javascript入门(02)

写在前面:本文用于快速学会简易的JS&#xff0c;仅做扫盲和参考作用 1.JavaScript函数 什么是函数:执行特定任务的代码块 1.1定义&#xff1a; 使用function来进行定义(类似于python里面的def 或者java和c里面的void&#xff0c;int这些返回类型开头)。定义规则如下: func…...

【热门话题】ElementUI 快速入门指南

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 ElementUI 快速入门指南环境准备安装 ElementUI创建 Vue 项目安装 ElementUI 基…...

webpack4和webpack5区别4---自动清除打包目录

webpack4 自动清除打包目录 需要使用clean-webpack-plugin插件 const {CleanWebpackPlugin} require(clean-webpack-plugin); module.exports {plugins: [new CleanWebpackPlugin()} } webpack5 自动清除打包目录 module.exports {output: {clean: true} }...

npm许可证检查

node开发做项目&#xff0c;很少有人去纯手工打造&#xff0c;大多是采用一些开源框架&#xff0c;还会使用前人做好的轮子&#xff0c;所以咱们的项目文件里&#xff0c;除了自己编写的js文件&#xff0c;还会带有一些拿来主义的npm模块&#xff0c;从其他开源发布网站上下载的…...

利用AI大模型和Echarts 绘制知识图谱,实现文本信息提取和图数据库操作

引言 随着信息时代的到来&#xff0c;海量的文本数据成为了我们获取知识的重要来源。然而&#xff0c;如何从这些文本数据中提取出有用的信息&#xff0c;并将其以可视化的方式展示出来&#xff0c;一直是一个具有挑战性的问题。近年来&#xff0c;随着人工智能技术的发展&…...

Telegram电报+86手机接收验证码及账号解封方法

Telegram电报86手机无法接受验证码目前可用Telegram X获取&#xff0c;测试可用。获取验证码的前提是需要确保网络通畅 不要同一时段获取超过太多验证码&#xff0c;获取过多验证码将会很长一段时间收不到验证码&#xff0c;6小时最多获取2次验证码。 方法1&#xff1a;使用官…...

迅饶科技 X2Modbus 网关 AddUser 任意用户添加漏洞复现

0x01 产品简介 X2Modbus是上海迅饶自动化科技有限公司Q开发的一款功能很强大的协议转换网关, 这里的X代表各家不同的通信协议, 2是T0的谐音表示转换, Modbus就是最终支持的标准协议是Modbus协议。用户可以根据现场设备的通信协议进行配置,转成标准的Modbus协议。在PC端仿真…...

基于YOLOv8+PyQt5复杂场景下船舶目标检测系统

1. 应用场景 复杂场景下船舶目标检测系统的应用场景包括&#xff1a; 港口管理和安全&#xff1a;监控港口区域&#xff0c;确保船舶安全地进出港口&#xff0c;预防相撞事故的发生。 海洋交通监控&#xff1a;实时追踪海上交通流&#xff0c;并识别违规或异常航行行为&#x…...

Spring Boot | Spring Security ( SpringBoot安全管理 )、Spring Security中 的 “自定义用户认证“

目录 : Spring Boot 安全管理 &#xff1a;一、Spring Security 介绍二、Spring Security 快速入门2.1 基础环境搭建 :① 创建Spring Boot 项目② 创建 html资源文件③ 编写Web控制层 2.2 开启安全管理效果测试 :④ 添加 spring-boot-starter-security 启动器⑤ 项目启动测试 三…...

力扣经典150题第五十五题:逆波兰表达式求值

目录 题目描述和要求示例解释解题思路算法实现复杂度分析测试和验证总结和拓展参考资料 题目描述和要求 给你一个字符串数组 tokens&#xff0c;表示一个根据逆波兰表示法表示的算术表达式。请你计算该表达式&#xff0c;并返回一个表示表达式值的整数。 注意&#xff1a; 有…...

C#队列(Queue)的基本使用

概述 在编程中&#xff0c;队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;它遵循FIFO&#xff08;先进先出&#xff09;的原则。在C#中&#xff0c;.NET Framework提供了Queue<T>类&#xff0c;它位于System.Collections.Generic命名空间下&#x…...

预训练模型介绍

一、什么是GPT GPT 是由人工智能研究实验室 OpenAI 在2022年11月30日发布的全新聊天机器人模型, 一款人工智能技术驱动的自然语言处理工具 它能够通过学习和理解人类的语言来进行对话, 还能根据聊天的上下文进行互动,能完成撰写邮件、视频脚本、文案、翻译、代码等任务 二、 为…...

Pandas入门篇(三)-------数据可视化篇3(seaborn篇)(pandas完结撒花!!!)

目录 概述一、语法二、常用单变量绘图1. 直方图&#xff08;histplot&#xff09;2. 核密度预估图&#xff08;kdeplot&#xff09;3. 计数柱状图&#xff08;countplot&#xff09; 三、常用多变量绘图1.散点图(1) scatterplot(2)regplot 散点图拟合回归线(3)jointplot 散点图…...

SpringBoot中阿里OSS简单使用

官方文档:Java跨域设置实现跨域访问_对象存储(OSS)-阿里云帮助中心 1.pom中引入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency> 如…...

websocket简介

服务端推送消息给浏览器 WebSocket 教程 - 阮一峰的网络日志...

Linux的shell外壳

Shell外壳 在计算机领域&#xff0c;“shell”&#xff08;外壳&#xff09;是指一种用户界面&#xff0c;提供了访问操作系统服务的方式。Shell 是用户与操作系统之间的桥梁&#xff0c;它解释并执行用户输入的命令。 Shell 的主要功能包括&#xff1a; 命令解释&#xff1a…...

支付宝支付流程

第一步前端&#xff1a;点击去结算&#xff0c;前端将商品的信息传递给后端&#xff0c;后端返回一个商品的订单号给到前端&#xff0c;前端将商品的订单号进行存储。 对应的前端代码&#xff1a;然后再跳转到支付页面 // 第一步 点击去结算 然后生成一个订单号 // 将选中的商…...

打招呼得不到回复,跟头像还有关系?

现在很多人有个想法,那就是觉得某些公司是不是为了某些目的才往出发的招聘信息啊,其实他们并不需要招聘新员工。 目录 已读不回? 头像很重要 选择自己的精修照片 已读不回? 很有这种可能,但你细心观察会发现,的确有很多大公司,...

网站集约建设报告/百度极速版下载安装

一、什么是栈对齐&#xff1f; 栈的字节对齐&#xff0c;实际是指栈顶指针须是某字节的整数倍。因此下边对系统栈与MSP&#xff0c;任务栈与PSP&#xff0c;栈对齐与SP对齐 这三对概念不做区分。另外下文提到编译器的时候&#xff0c;实际上是对编译器汇编器连接器的统称。 之前…...

魏县网站制作/搜索排名广告营销怎么做

各位同学&#xff0c;大家好。我是郑老师这一讲给大家介绍的主题是“田忌赛马——博弈思维法”。其实&#xff0c;说白了&#xff0c;所谓的博弈思维法就是当我们面对一个问题&#xff0c;有两种或者多种选择的时候&#xff0c;我们要学会在选择之间权衡&#xff0c;平衡其中的…...

wordpress被恶意破解怎么办/移动端关键词排名优化

导语&#xff1a; 本文主要讲述如何将客户端提供的IPv6数据聚合&#xff0c;从而应用于有IPv6查询需求的业务。数据来源本文计算所用的数据来自于客户端提供的IPv6-IPv4的双栈数据源&#xff0c;上报的一条日志记录包括一个IPv6和IPv4地址&#xff0c;根据IPv4地址进行查询&…...

网站开发工程师/seo建设招商

前端开发中还原设计图的重要性毋庸置疑&#xff0c;目前来说应用最多的应该也还是使用rem。然而很多人依然还是处于刀耕火种的时代&#xff0c;要么自己去计算rem值&#xff0c;要么依靠编辑器安装插件转换。 而本文的目标就是通过一系列的配置后&#xff0c;在开发中可以直接使…...

大连建设网官方网站/免费推广途径

一篇介绍字符集、字符编码、以及html中几种易混淆属性的非常好的文章 http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html转载于:https://www.cnblogs.com/kadinzhu/archive/2011/05/15/2046859.html...

江西建设网官方网站/搜狗搜索旧版本

Guava是Google开源的一个工具包,其中的RateLimiter是实现了令牌桶算法的一个限流工具类。 定义注解 @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface RateLimit {// 默认每秒生成的令牌个数double DEFAULT_PERMITSPERSECOND…...