数据结构应用题整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、二叉树前序 中序遍历(序列与图的相互转化) 例题1:
中序序列BDCEAFHG 前序序列ABCDEFGH
例题2
前序序列:ABCDEFGHIJKLMPQRNO
(参考:后序序列: BDEFCAIJKHGQRPMNOL 中序序列:BDEFCAIJKHGPQRMNOL 2、哈夫曼树
例题 1: 7,19,2,6,32,3,21,10 其对应字母分别为 a,b,c,e,f,g,h
A
G
B
L
H
C
M
I
D
N
P
J
E
Q
K
F
R
哈夫曼编码: a : 0010
b: 10 c:00000
d: 0001
e:01
f: 00001
g:11
h:0011
例题2:w={5, 29, 7, 8, 14, 23, 3, 11}
<]>❽碱® ❸❸❼❽
例题3
例如,设一组电文的字符集D及其概率分布W为:D={a,b,c,d , e} , W={0.12 ,0.40,0.15 ,
0.08,0.25},用哈夫曼算法构造哈夫曼树及其对应的编码如下图所示。
3、最小生成树
(e)
4、邻接矩阵(图 <-> 邻接矩阵 <-> 遍历序列(深度、宽度遍历)) 園晞雜矩阵示例
If'
吐
0 111
<0100 A 仁 10 10 A2=
10 10 O
1 1 Q 1
110 0
10 10
Lo 1 0 0-
o tt&7无空至塑1暨遵報接怖
Kruskal^法构琲最小杀膻树的过程
(&
(0)
•-49
•七
■T
9此取B. F
T :B C ■
算法
Prim
E 卜-i —-^1
10 :E j —・j ・u
ID
当采用劇接表存睹结构井且甘鰭结构匕确定的情况下,遍历的结果将是确定的.
DFS 宇列:Co -> c1 -> -> c4 c5 ->
5、二分法检索又称为折半查找,采用二分法检索可以大大提高查找效率,它要求线性表结点按其关键字从小到大(或从大到小)按序排列并采用顺序存储结构。
采用二分搜索时,先求位于搜索区间正中的对象的下标mid,用其关键码与给定值x比
较:
?
?
? I[mid]. Key = x ,搜索成功;
l[mid]. Key > x,把搜索区间缩小到表的前半部分,再继续进行对分搜索;
l[mid]. Key < x,把搜索区间缩小到表的后半部分,再继续讲行对分搜索。
每比较一次,搜索区间缩小一半。如果搜索区间已缩小到一个对象,仍未找到想要
搜索的对象,则搜索失败。
例题1:
有一组有序的线性表如下:
(10, 14,20,32,45,50,68, 90,100,120)
下面分析在其中二分检索关键字20的过程。
下标;0123456739 1014203245506890100120
low=2 mid=2 hlgh=3
第3灰比亂检索成■咖逋甸拉置N
F面分析二分检索关键字95的过程:
下轨0123^56789 1014203245506890100120
hlghi=7 lovr=3
此略hiqzi晞即臺找区司为空,说明检叢知赂迸宵检宋知刘卑息°
F面给出二分检索法的非递归与递归实现算法,算法中使用seqlist.h 中定义的顺序查找
/*
二分查找算法
文件名:b_search.c */
/* 函数名:binsearch1() 、binsearch2() */
/****************************************************/ /* ------- 二分查找的非递归实现——*/
在后半部分检索*/
例题2 看书218--219页 算法复杂度<=log2(n)+1 6、快速排序 写序列 例题1:书p275 例题2:
设待排序的7个记录的排序码序列为{126,272,8,165,123,12, 28},一次划分 的
过程如图所示
************************************************
int bin search1(seqlist ^datatype key) { in t low=0,high=l.le n-1,mid; while (low<=high)
{ mid=(low+high)/2;
/*
if (l.data[mid]==key) return mid; /* if (l.data[mid]>key) high=mid-1; /* else low=mid+1; /*
} return -1; /* }
二分*/
检索成功返回*/
继续在前半部分进行二分检索 */ 继续在后半部分进行二分检索 */
当low>high 时表示查找区间为空,检索失败
*/
/* ------ 二分查找的递归实现——*/
int bin search2(seqlist l,datatype key,i nt low,i nt high) { int mid,k;
if (low>high) return -1; /* else
{ mid=(low+high)/2; /*
if (l.data[mid]==key) return mid; /*
检索不成功的出口条件*/ 二分*/
检索成功返回*/
if (l.data[mid]>key) return
/*递归地在前半部分检索*/
else retur n
/* 递归地
表