教材及习题
数据结构(C语言版)严蔚敏 吴伟明 清华大学出版社
数据结构题集(C语言版) 严蔚敏 吴伟明 清华大学出版社
课程简介
数据结构是一门专业技术基础的课程,课程分析,研究计算机加工数据的特征,数据的逻辑结构,数据的存储结构,数据涉及的算法,以及不同特征数据应用情况。
————————————————————————————————————————————————————
结构化程序 =(算法)+(数据结构)
面向对象的程序 = (算法 + 数据结构)
本课程主要内容
- 线性的数据结构
- 树
- 图
- 查找
- 排序
第一章 绪论
(本章重点:“数据结构”的基本概念,算法和算法设计的要求)
1.1 什么是数据结构
计算机解决问题的一般步骤
建立数学模型:从具体问题中抽象出来
注:比如说鸡兔同笼的问题,先分析这个问题,想到用方程式来解,于是提取x,y为操作对象,用二元一次方程来找到关系,写出解:的步骤
例子:鸡兔共有35个头,94只脚,问鸡兔各有多少只?
法一
解:设兔有x只,则鸡有(35-x)只
4x+2(35-x)=94
4x+70-2x=94
x=12
从而计算出鸡数为35-12=23(只)
法二 是二元一次方程法。
解:设鸡有x只,兔有y只。
则存在着二元一次方程组的关系式
x+y=35
2x+4y=94
解方程式可知兔子数为y=12则可计算鸡数为x=23
数学模型:
- 数值问题(数学方程)
- 非数值问题(集合,线性表,树,图等)
注:更多的非数值问题无法用数学方程描述
例子1:图书馆书目检索系统自动化问题
系统中的数学模型:图书目录卡片
数据模型:线性的数据结构
例子2:人机对弈问题
数据模型:“树”型数据结构
每一次的布局都会由这一个点,从而产生不同的应对方式,但又都是从哪一个根点而来的
例子3:多叉路口交通灯的管理问题
数据模型:“图“”型数据结构
综上可以得出:
数据结构是一门研究 非数值 计算的程序设计问题中计算机的 操作对象(数据)以及它们之间的关系 和 操作 等等的学科。
1.2 基本概念和术语
注:数据元素相当于一本书,每一个记录都是一个数据,数据对象相当于一个班级,班级里的人为数据元素,集合起来成为一个数据对象(计算机系)。
注:想要建立数据元素的结构,就必须找到数据间的关系
注:数据的集合和数据的关系尤其重要
注:顺序结构用来实现线性结构,链式结构是用实现其他的逻辑结构。链式结构在高级语言中是用指针来实现的。
1.3 抽象数据类型的表现和实现
1.4 算法与算法设计
算法:对特定问题求解步骤的一种描述,是指令的有序序列。
算法的五个特性:有穷性(算法程序的运行时间是有限的),确定性,可行性,输入,输出。
算法设计的要求:时间复杂度,空间复杂度。
注:辅助空间是专为比如交换数据的第三方变量准备的空间
本章小结
- 算法与数据结构的基本概率(结构化程序)
- 数据,数据类型,抽象数据类型(D S P)
- 几种基本数据结构(线,树,图)
- 数据的物理结构和逻辑结构(物理结构为存储结构,逻辑结构为不同的数据关系而构成的不同数据结构的集合)
第二章 线性表
(本章重点:线性表的定义,实现,操作,以及应用)
2.1 线性表的类型定义及基本操作
定义了D(数据)和S(关系)还有P(操作)那么我们就可以定义(ADT)抽象数据类型了
序偶关系:
2.2 线性表的顺序表现和实现
线性表的基本操作实现——插入元素
线性表的基本操作实现——删除线性表中的第i个元素
L.Elem是基地址,L.Length是尾地址
线性表的基本操作实现——取(读)线性表L中的第i个元素
线性表的基本操作实现——判断线性表的 i 是否为空
if L.length=0
{ return true;
}else{
return false;
}
线性表的基本操作实现——返回线性表L的长度
status Get(int lenght){
return L.lenght;
}
之所以定义这些基本的操作是因为我们要在这些的基础上实现复杂的操作。
更为复杂的算法:
本讲小结
- 线性表的特点
- 线性表的表现和存储方式
- 顺序存储的线性表基本操作的实现:插入,删除
思考题:在一个有序的顺序表中插入一个元素,使线性表任然有序。