第1章 绪论
1.1 数据结构的研究内容
N.沃思(Niklaus Wirth)教授提出:
程序=算法+数据结构
电子计算机的主要用途
早期:主要用于数值计算
后来:非数值计算,复杂的具有一定结构关系的数据
- 书目自动检索系统(线性表)
- 人机对奕问题(树)
- 文件系统的系统结构图(树)
- 多叉路口交通灯管理问题(图)
- 六度空间理论(图)
求解非数值计算的问题
设计出合适的数据结构及相应的算法,即:首先要考虑对相关的各种信息如何表示、组织和存储?
数据结构的研究内容为
研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作。
数据结构创始人–高德纳(Donald Ervin Knuth)
1938年出生,斯坦福大学计算机系教授–36岁图灵奖
Bill Gates:“如果你学会了这本书,就直接给微软发个简历!”
李开复建议(专研+潜力+创新)
练内功不要只花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目,学好基础课程:离散数学、数据结构、计算机组成原理、操作系统、计算机网络、编译原理、数据库等,试试Knuth的The Art of Computer Programming的题目
多实战,通过编程的实战,积累经验、内化知识,建议大家争取在大学四年中积累编写十万行代码的经验
数据结构所处的地位
介于数学、计算机硬件和计算机软件三者之间的一门核心课程
数据结构在计算机学科中的地位
学习目标
- 能够分析研究计算机加工的对象的特性,获得其逻辑结构,根据需求,选择合适存贮结构及其相应的算法;
- 学习一些常用的算法;
- 复杂程序设计的训练过程,要求编写的程序结构清楚和正确易读;
- 初步掌握算法的时间分析和空间分析技术。
1.2 基本概念和术语
1.数据(data)
所有能输入到计算机中去的描述客观事物的符号
- 数值性数据
- 非数值性数据(多媒体信息处理)
2、数据元素(data element)
数据的基本单位,也称结点(node)或记录(record)
3、数据项(data item)
有独立含义的数据最小单位,也称域(field)
三者之间的关系:数据 > 数据元素 > 数据项
例:学生表 > 个人记录 > 学号、姓名……
4、数据对象(Data Object)
相同特性数据元素的集合,是数据的一个子集
- 整数数据对象:N = { 0,1, 2, … }
- 学生数据对象:学生记录的集合
5、数据结构(Data Structure)
是相互之间存在一种或多种特定关系的数据元素的集合
数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
数据结构的两个层次
逻辑结构:数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。
存储结构(物理结构):数据元素及其关系在计算机存储器中的存储方式。
- 逻辑结构
划分方法一
线性结构:有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个后继。例如:线性表、栈、队列、串
非线性结构:一个结点可能有多个直接前趋和直 接后继。例如:树、图
划分方法二
集合:数据元素间除“同属于一个集合”外,无其它关系
线性结构:一个对一个,如线性表、栈、队列
树形结构:一个对多个,如树
图形结构:多个对多个,如图
- 存储结构
顺序存储结构:借助元素在存储器中的相对位置来表示数据元素间的逻辑关系。 链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系。
顺序存储
链式存储
数据的运算
逻辑结构和存储结构都相同,但运算不同, 则数据结构不同。例如,栈与队列
对于一种数据结构, 常见的运算有:插入、删除、修改、查找、排序
总结