第一章 数据结构绪论 (大话数据结构)

      由于之前看完程杰的大话设计模式, 感悟颇深, 感觉写法很特别, 很容易让初学者易懂, 所以就又看了他的另一本书, 大话数据结构. 不过这本书整体看下来, 还是有些难度, 尤其是后面的排序 查找 等涉及算法的部分. 不过还是硬啃了一下. 把书中重点的地方做了笔记, 方便以后复习. 这次读大话数据结构, 还不够深入, 只是把概念做简单的了解, 并没有深入的学习算法底层的原理, 只是了解这个东西且会用. 所以这篇文章的目的也是记录我学习过程中感觉是重点的一些概念. 后续有时间会在读一遍并深入学习一下.


数据结构: 是一门研究非数值计算的程序设计问题中的操作对象, 以及它们之间的关系和操作等相关问题的学科. 是相互之间存在的一种或多种特定关系的数据元素的集合.

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


1. 基本概念和术语

数据: 是描述客观事物的符号, 是计算机中可以操作的对象, 是能被计算机识别并输入给计算机处理的符号集合.

  • 如整型 实型等数值类型, 还包括字符 声音 图像 视频等非数值类型.

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

  • 如在人类中的人.禽类中的鸡鸭鹅.

数据项: 一个数据元素可以由若干个数据项组成, 数据项是数据不可分割的最小单位.

  • 如人的眼鼻耳嘴. 但是真正讨论问题时, 数据元素才是数据结构中建立数据模型的着眼点,就好像讨论一部电影是讨论电影角色这样的数据元素而不是数据元素这个角色的年纪/性别.

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

什么叫性质相同?

  • 是指数据元素具有相同数量和类型的数据项, 如人都有姓名/生日/性别等一样的数据项, 一个人不可能没有性别.既然数据对象是数据的子集, 在实际应用中, 处理的数据元素通常具有相同性质, 在不产生混淆的情况下, 我们都将数据对象简称为数据.

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

  • 简单理解就是关系, 如分子的结构, 就是说组成分子的原子之间的排列方式. 严格点说, 结构是指各个组成部分相互搭配和排列的方法. 不同数据元素之间不是独立的, 而是存在特定的关系, 我们将这些关系称为结构.

逻辑结构与物理结构

  • 按照视点的不同, 数据结构分为逻辑结构和物理结构.
  • 逻辑结构是面向问题的, 而物理结构就是面向计算机的, 其基本目标就是将数据及其逻辑关系存储到计算机的内存中.

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

  1. 集合结构: 集合结构中的数据元素除了同属于一个集合外, 它们之间没有其他关系.

    • 各个数据元素是平等的, 它们的共同属性是 同属于一个集合. 数据结构中的集合关系类似于数学中的集合.

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

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

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

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

  • 实际上就是如何把数据元素储存到计算机的储存器中. 储存器主要是针对内存而言, 像硬盘/软盘/光盘等外部储存器的数据组织通常用文件架构描述.
  1. 顺序存储结构: 是把数据元素存放在地址连续的存储单元里, 其数据间的逻辑关系和物理关系是一致的.

    • 数组就是这样的存储结构.
  2. 链式存储结构: 是把数据元素存放在任意的存储单元里, 这组存储单元可以是连续的, 也可以是不连续的.

    • 数据元素的存储关系并不能反映其逻辑关系, 因此需要一个指针存放数据元素的地址, 这样可以通过地址找到相关的数据元素.

抽象数据类型

  • 抽象数据类型标准格式:

  1. 数据类型: 是指一组性质相同的值的集合及定义在此集合上的一些操作的总称.
  • 数据类型是按照值的不同进行划分的. 在高级语言中, 每个变量/常量和表达式都有各自的取值范围.类型就用来说明变量或表达式的取值范围和所能进行的操作. 如int a 再给他赋值时不能超出int的取值范围.
  • 抽象是指抽取出事物具有的普遍性的本质. 他是抽出问题的特征而忽略非本质的细节, 是对具体事物的概括.抽象是一种思考问题的方式, 他隐藏了繁杂的细节, 只保留实现目标所必须的信息.
  1. 抽象数据类型: 是指一个数学模型及定义在该模型上的一组操作.
  • 对已有的数据类型进行抽象, 就有了抽象数据类型.
  • 抽象数据类型的定义仅取决于它的一组逻辑特性, 而与其在计算机内部如何表示和实现无关.
  • 比如在计算机中不管是大型机/小型机/PC/平板电脑甚至手机都拥有 "整型" 类型, 那么整型其实就是一个抽象数据类型, 尽管它在不同的地方实现方法不同, 但由于定义的数学特性相同, 在计算机编程者看来, 他们是相同的. 因此抽象的意义在于数据类型的数学抽象特性. 而且抽象数据类型不仅仅指那些定义好的, 也可以是编程者自己定义的数据类型.
  • 事实上, 抽象数据类型体现了程序设计中问题分解/抽象和信息隐藏的特性. 抽象数据类型把实际生活中的问题分解为多个小规模的容易处理的问题, 然后建立一个计算机能处理的数据模型, 并把每个功能模块实现细节隐藏起来.

补图

转载于:https://juejin.im/post/5b0d12e36fb9a00a2f5db6e0

你可能感兴趣的:(第一章 数据结构绪论 (大话数据结构))