数据结构测验(二)

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



知是一种快乐,好奇心知识的萌芽。——培根

相关文档
最新文档