数据结构第二章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 数据对象在计算机中的组织方式
逻辑结构
物理存储结构
• 数据对象必定与一系列加在其上的操作相关联
• 完成这些操作所用的方法即为算法
1.2 什么是数据结构
四种基本逻辑结构
(a) 集合结构
(b) 线性结构
(c) 树形结构
(d) 图状结构
1.2 什么是数据结构
数据的存储结构
Ex:四个连续的元素( a0, a1, a2, a3 )的数据结构
1.1 算法和数据结构
数据结构(Data Structures)是一门研究非数值计算的 程序设计问题中的操作对象,以及它们之间的关系和操作等 相关问题的学科。 算法(Algorithms)是解决特定问题求解步骤的描述,在 计算机中表现为指令的有限序列,并且每条指令表示一个或
多个操作。
例1:图书摆放问题
逻辑结构:
a0 → a1 →a2 →a3
存储结构
顺序表: 链接表:
a0
a1
a2
a3
1.2 什么是数据结构
数据结构的操作
逻辑结构描述了数据的静态性,操作给出了数据被使用的 方式,即数据的动态性。常见的操作有: (1) 创建操作——创建一个数据结构; (2) 插入操作——在数据结构中插入一个新元素;
(3) 删除操作——将数据结构中的某个指定元素的删除;
二维数组?一维数组?十字链表?
数据对象集:一个M*N的矩阵AM*N=(aij) (i = 1, …, M; j = 1, …,
N)由M*N个三元组<a, i, j>构成,其中a是矩阵元素的值,i和j分
别是元素所在的行、列号。 操作集:对于任意矩阵A、B、C Matrix,以及整数i, j, M, N
操作2:如何查找指定的图书?
先确定类别,再二分查找!
可行!
• 问题:分区空间大小如何分配?分区粒度多细?
启示
wenku.baidu.com
• 例1告诉我们:
解决问题方法的效率与数据的组织方式有关
例2:顺序打印1到N之间的全部正整数
• 循环实现
void PrintN ( int N )
{ int i;
• 递归实现
void PrintN ( int N )
数据结构A
南京邮电大学计算机学院
计算机科学与技术系 戴华 daihua@njupt.edu.cn 2016/7/24
课程的主要内容、考核方式
主要内容:讨论线性表、栈和队列、数组和字符串、
二叉树和树、搜索树、散列表、图和文件等常见的数 据结构.
考核方式:
闭卷考试 期末占70%+平时占30%
void main() { int N; cin>> N; PrintN(N); } 递归实现
循环实现
N = 100
N = 100000
启示
• 例1告诉我们:
解决问题方法的效率与数据的组织方式有关
• 例2告诉我们:
解决问题方法的效率与空间的利用效率有关
例3:多项式求值
方法1:double f1 ( int n, double a[], double x) {
(4) 更新操作——修改数据结构中某个指定元素的值; (5) 搜索操作——在数据结构中搜索满足一定条件的元素; (6) 遍历操作——按照某种次序,系统的访问数据结构的各 个元素,使得每个元素恰好被访问一次。
……
1.3 抽象数据类型 (Abstract Data Type)
•
1.2.4 数据结构的运算 数据类型
------ Sartaj Sahni,《数据结构、算法与应用》
• •
数据结构是ADT(抽象数据类型Abstract Data Type)的 物理实现。
------ Clifford A.Shaffer,《数据结构与算法》
数据结构(data structure)是计算机中存储、组织数据 的方式。通常情况下,精心选择的数据结构可以带来最
{ if ( N ) { PrintN ( N – 1 ); cout<< N<<endl; } return ; }
for ( i = 1; i < N; i ++) {
cout<< i<<endl; } return ; }
N = 100, 1000, 10000, 100000, …
例2:顺序打印1到N之间的全部正整数
1.5.1 算法及其性能标准
算法(Algorithm):是解决特定问题求解步骤的描述,在计算机中 表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的五个特征:
(1)输入 (2)输出 有零个或多个输入 至少产生一个输出
(3)确定性 每一条指令都有确切的定义,没有二义性 (4)可行性 可以通过已经实现的基本运算执行有限次来实现 (5)有穷性 算法必须总能在执行有限步之后终止
方法2:double f2 ( int n, double a[], double x) {
int i ; double p = a[n]; for ( i = n; i > 0; i--) p = a[i - 1] + x*p ; return p;
}
例3:多项式求值
目标多项式: f ( x )
int i ; double p = a[0]; for ( i = 1; i <= n; i++) p += a[i] * pow(x, i); return p;
}
f(x) = a0 + a1x + … + an-1xn-1 + anxn
f(x) = a0 + x*(a1 + x*(… ( an-1 + x*(an))…))
1.5.2 算法的时间复杂度
Ex: 程序1.3 求一个数组元素的累加之和 float sum(float list[],const int n) { float tempsum=0.0; for(int i=0;i<n;i++) tempsum+=list[i]; return tempsum; } 程序语句
Matrix Add(Matrix A, Matrix B):若A和B的行、列数相等,则返回矩阵 C=A+B,否则返回错误标志; Matrix Multiply(Matrix A, Matrix B):若A的列数等于B的行数,则返回矩阵 C=A*B,否则返回错误标志; 先按行加?先按列加?C++?Java? ……
平时成绩:出勤、课堂表现、作业情况、实
验情况及实验报告等
上机实验
实验一
线性表的基本运算及多项式的算术运算
实验二
二叉树的基本操作及哈夫曼编码和译码系统的实现
实验三
图的基本运算及飞机换乘次数最少问题
实验四
基本内排序算法的验证和性能比较、改进快速排序算法
教材及主要参考书 1、教材 《数据结构——使用C++语言描述》(第2版),陈慧 南,人民邮电出版社,2008年
新进一本《三体》……
需要移动大量图书 ,才能腾出空的位 置!
操作2:如何查找指定的图书?
二分查找!
可行!
例1:图书摆放问题 方法3:在书架中划分区域,各分区指定摆放 某类图书;并且,在每个分区内,按照书名的 首字母拼音顺序摆放。
操作1:新书如何插入?
可行!
先定类别,二分查找位置,再移出空位,插入新书
Matrix Create(int M, int N): 返回一个M*N的空矩阵; int GetMaxRow(Matrix A):返回矩阵A的总行数; int GetMaxCol(Matrix A):返回矩阵A的总列数;
ElementType GetEntry(Matrix A, int i, int j):返回矩阵A第i行、第j列元素;
• 例2告诉我们:
解决问题方法的效率与空间的利用效率有关
• 例3告诉我们:
解决问题方法的效率与算法的巧妙程度有关
复杂问题实例
• Ex: Network Connectivity (网络连通性)
1. 如何存储和表示 网络的结构?
2. 如何确认两个节
点的连通性,最 短路径是什么? 3. ……
A
B
1.2 什么是数据结构
2、主要 参考书
(1)《数据结构(用面向对象方法及C++描述)》,殷 人昆等,清华大学出版社 (2)Data Structures,Algorithms andApplications in C++, Sartaj Sahni, 机械工业出版社 (3)Data Structures with C++, Wlliam Ford, 清华大 学出版社
MAXN
i 0
i ( x)
i
f (1.1) i (1.1)i
i 0
10
clock_tbegin, end; doubleduration; #defineMAXN 120000 //多项式最大项数 int main() { int i; doublea[MAXN]; //存储多项式的系数 for (i = 0; i < MAXN; i++) a[i] = (double) i; begin = clock(); f1(MAXN - 1, a, 1.1); end = clock(); printf("ticks1 = %f\n", (double) (end - begin));
优效率的算法。
-------- 中文维基百科
1.1 算法和数据结构
数据结构和算法是计算机学科的基础之一,更是 软件技术的基础。
“Algorithms + Data Structures = Programs ” ─ Niklaus Wirth • 1984 Turning Award • Pascal 之父
f (1.1)
120000
i 0
i (1.1)i
begin = clock(); f2(MAXN - 1, a, 1.1); end = clock(); printf("ticks2 = %f\n", (double) (end - begin));
}
启示
• 例1告诉我们:
解决问题方法的效率与数据的组织方式有关
1.5 算法分析的基本方法
内容提要
1. 算法及其性能分析 2. 算法的时间复杂度 3. 渐近时间复杂度 4. 算法的空间复杂度
课堂提要
第1章 基础知识 1.1 算法和数据结构 1.2 什么是数据结构 1.3 数据抽象和抽象 数据类型 1.4 描述数据结构和 算法 1.5 算法分析的基本 方法
1.5 算法分析的基本方法
1.5 算法分析的基本方法
算法的时间复杂度:程序运行从开始到结束所需的时间
手柄转动
的次数!
1.5 算法分析的基本方法
1.5.2 算法的时间复杂度 如何度量算法的时间复杂度? 程序步:
一个程序步是指在语法上或语义上有意义
的程序段,该程序段的执行时间与具体执行环 境无关。
1.5 算法分析的基本方法
数据对象集
数据集合相关联的操作集
• 抽象:描述数据类型的方法不依赖于具体实现
与存放数据的机器无关
与数据存储的物理结构无关 与实现操作的算法和编程语言均无关
―抽象数据类型‖只描述对象集和相关操作集“是什么” ,并不涉及“如何做到”的问题
例4:“矩阵”的抽象数据类型定义
• • •
类型名称:矩阵(Matrix)
例1:图书摆放问题
图书摆放问题中的2个常用操作:
操作1:新书如何插入?
操作2:如何找到指定的图书?
例1:图书摆放问题 方法1:随意摆放
操作1:新书如何插入?
Easy!
哪里有空位就放哪里,一步到位。
操作2:如何找到制指定的图书?
例1:图书摆放问题 方法2:按书名的拼音首字母顺序摆放
操作1:新书如何插入?
一次执行所需 执行频度 程序步数 程序步数 float tempsum=0.0; 1 1 1 for(int i=0;i<n;i++) 1 n+1 n+1 tempsum+=list[i]; 1 n n return tempsum; 1 1 1 2n+3 总程序步数
1.5 算法分析的基本方法
1.5.1 算法及其性能标准 2. 算法描述方法
算法可以自然语言、流程图或程序设计语言描述。
3. 算法的性能标准
(1)正确性:执行结果应当满足预先规定的功能和性能要求。
(2)简明性:应当思路清晰、层次分明、易读易懂。
(3)健壮性:当输入不合法数据时,应能做适当处理,不至于 引起严重后果。 (4)效 率: 有效使用存储空间和有高的时间效率。 (5)最优性:解决同一个问题可能有多种算法,应进行比较, 选择最佳算法。
准备:复习C++的相关内容,如指针、模板等。
第1章 基础知识
内容提要
1.给出数据结构的概念 2.介绍数据抽象和抽象数据类型 3.说明数据结构和算法描述的方法
4.介绍算法和算法分析的基本方法
数据结构定义
•
数据结构是数据对象,以及存在于该对象的实例和组成 实例的数据元素之间的各种联系。这些联系可以通过定 义相关的函数来给出。