数据结构测验(二)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
知是一种快乐,好奇心知识的萌芽。——培根
数据结构测验(二)
一、单项选择填空题:(2*10)
题号
1
2
3
4
5
6
7
8
9
10
答题
C
A
B
C
D
B
B
A
C
D
二、判断是非题(1*10)
题号
1
2
3
4
5
6
7
8
9
10
答题
是
是
非
是
非
是
非
非
非
是
二、解答下列各题: (8+9+9+8+9+7)
1. 已知二叉树的先序和中序序列如下,画出该二叉树以及建立中序线索后的示意图。先序序列是:ABDHIECFG 中序序列是:HDIBEAFCG(树4+线索4分)
2. 已知图 G 如右所示,试写出采用邻接表存储时的类型描述和存储结构示意图(每个顶点的各邻接边的链接顺序为所邻接到的顶点序号由小到大),以及从顶点1为出发点,按深度和广度优先搜索策略遍历图 G 时所获得的顶点序列。
结构0分,邻接表、深度、广度各3分)
#define MAX_VERTEX_NUM 20
typedef struct ArcNode
{int adjvex;
struct ArcNode * nextarc;
InfoType * info;
}ArcNode ;
typedef struct VNode
{ VertexType data; // 顶点信息
ArcNode * firstarc; // 指向第一条依附顶点的弧的指针
}VNode, AdjList[MAX _VERTEX_NUM ];
typedef struct
{ AdjList vertices;
int vexnum, arcnum; // 图的当前顶点数和弧数
int kind; // 图的种类标志
} ALGraph;
DFS: 1 2 3 4 5 6
BFS: 1 2 3 4 6 5
3. 对上图所示的带权无向图,按普里姆算法求其最小生成树(写出求解的详细过程示意图)。(表6分,画出生成树2分)
1
2
3
4
5
U
V-U
k
adjvex
lowcost
0
2
0
7
0
5 0
6
{0}
{1,2,3,4,5}
1
adjvex
lowcost
0
1
4
0
5
1
5
0
6
{0,1}
{2,3,4,5}
2
adjvex
lowcost
0
0
2
3
2
4
0
6
{0,1,2}
{3,4,5}
3
adjvex
lowcost
0
0
0
2
4
3
3
{0,1,2,3}
{4,5}
5
adjvex
lowcost
0
0
0
5
2
0
{0,1,2,3,5}
{4}
4
adjvex
lowcost
0
0
0
0
0
{0,1,2,3,4,5}
{}
4.已知某电文中共出现了8种不同的字母,每个字母出现的频率分别为A:8,B:2,C:3,D:2,E:6,F:15,G:9,H:13,现在对这段电文用二进制进行哈夫曼编码(要求画出哈夫曼树)。哈夫曼树6分,编码3分
5.对于如下图所示的事件结点网络,求出各活动可能的最早开始时间和允许的最晚完成时间,并问哪些活动是关键活动。两张表6分,结论3分
ve
vl
1
0
0
2
7
13
3
6
6
4
5
8
5
12
18
6
19
19
7
17
20
10
22
22
1-2
1-3
1-4
2-5
3-5
3-6
4-6
2-7
4-7
5-10
6-10
7-10
e
0
0
0
7
6
6
5
7
5
12
19
17
l
6
0
3
13
14
6
14
17
8
18
19
20
6.Next3分,过程4分
1
2
3
4
5
6
next
0
1
2
3
1
1
1
2
3
4
5
6
nextval
0
0
0
3
1
0
五、算法设计题(先写出相应的存储结构的类型描述): (2*10)
1.假设采用邻接表来存储表示无向网G,试编写相应的深度优先搜索遍历算法。
2.查找二叉树
中所有值为x的结点的双亲。二叉树采用二叉链表结构。
typedef struct BiTNode
{ TElemType data;
struct BiTNode *lchild, *rchild; //左右孩子指针
} BiTNode, *BiTree;
void PreOrderTraverse(BiTree T, ElemType x)
{
if (T)
{ if (T->lchild&&T->lchild->data==x) printf(T->data);
if (T->rchild&&T->rchild->data==x) printf(T->data);
PreOrderTraverse(T->lchild,x) ;
PreOrderTraverse(T->rchild,x) ;
}
}
或
void PreOrderTraverse(BiTree T, ElemType x,BiTree parent )
{
if (T)
{ if (T-> data==x)
if(parent) printf(parent->data);
else printf("无双亲");
PreOrderTraverse(T->lchild,x,T) ;
知是一种快乐,好奇心知识的萌芽。——培根
PreOrderTraverse(T->rchild,x,T) ;
}
}
可运行的程序:
#include
#include
#include
#define YES 1
#define NO 0
char a[]="ABDCEF",b[]="BDAEFC"; //a为先序序列,b为中序序列
typedef int Status;
typedef char ElemType;
typedef struct BiNode{
ElemType data;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;
void createBiTree(int start1,int start2,int len,BiTree &T)
{ int pos,len1;
if(len>0)
{ pos=start2;
while(b[pos]!=a[start1]) pos++;
T=(BiTree)malloc(sizeof(BiNode));
T->data=a[start1];
len1=pos-start2;
createBiTree(start1+1,start2,len1,T->lchild);
createBiTree(start1+len1+1,start2+len1+1,len-len1-1,T->rchild);
}
else T=NULL;
}
Status findparent1(BiTree T, ElemType x,BiTree parent )
//parent为 T的双亲,初值为空
{
if (T)
{ if (T-> data==x)
{ if(parent) printf("%c",parent->data);
else printf("无双亲");
return YES;
}
if(!findparent1(T->lchild,x,T))
return findparent1(T->rchild,x,T) ;
else return YES;
}
else return NO;
}
int main()
{
int len,find;
len=strlen(a);
BiTree T;
createBiTree(0,0,len,T);
find=findparent1(T, 'M',NULL );
if(find==0) printf("没有该结点\n");
return 0;
}
方法二:
Status findparent2(BiTree T, ElemType x)
{
if (T)
{ if(T->data==x)
{ printf("没有双亲");return YES; }
if (T->lchild&&T->lchild->data==x)
{ printf("%c",T->data);return YES; }
if (T->rchild&&T->rchild->data==x)
{ printf("%c",T->data); return YES; }
if(!findparent2(T->lchild,x))
return findparent2(T->rchild,x) ;
else return YES;
}
return NO;
}
int main()
{
int len,find;
len=strlen(a);
BiTree T;
createBiTree(0,0,len,T);
find=findparent2(T, 'A' );
if(find==0) printf("没有该结点\n");
return 0;
}
方法三:
BiTree findparent3(BiTree T, ElemType x)
{ BiTree p;
if (T)
{ if(T->data==x) return T; //根为x,返回根
if (T->lchild&&T->lchild->data==x) //返回x的双亲
return T;
if (T->rchild&&T->rchild-
>data==x)
return T;
p=findparent3(T->lchild,x);
if(!p)
return findparent3(T->rchild,x) ;
else return p;
}
return NULL;
知是一种快乐,好奇心知识的萌芽。——培根
}
int main()
{
int len;
BiTree find;
len=strlen(a);
BiTree T;
ElemType x='A';
createBiTree(0,0,len,T);
find=findparent3(T,x );
if(find==T&&T->data==x)
printf("没有双亲");
else if(find==NULL) printf("没有该结点\n");
else printf("%c",find->data);
return 0;
}
知是一种快乐,好奇心知识的萌芽。——培根