1.1 数据结构的基本概念

1.1 数据结构的基本概念

知识图谱

一、基本概念和术语

1. 数据

数据是信息的载体,是描述客观事物属性的数、字符及所有能被输入到计算机中并被计算机程序识别和处理的符号集合。数据是计算机程序加工的原料。

2. 数据元素

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位

3. 数据对象

数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

4. 数据类型

数据类型是一个值的集合和定义在此集合上的一组操作的总称。

  • 原子类型:其值不可再分的数据类型;
  • 结构类型:其值可以再分解为若干成分(分量)的数据类型;
  • 抽象数据类型:抽象数据组织与之相关的操作。

5. 数据结构

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素都不是孤立的存在,它们之间存在着某种关系,这种数据元素相互之间的关系称为结构(Structure)。数据结构包含三个方面的内容:逻辑结构、存储结构和数据的运算

数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于选定的逻辑结构,而算法的实现依赖于所采用的存储结构。

二、数据结构三要素

1. 数据的逻辑结构

逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。它与数据的存储结构无关,是独立于计算机的。数据的结构为线性结构和非线性结构,线性表是典型的线性结构;集合、树和图是典型的非线性结构。

数据的逻辑结构分类:

  • 集合:结构中的数据元素之间除“同属一个集合”外,别无其它关系;
  • 线性结构:结构中的数据元素只存在一对一的关系;
  • 树形结构:结构中的数据元素之间存在一对多的关系;
  • 图状结构:结构中的数据元素之间存在多对多的关系。

2. 数据的存储结构

存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。它包括数据元素的表示和关系的表示。数据的存储结构是用计算机语言实现的逻辑结构,它依赖于计算机语言。数据的存储结构主要有顺序存储、链式存储、索引存储和散列存储:

  • 顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。其优点是可以实现随机存取,每个元素占用最少的存储空间;缺点是只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。
  • 链式存储:不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。其优点是不会出现碎片现象,能充分利用所有存储单元;缺点是每个元素因存储指针而占用额外的存储空间,且只能实现顺序存储。
  • 索引存储:在存储元素信息时,还建立附加的索引表。索引表中的每项称为索引项,索引项的一般形式是关键字地址。其优点是检索速度快;缺点是附加的索引表额外占用存储空间。另外,增加和删除数据时也要修改索引表,因而会花费较多的时间。
  • 散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希(Hash)存储。其优点是检索、增加和删除节点的操作都很快;缺点是若散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间开销。

3. 数据的运算

施加在数据上的运算包括运算的定义和实现。运算的定于是针对逻辑结构,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。

热门文章

暂无图片
编程学习 ·

Hadoop集群的四个配置文件的常用属性解析

在启动hadoop集群的守护线程时,一定会加载并运行相关的class字节码文件。通过common模块和hdfs模块里的源码可以看到,它们读取了相关的配置文件。hadoop-common-2.7.3-sources.jar下的org.apache.hadoop.conf.Configuration源文件的部分源码:package org.apache.hadoop.conf…
暂无图片
编程学习 ·

Spring核心源码学习笔记-01-XmlFactory

引言最基本的例子,创建一个xmlBeanFactory创建过程中,xmlBeanFactory会对资源文件进行解析,完成beanFactory创建。xmlBeanFactory继承机构:正式开始解析流程:初始化成员变量:XmlBeanDefinitionReader,并传入当前对象,作用于读取资源文件调用方法: this.reader.loadBean…
暂无图片
编程学习 ·

云原生已来,只是分布不均

作者 | 右京 阿里云交付专家 **导读:**云原生是什么?相信不同的人有不同的认识和解读。本文结合大家的各种讨论及项目实践经验,从交付的角度,分享阿里交付专家对云原生的理解,阐述如何构建云原生应用,云原生有哪些关键技术,以及关于云原生落地的思考。 前言 Internet 改…
暂无图片
编程学习 ·

Docker在阿里云上(Centos)下载安装

Docker作用 简单来说就是可以不在考虑项目的运行环境直接转移部署项目,只需要一个镜像文件,甚至可以理解为一个虚拟机(windows的VM软件里安装linux系统)。 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker…
暂无图片
编程学习 ·

冒泡、选择、插入排序算法(c语言)实现

几种常见排序算法的实现 一、冒泡排序 1.百度百科 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没…
暂无图片
编程学习 ·

crontab(定时启动)

