ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:323.29KB ,
资源ID:5446712      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5446712.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(福建专升本数据结构复习资料带答案.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

福建专升本数据结构复习资料带答案.docx

1、福建专升本数据结构复习资料带答案2011年计算机科学与技术、软件工程、数字媒体艺术(专升本)专业课考试复习纲要第 1 章 引论 31.1. 算法的性质(要素) 31.2. 时间复杂度、空间复杂度 3第 2 章 表 41.3. 表的顺序存储结构及其运算的实现。 41.4. 表的链接存储结构及其运算的实现 41.5. 单链表、循环链表、双向链表的特点。 51.6. 单链表算法设计 5第 3 章 栈 83.1. 栈的顺序实现及其运算 83.2. 栈和队列的链接实现及其运算的实现。 93.3. 栈的应用。 9第 4 章 队列 93.4. 队列的顺序实现(循环队列)及其运算的实现。 93.5. 队列的链

2、接实现及其运算的实现。 93.6. 队列的应用 9第 5 章 递归 9第 6 章 排序与选择 106.1. 排序的基本概念(内外排序、稳定性、时间效率、空间效率) 106.2. 选择排序的方法(简单选择排序、堆排序) 106.3. 插入排序的方法(直接插入排序) 106.4. 交换排序的方法(冒泡排序、快速排序) 11第 7 章 树 137.1. 树的表示法。 137.2. 二叉树的定义和术语、性质。 137.3. 二叉树的存储结构,包括顺序存储实现和指针实现。 147.4. 二叉树的遍历算法及其应用。 14第 8 章 集合 178.1. 集合上的基本运算 17第 9 章 符号表 179.1.

3、 散列函数构造方法以及处理冲突的办法。 179.2. 线性再散列技术。 18第 10 章 字典 2110.1. 二叉搜索树及其实现 21第 11 章 优先队列 2411.1. 堆的概念及其实现 2411.2. 哈夫曼树及其应用 24第 12 章 图 2712.1. 图的存储结构(邻接矩阵、邻接表) 2712.2. 图的遍历方法(深度优先遍历、广度优先遍历) 2912.3. 图的最小生成树的算法( prim 算法、 kruskal 算法)。 3012.4. 图的单源最短路径的 dijkstra 算法。 33第 1 章 引论2.1. 算法的性质(要素) 【例1-1】 计算机算法必须具备输入、输出和

4、 B 等5个特性。A) 可行性、可移植性和可扩充性 B) 可行性、确定性和有穷性C) 确定性、有穷性和稳定性 D) 易读性、稳定性和安全性【例1-2】 根据以下描述确定数据结构:D=d1,d2,d9 R=(d1,d2),(d1,d3),(d3,d4),(d3,d6),(d6,d8),(d4,d5), (d6,d7),(d8,d9) 2.2. 时间复杂度、空间复杂度【例1-3】 分析以下程序段的时间复杂度。for(i=0;in;i+)for(j=0;jm;j+) Aij=0;解:该程序段的时间复杂度为O(m*n)。【例1-4】 分析以下程序段的时间复杂度。i=1; while(i=n) i=2*

