have=1;
}
if(!
have)cout<<"矩阵中没有马鞍点!
\n";
}
第六章
四4、知二叉树的后序序列DECBGIHFA和中序序列为DCEBAFHGI,画出这棵二叉树。
A
BF
C H
DEI
G
7、右交换子树算法(在上机答案)
//交换左右子树
bitree*swap(bitree*p)
{bitree*t1,*t2;
if(p!
=NULL)
{1=swap(p->lchild);
t2=swap(p->rchild);
p->lchild=t2;
p->rchild=t1;
}
returnp;
}
12、已知结点序列{21,18,37,42,65,24,19,26,45,25},画出相应的二叉排序树,并画出删除结点37后的二叉排序树。
有问题
(1)
(2)删除结点37后
14某密码电文由8个字母组成,每个字母在电文中的出现频率分别是7、19、2、6、32、3、21、10,试为这8个字母设计相应的哈夫曼编码。
解:
这8个字母可用A、B、C、D、E、F、G、H表示
组成的哈夫曼编码如下所示。
A:
1001B:
101C:
0010D:
1000
E:
11F:
0011G:
01H:
000
设计的哈夫曼树如下:
哈夫曼树
第7章
四、4、邻接表:
126null
2136null
324null
435null
547null
6127null
756null
DFS:
1234576BFS:
1263745(不唯一)或1627354
5、按顺序输入后的邻接表:
126435null
216null
3145null
41635null
56413null
61245null
6、从顶点4开始:
DFS:
412653(有多种)
BFS:
413562(不唯一)
7最小生成树:
7
6
1
5
24
3
第8章
4、查找586
12345678910111213141516
687155188150465505508511586656670700766897908
Low=1high=16mid=(1+16)/2=8R[8]=508<586
Low=mid+1=9high=16mid=(9+16)/2=12R[12]=670>586
Low=9high=12-1=11mid=(9+11)/2=10R[10]=586
586=R[10]查找成功
5线性探查13
HT
0
1
2
3
4
5
6
7
8
9
10
11
12
52
26
15
120
43
11
84
70
99
92
37
25
H(key)
0
0
2
3
4
11
6
2
8
4
11
12
比较
1
2
1
1
1
8
1
6
1
6
1
1
拉链
0
52,26
1
2
15,70
3
120
4
43,82
5
6
84
7
8
99
9
10
11
37,11
12
25
给定关键字序列为(105,50,30,25,85,40,100,12,10,28,分别写出直接插入排序、希尔排序、起泡排序、直接选择排序、快速排序和归并排序的每一趟运行结果。
直接插入排序:
初始关键字序列:
105,50,30,25,85,40,100,12,10,28
第一趟直接插入排序:
【50,105】
第二趟直接插入排序:
【30,50,105】
第三趟直接插入排序:
【25,30,50,105】
第四趟直接插入排序:
【25,30,50,85,105】
第五趟直接插入排序:
【25,30,40,50,85,105】
第六趟直接插入排序:
【25,30,40,50,85,100,105】
第七趟直接插入排序:
【12,25,30,40,50,85,100,105】
第八趟直接插入排序:
【10,12,25,30,40,50,85,100,105】
第九趟直接插入排序:
【10,12,25,28,30,40,50,85,100,105】
希尔排序(增量为5,3,1):
初始关键字序列:
105,50,30,25,85,40,100,12,10,28
第一趟希尔排序:
40,50,12,10,28,105,100,30,25,85
第二趟希尔排序:
10,28,12,40,30,25,85,50,105,100
第三趟希尔排序:
10,12,25,28,30,40,50,85,100,105
起泡排序:
初始关键字序列:
105,50,30,25,85,40,100,12,10,28
第一趟起泡排序:
10,105,50,30,25,85,40,100,12,28
第二趟起泡排序:
10,12,105,50,30,25,85,40,100,28
第三趟起泡排序:
10,12,25,105,50,30,85,40,100,28
第四趟起泡排序:
10,12,25,28,105,50,30,85,40,100
第五趟起泡排序:
10,12,25,28,30,105,50,85,40,100
第六趟起泡排序:
10,12,25,28,30,40,105,50,85,100
第七趟起泡排序:
10,12,25,28,30,40,50,105,85,100
第八趟起泡排序:
10,12,25,28,30,40,50,85,105,100
第九趟起泡排序:
10,12,25,28,30,40,50,85,100,105
直接选择排序:
初始关键字序列:
105,50,30,25,85,40,100,12,10,28
第一趟选择排序:
10,50,30,25,85,40,100,12,105,28
第二趟选择排序:
10,12,30,25,85,40,100,50,105,28
第三趟选择排序:
10,12,25,30,85,40,100,50,105,28
第四趟选择排序:
10,12,25,28,85,40,100,50,105,30
第五趟选择排序:
10,12,25,28,30,40,100,50,105,85
第六趟选择排序:
10,12,25,28,30,40,50,100,105,85
第七趟选择排序:
10,12,25,28,30,40,50,85,100,105(完成)
第八趟选择排序:
10,12,25,28,30,40,50,85,100,105
第九趟选择排序:
10,12,25,28,30,40,50,85,100,105
快速排序:
初始关键字序列:
105,50,30,25,85,40,100,12,10,28
第一趟快速排序:
(28,50,30,25,85,40,100,12,10),105
第二趟快速排序:
(10,12,25),28,(85,40,100,30,50),105
第三趟快速排序:
10,12,25,28,(50,40,30),85,(100),105
第四趟快速排序:
10,12,25,28,(30,40),50,85,100,105
第五趟快速排序:
10,12,25,28,(30,40),50,85,100,105
归并排序:
初始关键字序列:
105,50,30,25,85,40,100,12,10,28
第一趟归并排序:
50,105,25,30,40,85,12,100,10,28
第二趟归并排序:
25,30,50,105,12,40,85,100,10,28
第三趟归并排序:
10,12,25,28,30,40,50,85,100,105
设待排序的关键字序列为(15,21,6,30,23,6′,20,17),试分别写出使用以下排序方法每趟排序后的结果。
并说明做了多少次比较。
(1)直接插入排序
(2)希尔排序(增量为5,2,1)(3)起泡排序
(4)快速排序(5)直接选择排序(6)锦标赛排序
(7)堆排序(8)二路归并排序(9)基数排序
【解答】
(2)希尔排序(增量为5,2,1)
初始关键字序列:
15,21,6,30,23,6′,20,17
第一趟希尔排序:
6′,20,6,30,23,15,21,17
第二趟希尔排序:
6′,15,6,17,21,20,23,30
第三趟希尔排序:
6′,6,15,17,20,21,23,30
(3)起泡排序
初始关键字序列:
15,21,6,30,23,6′,20,17
第一趟起泡排序:
15,6,21,23,6′,20,17,30
第二趟起泡排序:
6,15,21,6′,20,17,23,30
第三趟起泡排序:
6,15,6′,20,17,21,23,30
第四趟起泡排序:
6,6′,15,17,20,21,30,23
第五趟起泡排序:
6,6′,15,17,20,21,30,23
(4)快速排序
初始关键字序列:
15,21,6,30,23,6′,20,17
第一趟快速排序:
【6′,6】15【30,23,21,20,17】
第二趟快速排序:
6′,6,15【17,23,21,20】30
第三趟快速排序:
6′,6,15,17【23,21,20】30
第四趟快速排序:
6′,6,15,17,【20,21】23,30
第五趟快速排序:
6,6′,15,17,20,21,30,23
(5)直接选择排序
初始关键字序列:
15,21,6,30,23,6′,20,17
第一趟直接选择排序:
6,21,15,30,23,6′,20,17
第二趟直接选择排序:
6,6′,15,30,23,21,20,17
第三趟直接选择排序:
6,6′,15,30,23,21,20,17
第四趟直接选择排序:
6,6′,15,17,23,21,20,30
第五趟直接选择排序:
6,6′,15,17,20,21,23,30
第六趟直接选择排序:
6,6′,15,17,20,21,23,30
第七趟直接选择排序:
6,6′,15,17,20,21,23,30
(6)锦标赛排序
初始关键字序列:
15,21,6,30,23,6′,20,17(此题答案的格式不对,我删去了)
锦标赛排序的基本思想是:
首先对n个待排序记录的关键字进行两两比较,从中选出n/2个较小者再两两比较,直到选出关键字最小的记录为止,此为一趟排序。
我们将一趟选出的关键字最小的记录称为“冠军”,而“亚军”是从与“冠军”比较失败的记录中找出,具体做法为:
输出“冠军”后,将(冠军)叶子结点关键字改为最大,继续进行锦标赛排序,直到选出关键字次小的记录为止,如此循环直到输出全部有序序列。
上面给出了排在前三个的记录,详细过程略。
(7)堆排序
初始关键字序列:
15,21,6,30,23,6′,20,17
初始堆:
6,17,6’,21,23,15,20,30
第一次调堆:
6’,17,15,21,23,30,20,【6】
第二次调堆:
15,17,20,21,23,30,【6’,6】
第三次调堆:
17,21,20,30,23,【15,6’,6】
第四次调堆:
20,21,23,30,【17,15,6’,6】
第五次调堆:
21,30,23,【20,17,15,6’,6】
第六次调堆:
23,30,【21,20,17,15,6’,6】
第七次调堆:
30,【23,21,20,17,15,6’,6】
堆排序结