
《大话数据结构》程杰 著
程序设计 = 数据结构 + 算法
什么是数据结构
- 是互相之间存在一种或多种特定关系的数据元素的集合
- 是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科
- 按照视点的不同,分为逻辑结构和物理结构
什么是数据
- 描述客观事物的符号
- 是计算机中可以操作的对象
-
能被计算机识别,并输入给计算机处理的符号集合
- 数值类型(整型、实型等,可以进行数值计算)
- 非数值类型(声音、图像、视频等通过编码手段变成字符数据来处理)
什么是数据元素
- 是组成数据的、有一定意义的基本单位
- 在计算机中通常作为整体处理
- 也被成为记录
比如,在人类中,什么是数据元素呀?当然是人啦!
畜类呢?牛、马、羊、狗、猪等动物当然就是禽类的数据元素。
什么是数据项
- 一个数据元素可以由若干个数据项组成
- 数据项是数据不可分割的最小单位
比如人这样的数据元素,可以有眼、耳、口、鼻、手、脚、嘴等这些数据项,也可以有姓名、年龄、性别、出生地址、联系电话等数据项,具体有哪些数据项,要视你做的系统来决定。不过我们在真正讨论问题时,数据元素才是数据结构中建立模型的着眼点。就像我们谈论一部电影时,是讨论这部电影角色这样的“数据元素”,而不是针对这个角色的姓名或者年龄这样的“数据项”去研究分析。
什么是数据对象
- 是性质相同的数据元素的集合
- 是数据的子集
什么叫性质相同呢,是指数据元素具有相同数量和类型的数据项,比如人都有姓名、生日、性别等相同的数据项。因数据对象是数据的子集,在实际应用中,在不产生混淆的情况下,我们都将数据对象简称为数据。
什么是结构
- 现实世界中,不同数据之间不是独立的
- 存在特定的关系
- 将这些关系称为结构
- 指各个组成部分互相搭配和排列的方式
比如分子结构,就是说组成分子的原子之间的排列方式。
什么是逻辑结构
逻辑结构的四种分类
- 集合结构
- 集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系
- 各个元素是“平等”的,它们的共同属性是“同属于一个集合”,类似数学中的集合

集合结构

线性结构

树形结构

图形结构
逻辑结构是针对具体问题的,是为了解决某个问题,在对问题理解的基础上,选择一个合适的数据结构表示数据元素之间的逻辑关系
什么是物理结构(也称存储结构)
- 实际上就是如何把数据元素存储到计算机的存储器中,并正确反映数据元素之间的逻辑关系
- 存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述
- 存储结构形式:顺序存储和链式储存
顺序储存结构
- 是把数据元素存放在地址连续的储存单元里,其数据间的逻辑关系和物理关系是一致的
- 说白了,就是排队占位,一个萝卜一个坑,都别插队
-
数组就是这个结构

顺序储存结构
链式储存结构
比如银医院等地方,设置了排队系统,每个人去了,先领一个号,等着叫号,叫到时去办理业务或看病。在等待的时候,爱在哪在哪,可以坐着、站着,去外面溜达一圈,只要及时回来就行。你关注的是前一个号有没有被叫到,叫到了,下一个就轮到了。
- 是把数据元素存放在任意的存储单元里
- 这组存储单元可以是连续的,也可以是不连续的
- 用一个指针存放数据元素的地址,通过地址可以找到相关数据元素的位置
逻辑结构是面向问题的,而物理结构就是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。

链式储存结构
数据类型
- 是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
- 在C语言中,按照取值的不同,可以分类两类
- 原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等
- 结构类型:由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干整型数据组成的
抽象数据类型
抽象是指抽取出事物具有的普遍性的本质。它是抽出问题的特征而忽略非本质的细节,是对 具体事物的一个概括。抽象是一种思考问题的方式,它隐藏了繁杂的细节,只保留实现目标所必需的信息。
- 抽象数据类型是指一个数学模型及定义在该模型上的一组操作
- 抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关
一个数据类型定义了:一个数据对象、数据对象中各数据元素之间的关系及数据元素的操作。至于,一个抽象数据类型到底需要哪些操作,这就只能由设计者根据实际需要来定。**抽象数据类型体现了程序设计中问题分抽象和信息隐藏的特性。
总结回顾

数据结构

结构分类