文章目录

  • 启示:数据结构
    • 学习数据机构的重要性
    • 数据结构引发的案例
    • 数据结构的起源
    • 程序设计=数据结构+算法
      • 基础概念与术语
      • 数据
      • 数据元素
      • 数据项
      • 数据对象
      • 数据结构
      • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合
  • 1.5 逻辑结构与物理结构
    • 1.5.1 逻辑结构
      • 1.集合结构
      • 2.线性结构
      • 3.树形结构
      • 4.图形结构
    • 1.5.2 物理结构
      • 1.顺序存储结构
      • 2.链式存储结构
  • 1.6 抽象数据类型
    • 1.6.2 抽象数据类型
  • 1.7 总结回顾

启示:数据结构

是相互之间存在一种或多种特定关系的数据元素的集合

if you give someone a program,you will frustrate them for a day;
if you teach them how to program,you will frustrate them for a lifetime.
(如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子)

学习数据机构的重要性

成为优秀的程序员,考研或者更高层次的为了感受编程之美,理由有很多种.都不妨碍数据结构作为计算机基础课中重要的一环.

数据结构引发的案例

需求要做一个实时用户排队表,但是学生却使用了数据库,每次在表的最后自动递增一个整形数字作为客户编号,但实际上这在内存中做就可以了,通常用数据结构中的’队列结构’是比较好的,用数组虽然也可以,但是又要考虑溢出,又要考虑新增和删除后的数据移动,总的来说不方便.但现在程序语言的开发工具总都有完美的实现了,为什么还需要理解算法的原理呢?这种问题下次别说出去,会在后面的学习中明白的.

数据结构的起源

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

可现实中,我们更多的不是解决数值计算问题,而是需要一些更科学有效的手段(比如表,树,和图等数据结构)的帮助,才能更好的处理问题.

所以,数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科.

程序设计=数据结构+算法

说到数据结构,得先谈谈什么是数据

基础概念与术语

数据

是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据不仅仅包含整形,实数型等数值类型,还包括字符及声音,图像/视频等非数值类型.

比如我们现在常用的搜索引擎,一般会有网页,mp3,图片,视频等分类.mp3就是声音数据,图片当然是图像数据,视频就不用说了,而网页其实指的就是全部数据的搜索,包括最重要的数字和字符等文字数据.(数字1,2,3,歌曲.mp3,视频.mkv等等,网页.html)

也就是说,我们这里说的数据,其实就是符号,而且这些符号必须具备两个前提:

  • 可以输入到计算机中
  • 能被计算机程序处理

对于整形/实型等数值类型,可以进行数值计算

对于字符数据类型,就需要进行非数值的处理.而声音,图像,视频等其实可以是通过编码的手段变成字符数据来处理的.

数据元素

数据元素:组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理.也成为记录.

比如,在人类中,人就是数据元素

数据项

数据项:一个数据元素可以由多个数据项组成

比如人这杨的数据元素,可以有眼,耳,鼻,嘴,手,脚这些数据项,也可以有姓名,年龄,性别,出生地址,联系电话等数据项,具体有哪些数据项,要视你做的系统来决定.

数据项是数据不可分割的最小单位.在本书后面的内容里,我们把数据项定义为最小单位,是有助于我们更好地解决问题.所以,记住数据项是数据的最小单位.但真正讨论问题时,数据元素才是数据结构中的建立数据模型的着眼点.就像我们讨论一部电影时,是讨论这部电影角色这样的’数据元素’,而不是针对这个角色的姓名或者年龄这样的"数据项"去研究分析.

数据对象

数据对象:是性质相同的数据元素的集合,是数据的子集.

什么是性质相同呢,是指数据元素具有相同数量和类型的数据项,比如,还是刚才的例子,人都有姓名,生日,性别等相同的数据项.

既然数据对象是数据的子集,在实际应用中,处理的数据元素有相同性质,在不产生混淆的情况下,我们都将数据对象简称为数据

说了数据的定义,那么数据结构中的结构又是什么呢?

数据结构

结构,简单的理解就是关系,比如分子结构,就是说组成分子的原子之间的排列方式.

严格点说,结构是指各个组成部分相互搭配和排列的方式.在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称为结构.

那数据结构是什么?

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合

在计算机中,数据元素并不是孤立,杂乱无序的,而是具有内在联系的数据集合.数据元素之间存在的一种或多种特定关系,也就是数据的组织形式.

为编写一个’好’的程序,必须分析待处理数据对象的特性及各处理对象之间存在的关系,这也就是研究数据结构的意义所在.

定义中提到了一种或多种关系,具体是什么样的关系,这正是我们下面要讨论的问题

1.5 逻辑结构与物理结构

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

1.5.1 逻辑结构

逻辑结构:是指数据对象中数据元素之间的相互关系.其实这也是我们今后最需要关注的问题.逻辑结构分为以下四种:

1.集合结构

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

2.线性结构

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

3.树形结构

