《大话数据结构》程杰 著

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

什么是数据结构
  • 是互相之间存在一种或多种特定关系的数据元素的集合
  • 是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科
  • 按照视点的不同,分为逻辑结构物理结构
什么是数据
  • 描述客观事物的符号
  • 是计算机中可以操作的对象
  • 能被计算机识别,并输入给计算机处理的符号集合

    • 数值类型(整型、实型等,可以进行数值计算)
    • 非数值类型(声音、图像、视频等通过编码手段变成字符数据来处理)
什么是数据元素
  • 是组成数据的、有一定意义的基本单位
  • 在计算机中通常作为整体处理
  • 也被成为记录

    比如,在人类中,什么是数据元素呀?当然是人啦!
    畜类呢?牛、马、羊、狗、猪等动物当然就是禽类的数据元素。

什么是数据项
  • 一个数据元素可以由若干个数据项组成
  • 数据项是数据不可分割的最小单位

    比如人这样的数据元素,可以有眼、耳、口、鼻、手、脚、嘴等这些数据项,也可以有姓名、年龄、性别、出生地址、联系电话等数据项,具体有哪些数据项,要视你做的系统来决定。不过我们在真正讨论问题时,数据元素才是数据结构中建立模型的着眼点。就像我们谈论一部电影时,是讨论这部电影角色这样的“数据元素”,而不是针对这个角色的姓名或者年龄这样的“数据项”去研究分析。

什么是数据对象

  • 性质相同的数据元素的集合
  • 是数据的子集

    什么叫性质相同呢,是指数据元素具有相同数量和类型的数据项,比如人都有姓名、生日、性别等相同的数据项。因数据对象是数据的子集,在实际应用中,在不产生混淆的情况下,我们都将数据对象简称为数据。

什么是结构
  • 现实世界中,不同数据之间不是独立的
  • 存在特定的关系
  • 将这些关系称为结构
  • 指各个组成部分互相搭配和排列的方式

    比如分子结构,就是说组成分子的原子之间的排列方式。

什么是逻辑结构
  • 数据对象中数据元素之间的互相关系

逻辑结构的四种分类

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


集合结构

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


线性结构

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


树形结构

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


图形结构

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

什么是物理结构(也称存储结构)
  • 实际上就是如何把数据元素存储到计算机的存储器中,并正确反映数据元素之间的逻辑关系
  • 存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述
  • 存储结构形式:顺序存储链式储存

顺序储存结构

  • 是把数据元素存放在地址连续的储存单元里,其数据间的逻辑关系和物理关系是一致的
  • 说白了,就是排队占位,一个萝卜一个坑,都别插队
  • 数组就是这个结构


顺序储存结构

链式储存结构

比如银医院等地方,设置了排队系统,每个人去了,先领一个号,等着叫号,叫到时去办理业务或看病。在等待的时候,爱在哪在哪,可以坐着、站着,去外面溜达一圈,只要及时回来就行。你关注的是前一个号有没有被叫到,叫到了,下一个就轮到了。

  • 是把数据元素存放在任意的存储单元里
  • 这组存储单元可以是连续的,也可以是不连续的
  • 用一个指针存放数据元素的地址,通过地址可以找到相关数据元素的位置

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


链式储存结构

数据类型
  • 是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
  • 在C语言中,按照取值的不同,可以分类两类
    • 原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等
    • 结构类型:由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干整型数据组成的
抽象数据类型

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

  • 抽象数据类型是指一个数学模型及定义在该模型上的一组操作
  • 抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关

一个数据类型定义了:一个数据对象、数据对象中各数据元素之间的关系及数据元素的操作。至于,一个抽象数据类型到底需要哪些操作,这就只能由设计者根据实际需要来定。**抽象数据类型体现了程序设计中问题分抽象和信息隐藏的特性。

总结回顾


数据结构


结构分类