数据结构应用题整理

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

/* 递归地

相关文档
最新文档