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

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


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

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


1. 基本概念和术语

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

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

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

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

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

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

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

什么叫性质相同?数组

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

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

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

逻辑结构与物理结构

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

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

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

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

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

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

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

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

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

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

    • 数据元素的存储关系并不能反映其逻辑关系, 所以须要一个指针存放数据元素的地址, 这样能够经过地址找到相关的数据元素.

抽象数据类型

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

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

补图

相关文章
相关标签/搜索