5、i; 解:其中语句的执行次数是1,设语句的执行次数为f(n),则有:。得:T(n)=O()【例1-5】 设语句x+的时间是单位时间,则以下语句的时间复杂度为( B )。for(i=1; i=n; i+)for(j=i; jlink=plink;plink=sBqlink=s;slink=pCplink=slink;slink=pDplink=s;slink=q【例3-8】 4. 在循环双链表的p所指结点之后插入s所指结点的操作是d_。Apright=s; sleft=p; prightleft=s; sright=pright;Bpright=s; prightleft=s; sleft=p;

6、 sright=pright;Csleft=p; sright=pright; pright=s; prightleft=s;Dsleft=p; sright=pright; prightleft=s; pright=s;2.6. 单链表算法设计【例3-9】 1设计算法,求带表头的单循环链表的表长。解:int length(Linklist L) int I; listnode *p; I=0; P=L; while (p-next!=L) p=p-next; I+; return I;【例3-10】 2.已知单链表L,写一算法,删除其重复结点。算法思路:用指针p指向第一个数据结点,从它的后继

7、结点开始到表的结束,找与其值相同的结点并删除之;p指向下一个;依此类推,p指向最后结点时算法结束。算法如下:解:void pur_LinkList(LinkList H) LNode *p,*q,*r; p=H-next; /*p指向第一个结点*/ if(p=NULL) return; while (p-next) q=p; while (q-next) /* 从*p的后继开始找重复结点*/ if (q-next-data=p-data) r=q-next; /*找到重复结点,用r指向,删除*r */ q-next=r-next; free(r); /*if*/ else q=q-next;

8、/*while(q-next)*/ p=p-next; /*p指向下一个,继续*/ /*while(p-next)*/该算法的时间性能为O(n2)。【例3-11】 4写一算法,将一带有头结点的单链表就地逆置,即要求逆置在原链表上进行,不允许重新构造新链表。(b)函数原型如下:void LinkList_reverse(LinkList &L);答:void LinkList_reverse(LinkList &L) LinkList p,q,s; p=L-next;q=p-next;s=q-next;p-next=NULL; while(s-next) q-next=p;p=q; q=s;s=

9、s-next; q-next=p;s-next=q;L-next=s;【例3-12】 5写一算法,将带有头结点的非空单链表中数据域值最小的那个结点移到链表的最前面。要求:不得额外申请新的链结点。函数原型如下:void delinsert(LinkList &L);答:void delinsert(LinkList &L) p=L-next; /p是链表的工作指针 pre=L; /pre指向链表中数据域最小值结点的前驱 q=p; /q指向数据域最小值结点,初始假定是第一结点 while(p-next!=NULL) if(p-next-datadata) /找到新的最小值结点 pre=p; q=p

10、-next; p=p-next; if(q!=L-next) /若最小值是第一元素结点,则不需再操作 pre-next=q-next; /将最小值结点从链表上摘下 q-next=L-next; /将q结点插到链表最前面 L-next=q; 【例3-13】 【例2-2】写一算法实现单链表的逆置。解:假设单链表的表头指针用head表示,其类型为上面定义的LinkList,并且单链表不带头结点。逆置后原来的最后一个结点成为第一个结点,于是从第一个结点开始逐个修改每个结点的指针域进行逆置,且刚被逆置的结点总是新链表的第一个结点,故令head指向它(如图2-1所示)。具体算法描述如下:(b)第三个结点逆

11、置示示图void contray(LinkList *head) /将head单链表中所有结点按相反次序链接 LinkList *p, *q;p=head; /p指向未被逆序的第一个结点,初始时指向原表头结点 head=NULL; while(p!=NULL) q=p; /q指向将被逆序链接的结点 p=p-next; q-next=head; head=q; 【例3-14】 试设计实现删除单链表中值相同的多余结点的算法。解:该例可以这样考虑,先取开始结点的值,将它与其后的所有结点值一一比较,发现相同的就删除掉,然后再取第二结点的值,重复上述过程直到最后一个结点。设单链表(其类型为LinkLis

12、t)的头指针head指向头结点,则可按下列步骤执行:首先,用一个指针p指向单链表中第一个表结点,然后用另一个指针q查找链表中其余结点元素,由于是单链表,故结束条件为p= =NULL,同时让指针s指向q所指结点的前趋结点,当查找到结点具有q-data= =p-data时删除q所指的结点,然后再修改q,直到q为空;然后使p指针后移(即p=p-next),重复进行,直到p为空时为止。算法描述如下:del(LinkList *head) /删除单链表中值相同的多余结点 LinkList *p, *s, *q; p=head-next;while(p!=NULL & p-next!=NULL) s=p;

13、 /s指向要删除结点的前趋q=p-next; while (q!=NULL) if (q-data= =p-data) /查找值相同的结点并删除 s-next=q-next; free(q); q=s-next; else s=q; q=q-next; p=p-next;第 3 章 栈3.1. 栈的顺序实现及其运算【例3-15】 1.判定一个栈ST(最多元素为m0)为空的条件是( B )ST-top0 ST-top=0 ST-topm0 ST-top=m0【例3-16】 2设一个栈的入栈序列是ABCD,则借助于一个栈所得到的出栈序列不可能是()。A. ABCD B. DCBA C. ACDB

14、D. DABC3.2. 栈和队列的链接实现及其运算的实现。 3.3. 栈的应用。 【例3-17】 1设一个栈的入栈序列是ABCD,则借助于一个栈所得到的出栈序列不可能是()。A)ABCD B)DCBA C)ACDB D)DABC【例3-18】 2设栈最大长度为3,入栈序列为1、2、3、4、5、6,则不可能的出栈序列是()。A)1、2、3、4、5、6 B)2、1、3、4、5、6C)3、4、2、1、5、6 D)4、3、2、1、5、6第 4 章 队列 考点3.4. 队列的顺序实现(循环队列)及其运算的实现。【例3-19】 1数组用来表示一个循环队列,为当前队列头元素的前一位置,为队尾元素的位置,假定