crontab:定时任务的守护进程,精确到分,设计秒的我们一般写脚本 -->相当于闹钟日志文件: ll /var/log/cron*编辑文件: vim /etc/crontab 进程:ps -ef | grep crond ==> /etc/init.d/crond restart作用:定时备份,实时备份常见命令参数:usage: crontab [-…
暂无图片
编程学习 ·

2. judgeSquareSum

忘记是自然选择,重要的是抽取学习方法双指针 --判断某一非负整数是否是两数平方和(easy) leecode输入:5 输出:true 5=1^2 + 2^2 思路:等于从一个有序数组找两个数平方和为target,注意的是最大值肯定小于Math.sqrt(target)public boolean judgeSquareSum(int c) {if (c < 0)…
暂无图片
编程学习 ·

WWDC20 苹果发布会

iphone上的ios14亮点不多 主要是桌面小组件 分类app显示 画中画 还有小程序 来电小窗提示和siri ui更新与更加智能 还有汽车智能钥匙 不用带钥匙只需要nfc就可以打开车门与开车 首款支持的汽车是 宝马5系ipad上的ipadOS14 拥有ios14的的全部更新 更加方便的ui以及全局搜索 也…
暂无图片
编程学习 ·

caller和callee的区别

callee caller返回一个函数的引用,这个函数调用了当前的函数。 使用这个属性要注意这个属性只有当函数在执行时才有用 如果在javascript程序中,函数是由顶层调用的,则返回nullfunctionName.caller: functionName是当前正在执行的函数。 function a() {console.log(a.caller)…
暂无图片
编程学习 ·

pandas下-综合练习

综合练习端午节的淘宝粽子交易 端午节的淘宝粽子交易 (1) 请删除最后一列为缺失值的行,并求所有在杭州发货的商品单价均值。 df=pd.read_csv(F:\Datewheel资料\pandas组队学习\Pandas(下)综合练习数据集\端午粽子数据.csv) df.head()df.info()#查看列名 df.columns()注意列名…
暂无图片
编程学习 ·

Day03 数据类型转换 +墨子

学习python的第三天墨子 墨子,名翟,春秋战国之际的思想家,墨家的创始人。 墨子反对不义之战,广收门徒周游列国,在百家争鸣的战国产生了很大的影响。墨子还是一位高明的工匠,谙熟各种机械工程技艺,为了止楚攻宋,曾与名匠公输般(鲁班)进行攻防演练,使对方折服。他还详…
暂无图片
编程学习 ·

屏蔽系统更新

win+r services.msc 改为禁用 恢复 -> 全改为无操作win + r gpedit.msc 找到windows 更新 中的 配置自动更新禁用掉注: 家庭版无法打开gpedit.msc 新建一个文本文档,名字随便取,编辑以下批处理内容,保存后将后缀名改为.bat ,右键使用管理员权限执行: @echo of…
暂无图片
编程学习 ·

什么是量化对冲

什么是量化对冲?“量化对冲”是“量化”和“对冲”两个概念的结合。“量化”指借助统计方法、数学模型来指导投资,其本质是定性投资的数量化实践。“对冲”指通过管理并降低组合系统风险以应对金融市场变化,获取相对稳定的预期年化收益。实际中对冲基金往往采用量化投资方法…
暂无图片
编程学习 ·

JavaScript作用域--总结

JavaScript作用域是什么?咋一问让人确实很懵逼。作用域这个词耳熟能详,但作用域是什么,经常用却不知怎么说起。先从定义上来说,我觉得《不知道的JavaScript》一书说得很清晰,作用域是一套查找变量的规则。查找又从何说起?又是怎么一个查找法?说起这个不得不说JavaScript…
暂无图片
编程学习 ·

ElasticSearch 索引设置总结

在使用ES时,我们常见的就是需要生成一个template来定义索引的设置,分词器,Mapping.本文将基于项目经验来总结一些常用的配置。Index设置index.refresh_interval 配置一个刷新时间,将index buffer刷新到os cache的时间间隔,刷新到os cache的数据才可以被索引到,默认是1s.如…
暂无图片
编程学习 ·

vue3.0全家桶

Vue 3.0 全家桶抢先体验 1.vue: Beta 2.vue-router: Alpha 3.vuex: Alpha 4.vue-class-component: Alpha 5.vue-cli: Experimental support via vue-cli-plugin-vue-next 6.eslint-plugin-vue: Alpha 7.vue-test-utils: Alpha 8.vue-devtools: WIP 9.jsx: WIP 可以看到 Vue 3.0…