数据结构测试二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4-1 邻接矩阵存储图的深度优先遍历 (20分)
试实现邻接矩阵存储图的深度优先遍历。函数接口定义:
void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );
其中MGraph是邻接矩阵存储的图,定义如下:
typedefstructGNode *PtrToGNode;
structGNode{
intNv; /* 顶点数*/
int Ne; /* 边数*/
WeightType G[MaxVertexNum][MaxVertexNum]; /* 邻接矩阵*/
};
typedefPtrToGNodeMGraph; /* 以邻接矩阵存储的图类型*/
函数DFS应从第V个顶点出发递归地深度优先遍历图Graph,遍历时用裁判定义的函数Visit 访问每个顶点。当访问邻接点时,要求按序号递增的顺序。题目保证V是图中的合法顶点。裁判测试程序样例:
#include
typedefenum {false, true} bool;
#define MaxVertexNum 10 /* 最大顶点数设为10 */
#define INFINITY 65535 /* ∞设为双字节无符号整数的最大值65535*/
typedefint Vertex; /* 用顶点下标表示顶点,为整型*/
typedefintWeightType; /* 边的权值设为整型*/
typedefstructGNode *PtrToGNode;
structGNode{
intNv; /* 顶点数*/
int Ne; /* 边数*/
WeightType G[MaxVertexNum][MaxVertexNum]; /* 邻接矩阵*/
};
typedefPtrToGNodeMGraph; /* 以邻接矩阵存储的图类型*/
bool Visited[MaxVertexNum]; /* 顶点的访问标记*/
MGraphCreateGraph(); /* 创建图并且将Visited初始化为false;裁判实现,细节不表*/
void Visit( Vertex V )
{
printf(" %d", V);
}
void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );
int main()
{
MGraph G;
Vertex V;
G = CreateGraph();
scanf("%d", &V);
printf("DFS from %d:", V);
DFS(G, V, Visit);
return 0;
}
/* 你的代码将被嵌在这里*/
输入样例:给定图如下
5
输出样例:
DFS from 5: 5 1 3 0 2 4 6
(无答案)
4-5 顺序表操作集 (10分)
本题要求实现顺序表的操作集。函数接口定义:
List MakeEmpty();
Position Find( List L, ElementType X );
bool Insert( List L, ElementType X, Position P );
bool Delete( List L, Position P );
其中List结构定义如下:
typedefint Position;
typedefstructLNode *List;
structLNode {
ElementTypeData[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置*/
};
各个操作函数的定义为:
List MakeEmpty():创建并返回一个空的线性表;
Position Find( List L, ElementType X ):返回线性表中X的位置。若找不到则返回ERROR;bool Insert( List L, ElementType X, Position P ):将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false;
bool Delete( List L, Position P ):将位置P的元素删除并返回true。若参数P指向非法位置,则打印“POSITION P EMPTY”(其中P是参数值)并返回false。
裁判测试程序样例:
#include
#include
#define MAXSIZE 5
#define ERROR -1
typedefenum {false, true} bool;
typedefintElementType;
typedefint Position;
typedefstructLNode *List;
structLNode {
ElementTypeData[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置*/
};
List MakeEmpty();
Position Find( List L, ElementType X );
bool Insert( List L, ElementType X, Position P );
bool Delete( List L, Position P );
int main()
{
List L;
ElementType X;
Position P;
int N;
L = MakeEmpty();
scanf("%d", &N);
while ( N-- ) {
scanf("%d", &X);
if ( Insert(L, X, 0)==false )
printf(" Insertion Error: %d is not in.\n", X);
}
scanf("%d", &N);
while ( N-- ) {
scanf("%d", &X);
P = Find(L, X);