本课程笔记基于
《数据结构》(C语言版) 第2版 (严蔚敏等)
绪论
早期计算机主要用于数值计算
而数据结构研究非数值计算程序设计中的操作对象、关系、操作的学科
概念
①数据
客观事物的符号表示
是所有可以输入到计算机中并被计算机程序处理的符号总成
Ex:实数,字符串,图形,图像,声音
②数据元素
数据的基本单位
通常作为一个整体进行考虑和处理,有些情况下数据元素也称为元素、记录等。数据元素用于完整描述某一个对象
③数据项
组成数据元素、独立含义、不可分割的最小单位
④数据对象
性质相同的数据元素集合,是数据的子集
⑤数据结构
相互之间存在一种或多种特定关系的数据元素集合
也就是 带“结构”的数据元素集合
⑥逻辑结构
描述元素之间的逻辑关系:
与数据储存无关,独立于计算机。
两个要素:数据元素 关系
主要有集合(无关系)、线性结构(一对一)、树结构(一对多)、图结构或网状结构(多对多)
⑦存储结构
顺序存储:元素依次存放连续储存空间中
链式存储:指向其他节点(要附加指针字段
⑧数据类型
一个值的集合和定义在这个值集合的操作总称
⑧抽象数据类型(ADT Abstract Data Type)
抽出实际问题本质,
一般指由用户定义、表示应用问题以及定义在模型上一组操作的总成。
A 数据对象 B 数据对象上的关系 C 数据对象的基本操作集合
于是我们可以得到一个简略的概述
程序 = 数据结构 + 算法
例子①:
学生信息管理系统
操作对象:学生信息(学号、姓名、专业)
操作对象之间的关系:线性关系
操作算法:查询、插入、修改、删除
数据结构:线性表
例子②:
冒泡排序
操作对象:实数
关系:线性关系
算法:排序
Ex:
基础数据结构:
线性结构:线性表、栈、队列,广义表,串,数组
非线性结构:树 图
基本数据处理技术:查找、插入、排序、删除
算法
算法:
为了解决问题规定的有限长操作序列
①有穷
②确定
③可行
④输入
⑤输出
评价准则
①正确
②可读
③鲁棒(完备性)
④高效
算法分析
效率的度量。
①问题规模
输入量,一般用n代表整数
②语句频率
语句重复执行次数
③基本语句
频度最大语句
基本语句重复执行次数是规模n某个函数f(n),算法的时间复杂度记T(n) = O(f(n)) 称之为渐近时间复杂度
时间复杂度一般由嵌套最深的语句频度决定
但也得考虑最好最坏和平均时间复杂度,在线性表(1,4,5,6,8)中,查找某个元素最坏情况是查5词,最好查1次,不方便说明,我们可以引入等可能性,每个元素被查找的可能就是五分之一。查找一万次,对应每个元素平均损耗时间就是一万×五分之一;
空间复杂度,算法需要存储空间的度量S(n) = O(f(n))
比如经典的把线性表数据倒置
int a[n];
for(int i = 0; i < n/2 ; i++)
{
t = a[i];
a[i] = a[n-i-1];
a[n-i-1] = t;
}
只耗费一个储存空间 认为复杂度是O(1)
可以开个新数组
int a[n];
int b[n];
for(int i = 0; i < n; i++)
b[i] = a[i];
for(int i = 0; i < n; i++)
a[i] = b[n - i - 1];
用了一个相同大小的数组,于是空间复杂度是O(n)
第一章课后习题解析
1 在数据结构中,从逻辑上可以把数据结构分成线性结构和非线性结构
2 与数据元素本身的形式、内容、相对位置、个数无关的是数据的C。
A.存储结构
B.存储实现
C.逻辑结构
D.运算实现
3 通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()
不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致.
4
A.数据元素是数据最小单位(数据项才是
B.数据项是数据的基本单位(数据元素才是
C.数据结构是带有结构的各数据项的集合(要有一种或多种特定关系
D.一些表面上不同的数据可以有相同的逻辑结构
5
算法时间复杂度取决于
问题规模+语句频度