15、队列中元素的个数小于,计算队列中元素的公式为( D )()rf; ()(nfr)% n; ()nrf; ()(nrf)% n【例3-20】 2.判定一个队列QU(最多元素为m0)为满队列的条件是( A )QU-rear QU-front = = m0 QU-rear QU-front 1= = m0 QU-front = = QU-rear QU-front = = QU-rear+13.5. 队列的链接实现及其运算的实现。3.6. 队列的应用【例3-21】 若循环队列以数组Q0.m-1作为其存储结构,变量rear表示循环队列中的队尾元素的实际位置,其移动按 rear=(rear+1) Mod

16、 m 进行,变量length表示当前循环队列中的元素个数,则循环队列的队首元素的实际位置是( C )Arear-lengthB(rear-length+m) Mod mC(1+rear+m-length) Mod mDM-length第 5 章 递归递归的概念与应用1. 数学函数F( n ) 的递归定义如下: 1 当 n 4 时 试用C语言写出计算F(n)之值的递归函数F ( );并写出F(5)的值。第 6 章 排序与选择6.1. 排序的基本概念(内外排序、稳定性、时间效率、空间效率) 【例3-22】 8若一组记录的排序码为(46, 79, 56, 38, 40, 84),则利用快速排序的方法

17、,以第一个记录为基准得到的一次划分结果为( C ). 38, 40, 46, 56, 79, 84 . 40, 38, 46 , 79, 56, 84 . 40, 38,46, 56, 79, 84 . 40, 38, 46, 84, 56, 79【例3-23】 2. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置至少需比较 6 次。 6.2. 选择排序的方法(简单选择排序、堆排序) 【例3-24】 12若一组记录的排序码为(46, 79, 56, 38, 40, 84),则利用堆排序的方法建立的初始堆为

18、( B ). 79, 46, 56, 38, 40, 84 . 84, 79, 56, 38, 40, 46 . 84, 79, 56, 46, 40, 38 . 84, 56, 79, 40, 46, 38 6.3. 插入排序的方法(直接插入排序) 直接插入排序是稳定排序。【例3-25】 【例8-1】已知关键字序列(12,77,21,65,38,7,38,53),给出采用直接插入排序方法按关键字递增序排列时的每一趟结果。解: 初始 12 77 21 65 38 7 38 53 1趟 12 77 21 65 38 7 38 53 2趟 12 21 77 65 38 7 38 53 3趟 12

19、21 65 77 38 7 38 53 4趟 12 21 38 65 77 7 38 53 5趟 7 12 21 38 65 77 38 53 6趟 7 12 21 38 38 65 77 53 7趟 7 12 21 38 38 53 65 77 ( 表示有序区)【例3-26】 1.写出对线性表(65,15,48,6,34,97,1,26)进行直接插入排序的每一趟结果。 第一趟:15 65(48 6 34 97 1 26)第二趟:15 48 65(6 34 97 1 26)第三趟:6 15 48 65(34 97 1 26)第四趟:6 15 34 48 65(97 1 26)第五趟:6 15

