数据结构-考研课程总结
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(a1,a2,….,ai,…..,an)
注意: 1.数据元素ai是一个抽象的符号 2. ai可取各种数据类型 3. 一般情况下,同一线性表中的元素具有相同的数据类型 4. i是元素的序号 (1<=i<=n) 2.逻辑特征:仅有一个开始结点和一个终端结点,并且所有结
点都最多只有一个直接前趋和一个直接后继
2018/5/19
数据结构
9
第一章 概 论
1.3 算法描述
逻辑结构上定义的基本运算在存储结构上的 实现是通过算法来描述的。
一、算法定义
算法是对特定问题求解步骤的一种描述,
由有限的指令序列构成,其中每一条指令表示 一个或多个操作。
2018/5/19
数据结构
10
二、算法应具有的五个特性:
(1)输入
(2)输出 (3)有穷性 (4)确定性 (5)可行性
数据结构
2018/5/19
数据结构
1
讲课安排:
•串讲全书内容 •典型习题分析
•前年、去年考题分析
2018/5/19
数据结构
2
第一章 概 论
•数据结构及其概念 • 如何评价一个算法
2018/5/19
数据结构
3
第一章 概 论
1.1 数据结构的概念
一、术语
1.数据(Data):
是信息的载体,能被计算机识别、存储、加工处理。 2.数据元素(Data Element):
2018/5/19 数据结构 13
第一章 概 论
三、(渐进)时间复杂度(O(f(n)) 当问题的规模n趋向无穷大时,时间复杂度T(n)的数量 级(阶)称为算法的渐近时间复杂度,简称时间复杂度 四、最坏时间复杂度
依据数据集中可能出现的最坏情况估算出的时间复杂度 称为最坏时间复杂度。
五、平均时间复杂度
(2)执行算法所耗费的时间 (3)执行算法所耗费的空间
(4)可读性
(5)健壮性
2018/5/19
数据结构
12
第一章 概 论
二、算法的时间复杂度
•一个算法所耗费的时间:该算法中每条语句的执行时间之和。
•每条语句的执行时间:该语句的执行次数乘以该语句执行一次 所需时间。
•频度:语句重复执行的次数
•算法的时间耗费T(n)=每条语句的执行的时间 =(语句频度×语句执行一次所需时间) =语句频度 •算法的时间复杂度:就是算法的时间耗费T(n)
2018/5/19 数据结构 18
二、线性表的运算
线性表的常见基本运算包括:
(1)置空表SETNULL(L)
(2)建表CREATLIST(L) (3)求表长LENGTH(L)
(4)取结点GET(L,i)
(5)定位LOCATE(L,x) (6)插入INSERT(L,x,i) (7)删除DELETE(L,i) 复杂的运算可以由这些基本运算组合来实现
2018/5/19
数据结构
16
第二章 线性表
本章要学习的主要内容 1、线性表的逻辑结构及基本运算
2、线性表的顺序存储结构
3、线性表的链式存储结构:单链表、循环链表、双 链表、静态链表 4、顺序表和链表的比较
2018/5/19
数据结构
17
2.1 线性表的概念及运算
一、逻辑结构 1.描述: 线性表是由n (n>=0)个数据元素(点)a1,a2,….,ai,….,an 组成的有限序列。其中,数据元素的个数n定义为表长。 当n=0时称为空表,非空的线性表(n>0)记为:
数据结构
22
顺序表的特点:
用物理位置上的邻接关系表示结点间的逻辑关系 顺序表的优点: (1)无须增加额外的存储空间表示结点间的逻辑关系。 (2)可以方便地随机存取表中任一结点。 顺序表的缺点: (1)插入和删除运算不方便,通常须移动大量结点,效率 较低。 (2)难以进行连续的存储空间的预分配,尤其是当表变化 较大时。
数据的基本单位, 即数据集合中的一个个体。也称元素、
结点、顶点、记录 数据元素由数据项(data item)组成 数据项:是具有独立含义的最小标识单位 关键字(key):唯一能识别一个数据元素的数据项。
2018/5/19 数据结构 4
3、数据类型(Data Type): 是具有相同性质的计算机数据的集合及在这个 集合上的一组操作。 原子数据类型(atomic data type)
一个算法有零个或多个的输入,它们是算法
开始前给出的最初量 一个算法至少有一个输出,它们是同输入 有某种关系的量 每一条指令的执行次数必须是有限的 每一条指令必须有确切的含义,无二义性 每条指令的执行时间都是有限的。
2018/5/19
数据结构
11
第一章 概 论
1.4 算法分析 一、算法评价五要素
(1)正确性
Maxsize-1
2.2 线性表的顺序存储
二、 顺序表上的基本运算(实现) SETNULL(L): (*L).last = -1 LENGTH(L): (*L).last+1
GET(L,i):
LOCATE(L,x)
(*L).data[i-1]
INSERT(L,x,i)
DELETபைடு நூலகம்(L,i)
2018/5/19
an
last 说明: (1).datatype是表中的数据类型,依具体情况而定 (2).向量下标可以看作表中结点的相对地址 (3). 顺序表的长度为last+1 (4).结点的引用:定义一个顺序表:sequenlist *L; (*L).data[0]a1 (*L).data[1]a2 .... 2018/5/19 21 数据结构 (*L).data[(*L).last] an
2018/5/19
数据结构
20
4、顺序表的描述: typedef int datetype; #define maxsize 1024 typedef struct { datatype data[maxsize]; int last; } sequenlist;
0 1
a1 a2
. . .
(*L).last
2018/5/19
}
数据结构
30
2.3.2 单链表上的基本运算(实现)
尾插法建表:将新结点插入到当前链表的表尾(需引入r)
Head
a
b
r
c ^ s r d ^
•不带头结点的尾插法:插入时,第一个结点的处理与其 它结点的处理有区别。
结束时,空表和非空表的处理有区别。
•带头结点的尾插法:1)链表第一个位置上的操作与其 它位置上的操作相一致。 2)空表和非空表的处理相一致。
2018/5/19 数据结构 25
typedef int datatype; typedef struct node {datatype data; struct node *next; } linklist; linklist *head, *p; 说明: •区分指针变量和结点变量 :p ,*p •结点的动态分配和释放
分为稠密索引和稀疏索引 •散列存储方法:确定散列函数后,根据结点的关键字直接 计算出该结点的存储地址。
2018/5/19
数据结构
7
关系: •逻辑结构是从逻辑关系上描述数据,与存储无关,是独立于 计算机的。 •逻辑结构是从具体问题抽象出来的数学模型 •存储结构是逻辑结构用计算机语言的实现(亦称映象)
2018/5/19 数据结构 19
2.2 线性表的顺序存储
一、顺序表 1、顺序存储:将线性表的结点按逻辑次序依次存放在一组地 址连续的存储单元里。 2、顺序表:采用顺序存储方法存储的线性表称顺序表。
3、存储地址的计算:
LOC(ai)=LOC(a1)+(i-1)*c 1<=i<=n
这里:LOC(a1)为结点a1的存储起址(基地址),c为 每个结点所占存储单元数。 顺序表是一种随机存取结构
2
c
1
b
a ^
s
d
优点:算法简单 缺点: 链表中结点次序和输入次序相反
2018/5/19 数据结构 27
Linklist *CREATLIST( )
{ char ch; linklist *head,*s; head=NULL; ch=getchar( );
2
Head
c
1
b
a ^
s
d
while (ch!=‘$’) {s=malloc(sizeof(linklist)); s->data=ch; s->next=head; head=s; ch=getchar( ); } return head; }
3、逻辑结构与所含结点个数无关
2018/5/19
数据结构
6
存储结构: •顺序存储方法:数据元素在内存中按序连续存储, 结点间的逻辑关系由存储单元的邻接关系来体现 •链接存储方法:用指针指出其直接后继结点的存储位置, 结点间的逻辑关系由存储单元的邻接关系来体现
•索引存储方法:数据元素连续存放,再设一个索引表(有 序),索引表由索引项组成,每个索引项由关键字和地址构成
2018/5/19 数据结构 31
2.3.2 单链表上的基本运算(实现)
Linklist *CREATLISTR1() { char ch; linklist *head,*s,*r; head=malloc(sizeof(linklist)); r=head; ch=getchar(); while(ch!=“$”) { s=malloc(sizeof(linklist)); s->data=ch; r->next=s; r=s; ch=getchar(); } Head r->next=NULL; return head; 2018/5/19 数据结构 }
1、单链表的特点:每个结点只有一个链域,指向其直接后继 (尾结点除外)。 data next 2、结点结构:
3、图示法表示单链表 head a1 a2
.....
an ^
4、单链表的存储结构描述如下: typedef int dataype; typedef struct node {datatype data; 因为单链表由头指针唯一决定 struct node *next; } linklist; linklist *head, *p;
在假设数据集的分布是等概率的条件下,估算出的时间 复杂度称为平均时间复杂度。
例:顺序查找
2018/5/19 数据结构 14
第一章 概 论
五、空间复杂度S(n): 算法所耗费的存储空间,仍是问题规模n的函数。
2018/5/19
数据结构
15
第一章 概 论
本章要求:
1、掌握数据、数据元素、数据结构等基本概念。 2、掌握数据逻辑结构和物理结构的分类。 3、学会算法分析的基本方法。
申请一个结点 p=(linklist *)malloc(sizeof(linklist)); 释放一个结点 free(p);
2018/5/19 数据结构 26
2.3.2 单链表上的基本运算(实现)
1.建立单链表 方法:从一个空表开始,重复读入数据,生成新结点,将读入数 据存放在新结点的数据域,然后将新结点插入当前链表 中,直到结束。 (1)头插法建表 (2)尾插法建表 头插法建表:将新结点插入到当前链表的表头 Head
2018/5/19
数据结构
23
2.3 线性表的链式存储
一、链表 1、 链式存储:用一组任意的存储单元存储线性表, 逻辑上 相邻的结点在物理位置上不一定相邻,结点间 的逻辑关系由存储结点时附加的指针字段表示 2、链表:采用链式存储方法的线性表称为链表。
2018/5/19
数据结构
24
2.3.1 单链表
•数据的运算是定义在数据的逻辑结构上的一个运算的集合
•运算的实现与存储结构密切相关 •逻辑结构与存储结构是多对多的关系
2018/5/19
数据结构
8
例:一个学生成绩表: •是一个数据结构 •每行是一个结点(或记录),由学号、姓名、各科成绩 及平均成绩等数据项组成。
•逻辑关系:线性结构
•存储结构: •表的运算:
数据结构 28
2018/5/19
2.3.2 单链表上的基本运算(实现)
尾插法建表:将新结点插入到当前链表的表尾(需引入r)
Head
a
b
r
c ^ s r d ^
•不带头结点的尾插法:插入时,第一个结点的处理与其 它结点的处理有区别。
结束时,空表和非空表的处理有区别。
2018/5/19
数据结构
29
Linklist *CREATLISTR( ) { char ch; linklist *head,*s,*r; head=NULL; r=NULL; ch=getchar( ); while (ch!=‘$’) { s=malloc(sizeof(linklist)) ; s->data=ch; if(head=NULL) head=s else r->next=s; r=s; ch=getchar( ); } if (r!=NULL) r->next=NULL; return head;
结构数据类型(aggregate data type)
4、数据结构
• 数据的逻辑结构
• 数据的存储结构
• 数据的运算:既对数据施加的操作
2018/5/19
数据结构
5
逻辑结构:(有时直接称为数据结构) •线性结构:线性表、栈、队列、串(最多只有一个直接前趋和一个直接后继) •非线性结构:树 、图、多维数组、广义表 说明: 1、逻辑结构与数据元素本身的形式、内容无关 2、逻辑结构与数据元素的相对位置无关