数据结构测试二

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

相关文档
最新文档