顺序表查找算法的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法与数据结构讲义实验五图的建立及遍历操作

一、实验目的

1.掌握图的存储结构和相关操作。

2.能够熟练用计算机来表示图和进行图处理。

二、实验环境

1.硬件:每个学生需配备计算机一台。操作系统:DOS或Windows;

2.软件:DOS或Windows操作系统+Turbo C;

三、实验要求 1.要求对于给定的图分别用邻接矩阵和邻接表示来存储。

2.对于存储好的图进行深度和广度优先遍历。

3.完成图的各种操作。

四、实验内容

1.现在某网络公司的光纤连接结点如下图所示,请分别用邻接矩阵和邻接表将图存储到计算机中方便进行处理。

2.现在某网络公司的光纤连接结点如下图所示,请分别用邻接矩阵和邻接表将图存储到计算机中方便进行处理。

五、代码如下

第一个实验

#include

#include

using namespace std;

#define MAX 20

typedef int Adj[MAX][MAX];

typedef struct{

string vexs[MAX]; //顶点表

Adj arcs; //邻接矩阵

int vexnum,arcnum; //图的顶点和弧数}MGraph;

int ylx_LocateVex(MGraph &G,string u);

int ylx_CreateUDN(MGraph &G){

int i,k,j;string v1,v2;

cout<<"请输入顶点数、弧数:";

cin>>G.vexnum>>G.arcnum;

cout<<"输入顶点:";

for(i=0;i

cin>>G.vexs[i]; //构造顶点数}

for(i=0;i

for(j=0;j

G.arcs[i][j]=0; } }

for(k=0;k

cout<<"输入第"<

cin>>v1>>v2;

i=ylx_LocateVex(G,v1);

j=ylx_LocateVex(G,v2);

G.arcs[i][j]=1;

G.arcs[j][i]=1; //置的对称弧

}

return 0;}

int ylx_LocateVex(MGraph &G,string u){

//确定u在G中序号

int i;

for (i=0;i

if (u==G.vexs[i])

return i; }

if (i==G.vexnum){

cout<<"Error u!"<

exit(1); }

return 0;}

void ylx_ShowG(MGraph &G){

int i,j;

for(i=0;i

cout<

cout<

for(i=0;i

for(j=0;j

cout<

}

cout<

main(){MGraph A;

int a;

a=ylx_CreateUDN(A);

ylx_ShowG(A);}

第二个实验

#include

# include

# include

# include

using namespace std;

int visited[30];

# define MAX_VERTEX_NUM 30

# define OK 1

//typedef int VertexType;

typedef int InfoType;

typedef struct ArcNode //弧

{ int adjvex;

struct ArcNode *nextarc;

}ArcNode;

typedef struct VNode//表头

{ int data;

ArcNode *firstarc;

}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct//图

{ AdjList vertices;

int vexnum,arcnum;

int kind;

}ALGraph;

void ylx_CreateDG(ALGraph &G)

{ int k,i,v1;

cout<

cin>>G.vexnum;

cout<<"请输入弧的个数: ";

cin>>G.arcnum;

for(i=1;i<=G.vexnum;i++)//初使化表头 { G.vertices[i].data=i;

G.vertices[i].firstarc=NULL; }

for(k=1;k<=G.vexnum;k++) //输入边

{ int v2;

cout<<"请输入与结点"<

cin>>v2;

cout<<"请输入与第"<

cin>>v1;

ArcNode *p;

p=(ArcNode*)malloc(sizeof(ArcNode));

if(!p) exit(-1);

p->adjvex=v1;

p->nextarc=NULL;

G.vertices[k].firstarc=p;

for(int i=1;i

{ int m;

cout<<"请输入与第"<

cin>>m;

ArcNode *q;

q=(ArcNode

*)malloc(sizeof(ArcNode));//动态指针

if(!q) exit(-1);

q->adjvex=m; //顶点给P

q->nextarc=NULL;

p->nextarc=q;

p=q;

//free(q); }

//free(p); } }

void ylx_DFS (ALGraph G,int v )//深度搜索{visited[v]=1;

cout<

ArcNode *x;

x=(ArcNode*)malloc(sizeof(ArcNode));

if(!x) exit(-1);

x=G.vertices[v].firstarc;

int w;

for (;x;x=x->nextarc)

{ w=x->adjvex;

if(visited[w]==0)

ylx_DFS(G,w); } }

void ylx_DFSB (ALGraph G,int v)//深度搜索的

相关文档
最新文档