20、34 48 65 97(1 26)第六趟:1 6 15 34 48 65 97(26)第七趟:1 6 15 26 34 48 65 97【例3-27】 2.写出对线性表(37,15,98,25,10,47,83,32)进行冒泡排序的每一趟结果。第一趟:15 37 25 10 47 83 32 98第二趟:15 25 10 37 47 32 83 98第三趟:15 10 25 37 32 47 83 98 第四趟:10 15 25 32 37 47 83 98第五趟:10 15 25 32 37 47 83 98【例3-28】 3.写出对线性表(69,45,8,16,74,27,1,29)进行简

21、单选择排序的每一趟结果。第一趟:1(45 8 16 74 27 69 29)第二趟:1 8(45 16 74 27 69 29)第三趟:1 8 16(45 74 27 69 29)第四趟:1 8 16 27(74 45 69 29)第五趟:1 8 16 27 29(45 69 74)第六趟:1 8 16 27 29 45(69 74)第七趟:1 8 16 27 29 45 69 746.4. 交换排序的方法(冒泡排序、快速排序) 【例3-29】 【例8-3】已知序列(17,18,60,40,7,32,73,65,85),请给出采用冒泡排序法对该序列作升序排序时的每一趟的结果。解:初始 1趟 2

22、趟 3趟 4趟 5趟 17 17 17 17 7 718 18 18 7 17 1760 40 7 18 18 1840 7 32 32 32 327 32 40 40 40 4032 60 60 60 60 6073 65 65 65 65 6565 73 73 73 73 7385 85 85 85 85 85( 表示有序区)【例3-30】 27、给定一个关键字序列24,19,32,43,38,6,13,22,请写出快速排序第一趟的结果;堆排序时所建的初始堆;然后回答上述两种排序方法中哪一种方法使用的辅助空间最小,在最坏情况下哪种方法的时间复杂度最差?快速排序的第一趟结果为22,19,13

23、,6,24,38,43,12;堆排序时所建立的初始大顶堆如所图所示:两种排序方法所需辅助空间:堆是O(1),快速排序是O(logn),可见堆排序所需辅助空间较少;在最坏情况下两种排序方法所需时间:堆是O(nlogn),快速排序是O(n2),所以,可见快速排序时间复杂度最差。 注意:快速排序的平均时排序速度最快,但在最坏情况下不一定比其他排序方法快。【例3-31】 【例8-4】已知关键字序列(38,12,21,77,65,7,38,53)给出采用快速排序方法按关键字增序排序时的第一趟块排过程,并举出一个反例说明快速排序是不稳定排序。解:(1)初始 38 12 21 77 65 7 38 53 l

24、ow high第一次交换从high开始比较,得到的结果: 7 12 21 77 65 38 53 low high从low开始比较,得到的结果: 7 12 21 65 77 38 53 low high第二次交换从high开始比较,得到的结果: 7 12 21 65 77 38 53 low highlow=high,所以第一趟快速排序的结果为:7 12 21 38 65 77 38 53(2)关键字序列(2,2,1)可以作为一个反例。取第一个关键字作为支点,在一趟快排之后的结果是(1,2,2),由于2已在排序后的最终位置,2在2划分出的前一部分子表中,所以2不可能再出现在2之后,即不可能与原

25、始序列中两者的顺序一致。此反例说明快速排序不是稳定排序。【例3-32】 (例1232) 已知序列25,18,60,40,7,21,32,73,68,请给出分别采用冒泡排序方法、直接选择排序方法和快速排序方法对该序列做升序排列时的每一趟结果。 解析:(1)采用冒泡排序方法排序的各趟结果如下:(加框为每次冒出元素) 初始序列:25, 18, 60, 40, 7, 21, 32, 73, 68 第趟:, 25, 18, 60, 40, 21, 32, 68, 73 第二趟: 7, , 25, 21, 60, 40, 32, 68, 73 第三趟: 7, 18, , 25, 32, 60, 40, 68, 73 第四趟: 7, 18, 21, , 32, 40, 60, 68, 73 第五趟: 7, 18, 21, 25, 32, 40, 60, 68, 73 第五趟无元素交换,排序结束。 (2)采用直接选择排序方法排序的各趟结果如下:(加框为每次选出元素) 初始序列:25, 18, 60, 40, , 21, 32, 73, 68 第趟:7 , 60, 40, 25, 2l, 32, 73, 68 第二趟: 7, 18

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1