树形结构:树形结构中的数据元素之间存在一种一对多的层次关系

4.图形结构

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

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

  • 将每一个数据元素看做一个结点,用圆圈表示
  • 元素之间的逻辑关系用结点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示

从之前的例子可以看出,逻辑结构是针对具体问题的,是为了解决某个问题,在对问题理解的基础上,选择一个合适的数据结构表示数据元素之间的逻辑关系

1.5.2 物理结构

说完了逻辑结构,再来说说数据的物理结构(很多书中也叫存储结构,可以理解是一回事)

物理结构:是指数据的逻辑结构在计算机中的存储形式

数据是数据元素的集合,那么根据物理结构的定义,实际上是如何把数据元素存储到计算机的存储器中.存储器主要是针对内存而言的,像硬盘,软盘,光盘等外部存储器的数据组织通常用文件结构来描述.

数据的存储结构应正确反映数据元素之间的逻辑关系,这才是最为关键的.如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点.

数据元素的存储结构形式有两种:顺序存储和链式存储

1.顺序存储结构

顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的

这种存储结构其实很简单,说白了,就是排队占位,大家都按照顺序拍好,每个人占一小段空间,大家谁也别插队.我们之前学习计算机语言时,数组就是这样的顺序存储结构.当你告诉计算机,你要建立一个有9个整形数据的数组时,计算机就在内存中找了片空地,按照一个整形所占位置的大小乘以9,开辟一段连续的空间,于是第一个数组数据就放在第一个位置,第二个数据就放在第二个,这样依次摆放.

2.链式存储结构

如果就是这么简单和有规律,一切就好办了.可实际上,总会有人插队,也会有人要上厕所,有人会放弃排队.所以这个队伍当中会添加新成员,也有可能会去掉老元素,整个结构时刻都处于变化中,显然,面对这样时常要变化的结构,顺序存储是不科学的,那怎么办呢?

现在在银行,医院等地方,都有排队系统,你关注的是前一个号有没有被叫到,叫到了,下一个就轮到了

链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的.数据的存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关数据元素的位置

显然,链式存储就灵活的多了,数据存在哪里不重要,只要有一个指针存放了相应的地址就能找到它了

逻辑结构是面向问题的,而物理结构是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机内存中

1.6 抽象数据类型

数据类型:是指一组性质相同的值的集合以及定义在此集合上的一些操作的总称.

数据类型是按照值的不同进行划分的.在高级语言中,每个变量,常量和表达式都有各自的取值范围.类型就用来说明变量或表达式的取值范围和所能进行的操作.

当年那些设计计算机语言的人,为什么会考虑到数据类型呢?

在计算机中,内存不是无线大的,你要计算一个如1+1=2,3+5=8这样的整形数字的加减乘除计算,显然不需要开辟很大的适合小数甚至字符运算的内存空间,于是计算机的研究者们就考虑,对数据进行分类,分出来多种数据类型

在C语言中,按取值不同,数据类型可分为两类:

  • 原子类型:是不可以再分解的基本类型,包括整形,实型,字符型
  • 结构类型:由若干个类型组合而成,是可以再分解的.例如,整形数组是由若干个整形数据组成的

比如,在C语言中声明变量int a,b,这就意味着,在给变量a和b赋值时不能超出int的取值范围,变量a和b之间的运算只能是int类型所允许的运算.高级语言的编程者不管程序最终运行在什么计算机上,目的就是为了实现整型数字的运算,他不关心整数在计算机内部是如何表示的,也不想知道CPU为了实现1+2进行了几次开关操作,这些操作是如何实现的,这些对高级语言来说都不重要.于是我们就要考虑,无论什么计算机,什么计算机语言,都会面临如整型运算,实数运算,字符运算等操作,我们可以考虑把它们都抽象出来.

抽象是指抽取出事物所具有的普遍性的本质.它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括.抽象是一种思考问题的方式,它隐藏了繁杂的细节,只保留实现目标所必需的信息.

1.6.2 抽象数据类型

我们对已有的数据类型进行抽象,就有了抽象数据类型

抽象数据类型(ADT):是指一个数学模型及定义在该模型上的一组操作.抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关.比如整型就是一个抽象数据类型,尽管它在各种机器上的实现方法可能不同,但由于其定义的数学特性相同,在计算机编程来看,它们都是相同的,因此,'抽象’的意义在于数据类型的数学抽象特性.

而且,抽象数据类型不仅仅指那些以及定义且实现的数据类型,还可以是计算机编程者在设计软件程序时自己定义的数据类型,比如我们编写关于计算机绘图或者地图类软件系统,经常使用到坐标,也就是说,总是有承兑出现的x和y,在3D系统中还有z出现,就可以定义一个point的抽象数据类型.

一个抽象数据类型,定义了:一个数据对象,数据对象中各数据元素之间的关系,及对数据元素的操作.至于,一个抽象数据类型到底要哪些操作,这就只能由设计者根据实际需求来定.像马里奥,可能只有两种操作,走和跳,这都根据实际情况来设计.

