数据结构与算法(二级培训)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5) 插入操作 ListInsert_Sq ( &L, i, e ) 参数:L :顺序表 , i 插入位置, e 被插入元素; 因为 插入操作对顺序表进行修改,所以用了引用参数&L; i的取值范围在1-ListLength_Sq(L)+1;
功能:在顺序表L的第i个元素之前插入一个新元素e;
6)删除操作 ListDelete_sq ( SqList &L, int i, ElemType &e ) 功能:删除顺序表L的第i个元素,并用e返回
数值问题就是我们平时所说的计算问题,如已知圆 的半径,要求圆的面积。非数值问题就是问题中涉及的 对象不能用数来表达的那些问题。
1)数值问题
例1 已知:游泳池的长length和宽wide,求面积area。 分析: 问题涉及的对象:游泳池的长length 宽wide,面积area; 对象之间的关系:area=lengthwide;
例3、某单位的电话号码簿。
姓名
蔡颖 陈红 刘建平 王小林 张力 ...
电话号码
63214444 63217777 63216666 63218888 63215555
说明:设 A=(a1, a2, ... , ai -1, ai , ai+1, …, an )是一 线性表 1) 线性表的数据元素可以是各种各样的,但同一线 性表中的元素必须是同一类型的; 2) 在表中 ai-1 领先于ai ,ai 领先于ai+1 ,称ai-1 是ai 的直接前趋,ai+1 是ai 的直接后继;
非数值数据之间的结构关系,如何表示,如何存 储,如何处理的问题。
数据结构是一门研究非数值计算的程序设计问题 中计算机的操作对象以及他们之间关系和操作等的学科。
1.2 基本概念和术语
1、数据:一切能够输入到计算机中并被计算机程序处理的信息, 包括文字、表格、图象等,都称为数据。例如,一个个人书库管 理程序所要处理的数据可能是一张如表1-1所示的表格。 2.数据元素 数据元素(也叫节点),它是组成数据的基本单位。在程序中通 常作为一个整体进行考虑和处理。例如,在表1-1所示的个人书 库中,为了便于处理,把其中的每一行(代表一本书)作为一个 基本单位来考虑,故该数据由10个结点构成。 一般情况下,一个结点中含有若干个字段(也叫数据项)。例如, 在表1-1所示的表格数据中,每个结点都有登录号、书号、书名、 作者、出版社和价格等六个字段构成。字段是构成数据的最小单 位。
for(int i=0;i<n;i++)
sum+=b[i];
/* n次 */
return sum ; /* 返回语句执行1次 */
}
要精确地计算f (n)是困难的,引入渐进时间复杂度 在数量上估计一个算法的执行时间。算法时间的度量记 作
T(n)=Ο(f(n))
它表示随问题的规模n的增大,算法执行时间的增长率 和f (n)相同。使用大Ο记号,Ο(f (n))称为算法的渐进时 间复杂度,简称时间复杂度。
1、如何表示节点以及它们之间的关系(相邻接) 2、在计算机中如何存储。 3、相应的操作如何描述。(染色过程)
3)数值问题与非数值问题的比较 数值问题 已知游泳池的长length, 和宽wide,求面积area。
(1)问题涉及的对象:length, wide,area 是实数 可用数值表示 ;
(2)对象之间的关系 :area=lengthwide 可用方程或 函数表示 ;
表1-1 个人书库
3、数据对象:是性质相同的数据元素的集合,是数据 的一个子集。例如,
整数数据对象的集合N={0,±1,±2,……} , 字母数据对象的集合C={‘A’,’B’,……’Z’}。 4、数据结构:是相互之间存在一种或多种特定关系的 数据元素的集合。
数据元素之间的相互关系称为结构。
根据数据结构之间关系,通常有下列4类基本结构。 集合 线性结构 树型结构 图状结构
main(){ int len, wide ,area ; scanf (“%d %d%\n”, &l,&w); area=len*wide ; printf (“area=%d”,area);
}
2)非数值问题 例 2 已知研究生选课情况,安排课程考试的日程。
研究生选课情况表
姓名 张
选修课1 A
选修课1 B
Loc(ai ) = Loc( a1 )+ ( i – 1) k 这里 Loc(ai)是第 i 个元素的存储位置, Loc( a1 ) 是 第1个元素的存储位置,也称为线性表的基址;
线性表的顺序存储的基本操作
1)初始化操作 InitList_Sq( SqList &L) 2 ) 销毁操作 DetroyList _Sq ( SqList &L) { 功能:回收为顺序表动态分配的存储空间 3)置空操作ClearList_Sq ( SqList &L) 功能:若L已存在,重新将其置成空表
I=1; WHILE V 非空 DO
置 NEW 为空集合; FOR 每个 v V DO
IF v 与NEW 中所有的结点间都没有边 从 V 中去掉v;将 v 加入NEW ;
(第I天考试课程为NEW中顶点所对应的课程) 以某种形式输出NEW中顶点所对应的课程; I=I+1;
通过对上个问题的分析,在这个问题的分析解决的 过程中我们遇到了以下几个问题:
2.2 线性表的顺序表示和实现
线性表的顺序存储结构,就是用一组连续的内存 单元依次存放线性表的数据元素。用顺序表存储线性表 时,数据元素之间的逻辑关系,是通过数据元素的存储 顺序反映出来的。
假没线性表中每个数据元素占用 k 个存储单元,那 么,在顺序存储结构中,线性表的第i个元素的存储位 置与第1个元素的存储位置的关系是:
数据结构的形式定义为:数据结构是一个二元组
Data_Structure=(D,S) 其中:D是数据元素的有限集,S是D上的关系的有限集 合。
5、数据的逻辑结构:数据元素之间的逻辑关系。
数据的存储结构:数据结构在计算机中的表示。
本课程中介绍的存储结构有:
顺序存储结构 索引结构
链式存储结构 散列结构
栈的基本操作
1) 初始化操作InitStack(&S) 操作结果:构造一个空栈S;
2) 销毁栈操作DestroyStack(&S) 初始条件:栈S存在。 操作结果:销毁一个已存在的栈;
例如,一个程序的实际执行时间为 2.7n3+3.8n2+5.3。则T(n)=Ο(n3)。
例、求下面程序段的时间复杂度。 s=0; for (j=1;j<=n;j++) for (x=1,k=1;k<=n;k++) { x=x*k; s+=x; }
{++x;a=0;} T(n)=O(1);//常量阶
1.4 算法和算法分析
算法:是对特定问题求解步骤的一种描述,它是指令的 有限序列,其中每一条指令表示一个或多个操作; 它有5个重要特征。 有穷性: 确定性:相同的输入得到相同的输出。 可行性: 输入: 输出 :
算法设计的要求: 正确性:正确的含义,有四个层次。 可读性: 健壮性: 效率和低存储量的要求:
着上不同的颜色; 每一种颜色代表一个考试时间,着上相同颜 色的顶点是可以按排在同一时间考试的课程;
E
课程着色的过程
C
D
A
B
F
红色:a,c ;黄色:b,d ;绿色:e;蓝色:f 即 a,c 可安排在同一时间考试,b,d可安排在同一时间考试;
设G表示课程关系图,集合V包含图G中所有尚未着色的 顶点,NEW表示可以用新颜色着色的顶点集合。
通常的做法是:不考虑不确定的情况,而以算法中
简单操作重复执行的次数作为算法的时间度量。为此,
一个特定算法的运行时间长短就只依赖于问题的规模n, 或者说它是问题规模n的函数f (n)。
【例】求累加求和
int sum(int b[ ],int n){
int sum=0; /* 第1条定义并赋初值语句执行1次 */
3) 在线性表中,除第一个元素和最后一个元素之外, 其他元素都有且仅有一个直接前趋,有且仅有一个直接 后继,具有这种结构特征的数据结构称为线性结构。线 性表是一种线性数据结构;
4) 线性表中元素的个数n称为线性表的长度,n=0时称 为空表;
5) ai是线性表的第i 个元素,称i 为数据元素ai 的序号, 每一个元素在线性表中的位置,仅取决于它的序号;
选修课1 E
王
C
E
F
李
D
F
A
赵
B
F
分析: ◆ 问题涉及的对象:课程;
◆ 课程之间的关系:同一个研究生选修的不能按排在 同一时间内考试;
课程及课程之间的关系可用如下所示的图表示:
E
顶点:表示课程;
边:同一研究生选修的课 C
D
Biblioteka Baidu
A
B
程用边连接
F
课程考试安排问题转化为图的着色问题 用尽可能少的颜色为该图的每个顶点着色,使相邻的顶点
6、数据类型:数据类型是一个值的集合和定义在这个 值集上的一组操作的总称。
7、抽象数据类型(ADT)是指一个数学模型以及定义 在该模型上的一组操作。
抽象数据类型可以用下面的三元组来表示 (D,S,P)
其中,D是数据对象,S是D上的关系集,P是对D的基 本操作集。本书采用以下格式定义抽象数据类型:
ADT 抽象数据类型名{ 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义> }ADT抽象数据名。
一个用高级语言编写的程序在计算机上运行所需要 的时间取决于下列因素:
⑴依据算法所选用的策略。
⑵ 问题的规模。一般情况下,处理的数据量越大,执 行的时间相对也越长。
⑶书写程序的语言。语言的级别越高,其执行效率就越 低。
⑷编译程序所生成目标代码的质量。
⑸ 机器指令执行的速度(硬件的速度)。与硬件的配 置高低有关。
第3章 栈和队列
3.1 栈 3.1 .1 栈的概念 3.1 .2 栈的顺序存储和实现
3.1.1 抽象数据类型栈的定义
栈是限定仅能在表尾一端进行插入、删除操作的线性表
说明:设(a1, a2, a3, …, an ) 是一个栈 1)表尾称为栈顶,表头称为栈底 ,即a1为栈底元素,an为栈顶 元素。 2)在表尾插入元素的 操作称进栈操作,在表头删除元素的操作 称为出栈操作;
for(i=1;i<=n;++i){++x;s+=x;} T(n)=O(n);//线性阶
for(j=1;j<=n;++j) for(k=1;k<=n;++k){++x;s+=x;}
T(n)=O(n2)//平方阶
通常将称Ο(1)为常数阶,Ο(n)为线性阶,O(n2) 为平方 阶。算法还可能呈现的复杂度有:对数阶Ο(log2n),指 数阶Ο(2n)等,不同数量级时间复杂度的关系有:
Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)< Ο(2n)
常见函数的增长率
第2章 线性表
2.1 线性表概念及基本操作 2.2 线性表的顺序存储和实现
2.1 线性表概念及基本操作
例1、数学中的数列(11,13,15,17,19,21)
例2、英文字母表(A, B, C, D, E Z )。
数据结构与算法
第1章 绪论
1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表示与实现 1.4 算法与算法分析
1.1 什么是数据结构
一、计算机解决问题的一般过程。 1、建立数学模型。 2、根据数学模型,设计算法。 3、编写程序,调试直至问题的最终解决。 二、数值问题与非数值问题。
栈
栈
底
顶
(a1, a2, ... , ai -1, ai , ai+1, …, an )
进栈 出栈
f e d c b a
栈操作演示
3)元素按a1, a2, a3, …, an 的次序进栈, 第一个进栈的 元素一定在栈底,最后一个进栈的元素一定在栈顶, 第 一个出栈的元素为栈顶元素;
4)栈的元素具有后进先出的特点,所以栈又称为后进先 出表(LIFO表) 5)由于进栈、出栈操作总是在栈顶一端进行,通常设 置称为栈顶指针的变量指示栈顶的位置。
(3)数据存储:可用程序设计语言中的实型变量存储;
(4)问题求解:用某种计算方法求解;
已知研究生选课情况,安排课程考试的日程。 1)问题涉及的对象:课程 可用课程名表示,不能用数值表示 2)对象之间的关系:
同一研究生选修的课程不能安排在同一 时间考试,同一研 究生选修的课程之间有某种“冲突”关系
——课程之间的这种关系不能用方程或函数表示 3)数据及数据之间的关系如何存储? 4)如何求解 ?