成人函授教育.docx
- 文档编号:6264818
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:71
- 大小:73.69KB
成人函授教育.docx
《成人函授教育.docx》由会员分享,可在线阅读,更多相关《成人函授教育.docx(71页珍藏版)》请在冰豆网上搜索。
成人函授教育
成人函授教育
《数据结构》自学指导书
适用计算机专业、本(专)科
黑龙江科技学院成教院
目录
一、前言………………………………………………………2
二、自学指导……………………………………………………3
三、各章节自学参考……………………………………………4
第一章数据结构基本概念及简单的算法分析…………4
第二章线性表……………………………………………5
第三章栈和队列…………………………………………10
第四章串…………………………………………………11
第五章数组和广义表……………………………………12
第六章树和二叉树………………………………………13
第七章图…………………………………………………17
第八章查找………………………………………………19
第九章排序………………………………………………22
四、期末考试试题类型说明…………………………………..34
一、前言
1、本课程的性质和任务
《数据结构》课程是计算机专业的一门专业基础课。
它涉及在计算机中如何有效地表示数据,如何合理地组织数据和处理数据。
内容包括:
线性表、链表、栈和队列、串、数组和广义表,树和二叉树、图、查找、排序等。
还涉及初步的算法设计和算法性能分析技术。
学好数据结构课程,将为后续的专业课程,如数据库系统、操作系统、编译原理等,打下良好的知识基础,而且还为软件开发和程序设计提供了必要的技能训练。
本课程要求学员对计算机的组成有基本的了解,对程序设计方法有一定基础,对c语言编程,有一定的了解。
对涉及离散数学的知识,如表、树、图、集合等,有初步的了解。
事实上,课程讲授中将会简单地补充这些方面的内容。
2、本课程的自学方法
(1)考虑到函授学员的特点,对数据结构及算法设计的要求不能象本科生那样。
因此,课程教学重点是介绍各种常用的数据结构及其实现。
在每节授课过程中,首先提示本节应掌握的概念,再给出结构的类(抽象数据类型)定义和主要操作的实现。
在讨论算法时主要给出算法实现的思路,以及算法实现的框架。
在每一节最后,对讨论过的内容做一小结,提示本节的要点及容易出错的地方。
使学员能够切实掌握每一种数据结构的特点和实现。
(2)按照《数据结构》课程教学大纲的要求,课程的讲授将从面向过程的概念、数据结构的层次开始。
从线性结构到非线性结构,从简单到复杂,循序渐进,逐步深入。
(3)学好一门课程,教师的引导固然十分重要,但主要靠学员的自身努力。
课堂教学可以起到画龙点睛的作用,但只有不断练习,才能巩固、掌握课程的内容。
因此,本课程要求学员积极独立完成所布置的习题。
3、主要教学环节
考试说明:
(1)在教学大纲和考核说明所规定的知识范围内命题。
在教学知识范围之内,需要灵活运用才能够解决问题的试题不属于超纲。
(2)试题的考察要求覆盖面广、区分度高。
(3)试题兼顾各个能力层次,理解占40%,简单运用占40%,综合运用占20%。
(4)试题的难易程度和题量适当,按难易程度分为四个层次:
容易占25%,较易占35%,较难占25%,难占15%。
题量安排以平时能够独立完成作业者,使他们能在规定的考试时间内做完并有一定时间检查为原则。
本课程使用的教材为《数据结构——C语言描述》,本教材充分起到了自学、助学和导学作用,系统地、完整地介绍各种数据结构的特点、实现及应用。
教材为:
《数据结构——C语言描述》耿国华等编著;西安电子科技大学出版社,2002年2月出版。
适用专业层次:
本科。
二、自学进度表
自学进度要求
面授
时数
备注
周次
日期
预习重点
自学各章节内容
自学
时数
1
线性表
栈和队列
第一章绪论
第二章线性表
第三章栈和队列
7
7
作业
2.2、2.3、3.1、3.2
2
串
数组和广义表
第四章串
第五章数组和广义表
4
4
作业
4.4
3
树和二叉树
第六章树和二叉树
4
4
6.9、6.11
4
图
第七章图7.1-7.4
3
3
7.1、7.3
5
图
查找
第七章图7.5-7.6
第八章查找8.1-8.2
3
3
7.6、
8.2、8.4
6
查找
第八章查找8.3-8.4
3
3
8.5、8.11
7
内部排序
第九章内部排序
3
3
9.1、9.2
8
内部排序
外部排序
第九章内部排序
第十章外部排序
3
3
9.7、9.18
10.5
三、主要章节指导及说明
第一章数据结构基本概念及简单的算法分析
1、教学内容:
什么是数据结构;
抽象数据类型及面向对象概念:
数据类型;数据抽象与抽象数据类型;面向过程的概念;用于描述数据结构的语言;
数据结构的抽象层次;
算法定义;
性能分析与度量:
算法的性能标准;空间复杂度度量;时间复杂度度量;
2、教学要求:
了解:
什么是数据、数据对象、数据元素、数据结构、数据的逻辑结构与物理结构、逻辑结构与物理结构间的关系;
了解:
什么是数据类型、抽象数据类型、数据抽象和信息隐蔽原则。
了解:
算法的定义、算法的特性、算法的时间代价、算法的空间代价
掌握:
用C语言描述算法的方法;
3、习题与解答:
(1)、什么是数据结构?
有关数据结构的讨论涉及哪三个方面?
【解答】
数据结构是指数据以及相互之间的关系。
记为:
数据结构={D,R}。
其中,D是某一数据对象,R是该对象中所有数据成员之间的关系的有限集合。
有关数据结构的讨论一般涉及以下三方面的内容:
1数据成员以及它们相互之间的逻辑关系,也称为数据的逻辑结构,简称为数据结构;
②数据成员极其关系在计算机存储器内的存储表示,也称为数据的物理结构,简称为存储结构;
3施加于该数据结构上的操作。
(2)、什么是算法?
算法的5个特性是什么?
试根据这些特性解释算法与程序的区别。
【解答】
通常,定义算法为“为解决某一特定任务而规定的一个指令序列。
”一个算法应当具有以下特性:
①有输入。
一个算法必须有0个或多个输入。
它们是算法开始运算前给予算法的量。
这些输入取自于特定的对象的集合。
它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。
②有输出。
一个算法应有一个或多个输出,输出的量是算法计算的结果。
③确定性。
算法的每一步都应确切地、无歧义地定义。
对于每一种情况,需要执行的动作都应严格地、清晰地规定。
④有穷性。
一个算法无论在什么情况下都应在执行有穷步后结束。
⑤有效性。
算法中每一条运算都必须是足够基本的。
就是说,它们原则上都能精确地执行,甚至人们仅用笔和纸做有限次运算就能完成。
算法和程序不同,程序可以不满足上述的特性(4)。
例如,一个操作系统在用户未使用前一直处于“等待”的循环中,直到出现新的用户事件为止。
这样的系统可以无休止地运行,直到系统停工。
(3)、设n为正整数,分析下列各程序段中加下划线的语句的程序步数
(1)for(inti=1;i<=n;i++)
for(intj=1;j<=n;j++){
c[i][j]=0.0;
for(intk=1;k<=n;k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
第二章线性表
1、教学内容:
顺序表:
顺序表的定义和特点;顺序表的类型定义;顺序表的查找、插入和删除;
单链表:
单链表的结构;单链表的类型定义;单链表中的插入与删除;带表头结点的单链表;静态链表;
2、教学要求:
了解:
线性表的逻辑结构特性,以及线性表的两种存储实现方式;
了解:
链表与数组一样,是一种实现级结构。
有动态链表和静态链表之分;
掌握:
顺序表的定义与实现,包括搜索、插入、删除算法的实现及其平均比较次数的计算;
掌握:
单链表的类定义、构造函数、单链表的插入与删除算法
掌握:
双向链表的特点,双向链表的类定义及相关操作的实现,用双向链表解决问题的方法。
3、习题与解答:
(1)、将顺序表(a1,a2,...,an)重新排列为以a1为界的两部分:
a1前面的值均比a1小,a1后面的值都比a1大(这里假设数据元素的类型具有可比性,不妨设为整型),操作前后如图2.1所示。
这一操作称为划分。
a1也称为基准。
划分的方法有多种,下面介绍的划分算法其思路简单,性能较差。
【解答】:
从第二个元素开始到最后一个元素,逐一向后扫描:
(1)当前数据元素aI比a1大时,表明它已经在a1的后面,不必改变它与a1之间的位置,继续比较下一个。
(2)当前结点若比a1小,说明它应该在a1的前面,此时将它上面的元素都依次向下移动一个位置,然后将它置入最上方。
25
30
20
60
10
35
15
.
.
.
15
10
20
25
30
60
35
.
.
.
划分前划分后图2.1顺序表的划分算法如下:
voidpart(SeqList*L)
{inti,j;
datatypex,y;
x=L->data[0];/*将基准置入x中*/
for(i=1;i<=L->last;i++)
if(L->data[i] {y=L->data[i]; for(j=i-1;j>=0;j--)/*移动*/ L->data[j+1]=L->data[j]; L->data[0]=y; } } 算法2.1 本算法中,有两重循环,外循环执行n-1次,内循环中移动元素的次数与当前数据的大小有关,当第i个元素小于a1时,要移动它上面的i-1个元素,再加上当前结点的保存及置入,所以移动i-1+2次,在最坏情况下,a1后面的结点都小于a1,故总的移动次数为: 即最坏情况下移动数据时间性能为O(n2)。 这个算法简单但效率低,在第9章的快速排序中时我们将介绍另一种划分算法,它的性能为O(n)。 (2)、已知单链表H,写一算法将其倒置。 即实现如图2.2的操作。 (a)为倒置前,(b)为倒置后。 (b) 【解答】: 依次取原链表中的每个结点,将其作为第一个结点插入到新链表中去,指针p用来指向当前结点,p为空时结束。 算法如下: voidreverse(LinklistH) {LNode*p; p=H->next;/*p指向第一个数据结点*/ H->next=NULL;/*将原链表置为空表H*/ while(p) {q=p;p=p->next; q->next=H->next;/*将当前结点插到头结点的后面*/ H->next=q; } } 算法2.2 该算法只是对链表中顺序扫描一边即完成了倒置,所以时间性能为O(n)。 (3)、已知单链表L,写一算法,删除其重复结点,即实现如图2.3的操作。 (a)为删除前,(b)为删除后。 【解答】: 用指针p指向第一个数据结点,从它的后继结点开始到表的结束,找与其值相同的结点并删除之;p指向下一个;依此类推,p指向最后结点时算法结束。 (b) 算法如下: voidpur_LinkList(LinkListH) {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*/ elseq=q->next; }/*while(q->next)*/ p=p->next;/*p指向下一个,继续*/ }/*while(p->next)*/ } 算法2.3 该算法的时间性能为O(n2)。 (4)、设有两个单链表A、B,其中元素递增有序,编写算法将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。 算法思路: 利用A、B两表有序的特点,依次进行比较,将当前值较小者摘下,插入到C表的头部,得到的C表则为递减有序的。 【解答】: LinkListmerge(LinkListA,LinkListB) /*设A、B均为带头结点的单链表*/ {LinkListC;LNode*p,*q; p=A->next;q=B->next; C=A;/*C表的头结点*/ C->next=NULL; free(B); while(p&&q) {if(p->data {s=p;p=p->next;} else {s=q;q=q->next;}/*从原AB表上摘下较小者*/ s->next=C->next;/*插入到C表的头部*/ C->next=s; }/*while*/ if(p==NULL)p=q; while(p)/*将剩余的结点一个个摘下,插入到C表的头部*/ {s=p;p=p->next; s->next=C->next; C->next=s; } } 算法2.4 该算法的时间性能为O(m+n)。 第三章栈和队列 1、教学内容: 栈: 栈的抽象数据类型;栈的顺序存储表示;栈的链接存储表示 队列: 队列的抽象数据类型;队列的顺序存储表示;队列的链接存储表示;队列的应用举例; 2、教学要求: 熟练掌握: 栈的定义、特性和栈的抽象数据类型,栈的顺序表示、链表表示以及相应操作的实现。 特别注意栈空和栈满的条件 了解: 在表达式计算时栈是如何使用的; 熟练掌握: 队列的定义、特性和队列的抽象数据类型,队列的顺序表示、链表表示以及相应操作的实现。 特别是循环队列中队头与队尾指针的变化情况; 3、习题与解答: 1、铁路进行列车调度时,常把站台设计成栈式结构的站台,如右图所示。 试问: (1)设有编号为1,2,3,4,5,6的六辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种? (2)若进站的六辆列车顺序如上所述,那么是否能够得到435612,325641,154623和135426的出站序列,如果不能,说明为什么不能;如果能,说明如何得到(即写出"进栈"或"出栈"的序列)。 【解答】 (1) 可能的不同出栈序列有种。 (2)不能得到435612和154623这样的出栈序列。 因为若在4,3,5,6之后再将1,2出栈,则1,2必须一直在栈中,此时1先进栈,2后进栈,2应压在1上面,不可能1先于2出栈。 154623也是这种情况。 出栈序列325641和135426可以得到。 3 5 6 2 2 4 4 4 4 1 1 1 1 1 1 1 1 5 3 4 4 1 2 2 2 2 6 第四章串 1、教学内容: 字符串: 字符串的抽象数据类型;字符串操作的实现; 2、教学要求: 熟练掌握: 字符串的定义及实现 第五章数组和广义表 1、教学内容: 作为抽象数据类型的数组: 数组的定义和初始化;作为抽象数据类型的数组;数组的顺序存储方式; 2、教学要求: 了解: 作为抽象数据类型的数组的定义,数组的按行顺序存储与按列顺序存储; 了解: 稀疏矩阵的定义及其数组实现; 3、习题与解答: (1)、画出下列广义表的图形表示和它们的存储表示: (1)D(A(c),B(e),C(a,L(b,c,d))) (2)J1(J2(J1,a,J3(J1)),J3(J1)) 【解答】: (1)D(A(c),B(e),C(a,L(b,c,d))) (2)J1(J2(J1,a,J3(J1)),J3(J1)) J1 J2 J3 C B A D c b a e L a d c 0J1 2 2 ∧ J1 ∧ A 0B ∧ B 0A 1e 2 ∧ 2 0D D 1c 2 J2 ∧ 1a 2 0J2 2 0C 2 1a C ∧ ∧ 0J3 J3 2 ∧ 0L 1d 1c 1b L 第六章树和二叉树 1、教学内容: 树和森林的概念: 树的定义;树的术语;树的抽象数据类型; 二叉树: 二叉树的定义;二叉树的性质;二叉树的抽象数据类型 二叉树的表示: 顺序表示;二叉链表表示 遍历二叉树: 中序遍历;前序遍历;后序遍历;应用二叉树遍历的事例;二叉树的计数 堆: 堆的定义;堆的建立;堆的插入与删除;堆的调整算法 树与森林: 树的存储表示;森林与二叉树的转换;遍历树;遍历森林 哈夫曼树: 路径长度;哈夫曼树;霍夫曼编码 2、教学要求: 了解: 树和森林的概念。 包括树的定义、树的术语、树的抽象数据类型 掌握: 二叉树的概念、性质及二叉树的表示 熟练掌握: 二叉树的遍历方法 掌握: 树与森林的实现,重点在用二叉树实现 掌握: 森林与二叉树的转换;树的遍历算法 掌握: 二叉树的计数方法及从二叉树遍历结果得到二叉树的方法 掌握: 哈夫曼树的实现方法、构造哈夫曼编码的方法及带权路径长度的计算 3、习题与解答: (1)、列出右图所示二叉树的叶结点、分支结点和每个结点的层次。 【解答】 二叉树的叶结点有⑥、⑧、⑨。 分支结点有①、②、③、④、⑤、⑦。 结点①的层次为0;结点②、③的层次为1;结点④、⑤、⑥的层次为2;结点⑦、⑧的层次为3;结点⑨的层次为4。 (2)、使用 (1)顺序表示和 (2)二叉链表表示法,分别画出右图所示二叉树的存储表示。 【解答】 0123456789 ① ①②③④⑤⑥⑦ ∧ ③ ② 101112131415161718 ∧ ⑤ ∧ ⑥ ∧ ∧ ④ ⑧⑨ ∧ ∧ ∧ ⑧ ⑦ 顺序表示 二叉链表表示 ∧ ∧ ⑨ (3)、在结点个数为n(n>1)的各棵树中,高度最小的树的高度是多少? 它有多少个叶结点? 多少个分支结点? 高度最大的树的高度是多少? 它有多少个叶结点? 多少个分支结点? 【解答】 结点个数为n时,高度最小的树的高度为1,有2层;它有n-1个叶结点,1个分支结点;高度最大的树的高度为n-1,有n层;它有1个叶结点,n-1个分支结点。 (4)、试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。 【解答】 具有3个结点的树具有3个结点的二叉树 (5)、请画出右图所示的树所对应的二叉树。 1 【解答】 1 2 2 5 4 4 3 3 对应二叉树 5 7 6 6 8 8 7 (6)、已知一棵二叉树的前序遍历的结果是ABECDFGHIJ,中序遍历的结果是EBCDAFHIGJ,试画出这棵二叉树。 【解答】 当前序序列为ABECDFGHIJ,中序序列为EBCDAFHIGJ时,逐步形成二叉树的过程如下图所示: A A A A F B B F F B G E C G E C HIGJ CD E FHIGJ H D J HI J D I EBCD (7)、给定权值集合{15,03,14,02,06,09,16,17},构造相应的霍夫曼树,并计算它的带权外部路径长度。 【解答】 (Ⅰ) 05 17 16 09 06 14 15 F: 17 16 09 06 02 14 15 02 03 03 (Ⅱ) 17 16 09 14 15 20 16 14 15 (Ⅲ) 17 11 09 11 06 05 02 03 06 05 (Ⅴ) 33 20 29 02 03 29 16 17 20 (Ⅳ) 16 17 11 09 15 14 14 11 09 15 05 06 06 05 02 03 02 03 82 (Ⅶ) 49 33 (Ⅵ) 49 33 17 29 20 16 17 16 29 20 14 11 09 15 11 09 15 14 06 05 06 05 03 02 03 02 此树的带权路径长度WPL=229。 (8)、假定用于通信的电文仅由8个字母c1,c2,c3,c4,c5,c6,c7,c8组成,各字母在电文中出现的频率分别为5,25,3,6,10,11,36,4。 试为这8个字母设计不等长Huffman编码,并给出该电文的总码数。 【解答】已知字母集{c1,c2,c3,c4,c5,c6,c7,c8},频率{5,25,3,6,10,11,36,4},则Huffman编码为 c1 c2 c3 c4 c5 c6 c7 c8 0110 10 0000 0111 001 010 11 0001 电文总码数为4*5+2*25+4*3+4*6+3*10+3*11+2*36+4*4=257 1 0 100 1 39 61 1 0 0 1 1 0 0 C2 17 22 36 25 C7 7 11 11 10 1 1 0 0 C6 C5 5 6 3 4 C4 C1 C8 C3 第七章图 1、教学内容: 图的基本概念: 图的基本概念;图的抽象数据类型 图的存储表示: 邻接矩阵;邻接表;邻接多重表 图的遍历与连通性: 深度优先搜索;广度优先搜索;连通分量;关节点与重连通分量 最小生成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成人 函授教育