上数据结构期末图知识题目解析.docx

上传人:b****5 文档编号:4492224 上传时间:2022-12-01 格式:DOCX 页数:11 大小:192.52KB
下载 相关 举报
上数据结构期末图知识题目解析.docx_第1页
第1页 / 共11页
上数据结构期末图知识题目解析.docx_第2页
第2页 / 共11页
上数据结构期末图知识题目解析.docx_第3页
第3页 / 共11页
上数据结构期末图知识题目解析.docx_第4页
第4页 / 共11页
上数据结构期末图知识题目解析.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

上数据结构期末图知识题目解析.docx

《上数据结构期末图知识题目解析.docx》由会员分享,可在线阅读,更多相关《上数据结构期末图知识题目解析.docx(11页珍藏版)》请在冰豆网上搜索。

上数据结构期末图知识题目解析.docx

上数据结构期末图知识题目解析

2014上数据结构期末复习大纲

一.期中前以期中考试试卷复习,算法要真正理解

二、二叉树、图、排序算法将是考试重点(占60%左右)

三、要掌握的算法

1.二叉树的链表表示

2.建立二叉树的链表存储结构

3.先序、中序、后序遍历二叉树(递归算法)

4.遍历算法的应用(如求二叉树的结点数)

5.建立huffman树和huffman编码

6.图的邻接矩阵表示和邻接链表表示

7.图的深度优先遍历和广度优先遍历算法

8.有向图求最短路径(迪杰斯特拉算法)

9.直接插入排序算法

10.shell排序(排序过程)

12.堆排序(排序过程)

练习题

1.有8个结点的无向图最多有B条边。

A.14B.28C.56D.112

2.有8个结点的无向连通图最少有C条边。

A.5B.6C.7D.8

3.有8个结点的有向完全图最多有C条边。

A.14B.28C.56D.112

4.用邻接表表示图进行广度优先遍历时,通常是采用B来实现算法的。

A.栈B.队列C.树D.图

5.用邻接表表示图进行深度优先遍历时,通常是采用A来实现算法的。

A.栈B.队列C.树D.图

A.0243156

B.0136542

C.0423165

D.0361542

建议:

0134256

6.已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是*(C)

7.已知图的邻接矩阵同上题,根据算法,则从顶点0出发,按深度优先遍历的结点序列是(D)

A.0243156B.0135642C.0423165D.0134256

8.已知图的邻接矩阵同上题6,根据算法,则从顶点0出发,按广度优先遍历的结点序列是(B)

A.0243651B.0136425C.0423156D.0134256

9.已知图的邻接矩阵同上题6,根据算法,则从顶点0出发,按广度优先遍历的结点序列是(C)

A.0243165B.0135642C.0123465D.0123456

10.从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为(C)。

A.归并排序B.冒泡排序C.插入排序D.选择排序

11.从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为(D)。

A.归并排序B.冒泡排序C.插入排序D.选择排序

12.对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为(D)。

A.n+1B.nC.n-1D.n(n-1)/2

13.若一组记录的排序码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为(C)。

A.38,40,46,56,79,84B.40,38,46,79,56,84

C.40,38,46,56,79,84D.40,38,46,84,56,79

14.堆是一种(B)排序。

A.插入B.选择C.交换D.归并

15.若一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为(B)。

A.79,46,56,38,40,84B.84,79,56,38,40,46

C.84,79,56,46,40,38D.84,56,79,40,46,38

二、填空题(每空1分,共20分)

1.图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。

2.有向图G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的出度。

3.n个顶点e条边的图,若采用邻接矩阵存储,则空间复杂度为O(n2)。

4.n个顶点e条边的图,若采用邻接表存储,则空间复杂度为O(n+e)。

5.设有一稀疏图G,则G采用邻接表存储较省空间。

6..设有一稠密图G,则G采用邻接矩阵存储较省空间。

7.图的逆邻接表存储结构只适用于有向图。

8.图的深度优先遍历序列不是惟一的。

9.n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为O(n2);若采用邻接表存储时,该算法的时间复杂度为O(n+e)。

10.n个顶点e条边的图采用邻接矩阵存储,广度优先遍历算法的时间复杂度为O(n2);若采用邻接表存储,该算法的时间复杂度为O(n+e)

11.用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按

路径长度递增的次序来得到最短路径的。

 

三、简答题.

1.已知如图所示的有向图,请给出该图的:

(1)

每个顶点的入/出度;

(2)邻接矩阵;

(3)邻接表;

(4)逆邻接表。

 

2.已知一个无向图的邻接表如图2所示,要求:

(1)画出该无向图;

(2)根据邻接表,分别写出用DFS(深度优先搜索)和BFS(广度优先搜索)算法从顶点V0开始遍历该图后所得到的遍历序列。

 

(1)

 

(2)根据该无向图的邻接表表示,从顶点V0开始的深度优先遍历序列为:

V0、V2、V3、V1、V4、V6、V5。

广度优先遍历序列为V0、V2、V5、V6、V1、V3、V4。

 

