成人函授教育.docx

上传人:b****6 文档编号:6264818 上传时间:2023-01-04 格式:DOCX 页数:71 大小:73.69KB
下载 相关 举报
成人函授教育.docx_第1页
第1页 / 共71页
成人函授教育.docx_第2页
第2页 / 共71页
成人函授教育.docx_第3页
第3页 / 共71页
成人函授教育.docx_第4页
第4页 / 共71页
成人函授教育.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

成人函授教育.docx

《成人函授教育.docx》由会员分享,可在线阅读,更多相关《成人函授教育.docx(71页珍藏版)》请在冰豆网上搜索。

成人函授教育.docx

成人函授教育

 

成人函授教育

《数据结构》自学指导书

适用计算机专业、本(专)科

 

黑龙江科技学院成教院

 

目录

一、前言………………………………………………………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->datadata)

{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、教学内容:

  图的基本概念:

图的基本概念;图的抽象数据类型

  图的存储表示:

邻接矩阵;邻接表;邻接多重表

  图的遍历与连通性:

深度优先搜索;广度优先搜索;连通分量;关节点与重连通分量

  最小生成

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

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

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