事实上,抽象数据类型体现了程序设计中问题分解,抽象和信息隐藏的特性.抽象数据类型把实际生活中的问题分解成了多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现作为一个独立的单元,从而使具体实现过程隐藏起来.

为了便于之后讲解中对抽象类型进行规范的描述,我们给出描述抽象数据类型的标准格式:

ADT 抽象数据类型名
Data数据元素之间逻辑关系的定义
Operation操作1初始条件操作结果描述操作2...操作n...
endADT

1.7 总结回顾

由以上概念,给出了数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合

同样是结构,从不同角度讨论,会有不同的分类

最后,我们介绍了抽象数据类型及它的描述方法,为之后的课程打下基础

大话数据结构 摘录 第一章 数据结构绪论相关推荐

  1. 读书笔记-《大话数据结构》第一章数据结构绪论

    1.3数据结构的起源 数据结构:是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 程序设计=数据结构+算法 1.4基本概念和术语 1.4.1数据:描述客观事物 ...

  2. 《数据结构(C语言版)》严巍敏课件~第一章:绪论

    <数据结构(C语言版)>严巍敏课件-第一章:绪论

  3. 数据结构笔记(王道考研) 第一章:绪论

    大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...

  4. 数据结构c语言版第一章答案,《c语言数据结构》第一章概论自测题答案

    <<c语言数据结构>第一章概论自测题答案>由会员分享,可在线阅读,更多相关<<c语言数据结构>第一章概论自测题答案(4页珍藏版)>请在人人文库网上搜索. ...

  5. TensorFlow 2.0深度学习算法实战 第一章 人工智能绪论

    第一章 人工智能绪论 1.1 人工智能 1.1.1 人工智能 1.1.2 机器学习 1.1.3 神经网络与深度学习 1.2 神经网络发展简史 1.2.1 浅层神经网络 1.2.2 深度学习 1.3 深 ...

  6. 翻译不是一个有效的路径_【第一章:绪论】静态时序分析圣经翻译计划

    本文由知乎赵俊军授权转载,知乎主页为https://www.zhihu.com/people/zhao-jun-jun-19 众所周知,静态时序分析是IC工程师必备知识点,也是秋招中笔试面试的高频考点 ...

  7. 数据结构思维 第一章 接口

    第一章 接口 原文:Chapter 1 Interfaces 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 本书展示了三个话题: 数据结构:从 Java 集合框架(JCF)中的 ...

  8. 第一章 数据结构与算法-前言

    Hello,I'm 郭永峰,一名IT从业者,也是一名Java Sharer.Teacher.欢迎添加微信号或者QQ号,一起学习交流,微信与QQ同号(1030103135).目前在腾讯课堂也出了一些教程 ...

  9. 数据结构与算法(第一章 数据结构的基本概念 )

    说起数据结构与算法,他们之间的关系是怎么样的呢?某位dalao曾经这样说过: The relationship between the data structures and algorithms l ...

最新文章

  1. 【 C 】深入了解递归
  2. JAVA虚拟机内存不够解决办法
  3. 注册MSComm方法
  4. 国内唯一,阿里云挺进 Forrester 数据流分析报告“强劲表现者”象限
  5. 移动端去除横向滚动条
  6. 星外主机销售系统源码_业务员大客户销售订货订单管理系统源码开发外包解析...
  7. Java学习笔记1.2.2 使用Java集成开发环境 - IntelliJ IDEA
  8. Learning Scrapy笔记(五)- Scrapy登录网站
  9. 剑指offer.从未到头打印链表
  10. apple 个人或公司账号(99$)升级企业账号(299$)
  11. 单体内置对象_第五章 单体内置对象
  12. Oracle 闪回特性(Flashback Query、Flashback Table)
  13. net.sf.json.JSONObject.fromObject()方法的一个小秘密
  14. This computer does not support Intel Virtualization Technology (VT-x) or it is being exclusively use
  15. 私服玉兔元素服务器在哪个网站,1.85玉兔元素服务端
  16. java调起本地摄像头,利用openCV进行人脸识别(一)
  17. Ubuntu安装Clang\Clang版本切换
  18. 有才而性缓,有智而气和
  19. moses 编译_Moses 训练步骤
  20. 【AIML系列-1】人工智能标记语言——基本内容教学

热门文章

  1. Intellij idea 解决no artifacts warnings和部署后报404问题:创建Artifact
  2. 用c语言构造真值表,构造命题公式的真值表--biaobiao88
  3. 推荐一个免费GIF动图下载的网站
  4. 计算机安全措施方案,计算机安全应急预案
  5. javascript匿名函数的各种执行形式
  6. FBI找到邪恶帮手?据称可分分钟破解iPhone
  7. 2018年 存储趋势预测
  8. 基于微信维修报修物业小程序系统设计与实现 开题报告
  9. 刷机相关的Android的安全
  10. 淘客基地:拾牛IOS版更新至1.0.5版本