3.、图3所示为一个有向网图及其带权邻接矩阵,要求对有向图采用Dijkstra算法,求从V0到其余各顶点的最短路径,写出执行算法过程中各步的状态。

 

3、求解过程如下表所示。

终点

从v0到各终点的D值和最短路径的求解过程

i=1

i=2

i=3

i=4

i=5

V1

V2

10(v0,v2)

V3

60(v0,v2,v3)

50

(v0,v4,v3)

V4

30

(v0,v4)

30

(v0,v4)

V5

100

(v0,v5)

100

(v0,v5)

90

(v0,v4,v5)

60(v0,v4,v3,v5)

Vj

V2

V4

V3

V5

S

{v0,v2}

{v0,v2,v4}

{v0,v2,v3,v4}

{v0,v2,v3,v4,v5}

4.设待排序的关键字序列为{12,2,16,30,28,10,16*,20,6,18},试分别写出使用以下排序方法,每趟排序结束后关键字序列的状态。

(1).直接插入排序

(2)希尔排序(增量选取5,3,1)

(3)快速排序

(1)直接插入排序

[212]1630281016*20618

[21216]30281016*20618

[2121630]281016*20618

[212162830]1016*20618

[21012162830]16*20618

[210121616*2830]20618

[210121616*202830]618

[2610121616*202830]18

[2610121616*18202830]

(2)希尔排序(增量选取5,3,1)

102166181216*203028(增量选取5)

621210181616*203028(增量选取3)

2610121616*18202830(增量选取1)

(3)快速排序

枢轴

12[6210]12[283016*201618]

6[2]6[10]12[283016*201618]

28261012[181616*20]28[30]

18261012[16*16]18[20]2830

16*26101216*[16]18202830

5.设待排序的关键字序列为{30,60,8,40,70,12,10},试使用堆排序,

(1)画出将无序数据建成初始堆的图,

(2)画出将第二个数排定顺序时的堆的图。

(1)初始堆序列为7060124030810

(2)

交换60和8

四、程序填空题

1、根据有向图的邻接矩阵求出序号为numb的顶点的度数(邻接矩阵可参考简答题第三题),

请填写算法中下划线的空白处。

intdegree2(Graph&ga,intnumb)

{inti,j,d=0;

for(j=0;j

if(ga.arcs[numb][j]!

=0&&ga.arcs[numb][j]!

=MAXINT)

d++;

for(i=0;i

if(ga.arcs[I][numb]!

=0&&ga.arcs[I][numb]!

=MAXINT)

d++;

return(d);

}

2..已知r[1..n]是n个记录的递增有序表,用折半查找法查找关键字(key)为k的记录。

如果查找失败,,则输出“失败”,函数返回值为0;否则输出“成功”,函数返回值为该记录的序号值。

Intbinary_search(structrecordtyper[],intn,keytypek)

/*r[1..n]为N个记录的递增有序表,k为关键字*/

{intmid,low=1,hig=n;

while(low<=hig)

{mid=(low+hig)/2;

if(k

(1)hig=mid-1;

elseif(k==r[mid].key){printf(“成功”);

(2)returnmid;}

else(3)low=mid+1;}

if(low>high)printf(“失败”);

return(0);

}

3.建立huffman树

voidHuffmanCoding(HuffmanTree&HT,int*w,intn)//算法6.12

{//w存放n个字符的权值(均>0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC

intm,i,s1,s2,start;

unsignedc,f;

HuffmanTreep;

char*cd;

if(n<=1)

return;

m=2*n-1;

HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号单元未用

for(p=HT+1,i=1;i<=n;++i,++p,++w)

{

(*p).weight=*w;

(*p).parent=0;

(*p).lchild=0;

(*p).rchild=0;

}

for(;i<=m;++i,++p)

(*p).parent=0;

for(i=n+1;i<=m;++i)//建赫夫曼树

{//在HT[1~i-1]中选择parent为0且weight最小的两个结点,其序号分别为s1和s2

select(HT,i-1,s1,s2);

ht[s1].parent==I;

ht[s2].parent==I;

ht[i].lchild=s1;

ht[i].lchild=s2;

ht[i].weight=ht[s1].weight+ht[s2].weight;

}

}

六.编程题

1.期中考试二个程序题(循环队列入队出队、用栈处理进制转换(P48算法3.1)

2.以二叉链表作为二叉树的存储结构,编写以下算法:

(看实习题)

(1)写出先序、中序、后序遍历二叉树的递归算法;

(1)统计二叉树的结点个数。

3.带头结点的单链表的插入和删除算法。

(书上P30算法2.9,2.10)

答.1.期中循环队列入队出队

#defineMAX20

typedefstruct{

intqu[MAX];

intrear,length;

}Queue;

IntEnQueue(Queue&q,inte)

{if(q.length==MAX)return-1;

q.rear=(q.rear+1)%max;

q.length=q.length+1;

q.qu[q.rear]=e;

return1;

}

IntDeQueue(Queue&q,int&e)

{intfront;

if(q.length==0)return-1;

front=(q.rear+1+MAX-q.length)%max;

e=q.qu[front];

q.length--;

return1;

}

 

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

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

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

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