数据结构邻接矩阵邻接表图实验报告Word格式.docx

上传人:b****5 文档编号:20729283 上传时间:2023-01-25 格式:DOCX 页数:17 大小:208.23KB
下载 相关 举报
数据结构邻接矩阵邻接表图实验报告Word格式.docx_第1页
第1页 / 共17页
数据结构邻接矩阵邻接表图实验报告Word格式.docx_第2页
第2页 / 共17页
数据结构邻接矩阵邻接表图实验报告Word格式.docx_第3页
第3页 / 共17页
数据结构邻接矩阵邻接表图实验报告Word格式.docx_第4页
第4页 / 共17页
数据结构邻接矩阵邻接表图实验报告Word格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据结构邻接矩阵邻接表图实验报告Word格式.docx

《数据结构邻接矩阵邻接表图实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构邻接矩阵邻接表图实验报告Word格式.docx(17页珍藏版)》请在冰豆网上搜索。

数据结构邻接矩阵邻接表图实验报告Word格式.docx

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

returni;

}

if(i=G.vexnum)

printf("

输入的顶点不合法\n"

);

return0;

}

VertexTypev1,v2;

VRTypew;

voidCreateUDG(MGraph&

G)

inti,j,k;

printf("

请输入顶点数:

\n"

scanf("

%d"

&

G.vexnum);

请输入弧数:

G.arcnum);

i=0;

while(i<

G.vexnum)

请输入第%d个顶点\n"

i);

getchar();

scanf("

%c"

G.vexs[i]);

++i;

for(i=0;

for(j=0;

j<

++j)

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

for(k=0;

k<

G.arcnum;

++k)

请输入一条边依附的顶点及权值(v1v2w)\n"

%c%c%d"

v1,&

v2,&

w);

i=LocateVex(G,v1);

j=LocateVex(G,v2);

G.arcs[i][j].adj=w;

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

return;

voidDFSTraverse(MGraph&

G,inti)

%c"

G.vexs[i]);

Visit[i]=true;

for(intj=0;

j++)

if(G.arcs[i][j].adj==1&

&

!

Visit[j])

{

DFSTraverse(G,j);

}

voidDFS(MGraph&

inti;

i++)Visit[i]=false;

i++)

if(!

Visit[i])

DFSTraverse(G,i);

voidmain()

MGraphgraph;

CreateUDG(graph);

顶点集合为:

"

for(inti=0;

graph.vexnum;

graph.vexs[i]);

\n深度遍历结果是:

DFS(graph);

2.

#include"

stdlib.h"

typedefintInfoType;

typedefVertexTypeQElemType;

boolvisited[MaxVertexNum];

typedefstructArcNode

intadjvex;

//该弧指向的顶点位置

structArcNode*nextarc;

//指向下一条弧的指针

InfoType*info;

}ArcNode;

typedefstructVNode

VertexTypedata;

//顶点信息

ArcNode*firstarc;

//指向第一条依附该顶点的弧的指针

}VNode,AdjList[MaxVertexNum];

typedefstruct

AdjListvertices;

}ALGraph;

typedefstructQNode

QElemTypedata;

structQNode*next;

}QNode,*Queueptr;

Queueptrfront;

Queueptrrear;

}LinkQueue;

voidInitQueue(LinkQueue&

Q)

Q.front=Q.rear=(Queueptr)malloc(sizeof(QNode));

if(!

Q.front)return;

Q.front->

next=NULL;

voidEnQueue(LinkQueue&

Q,QElemTypee)

Queueptrp=NULL;

p=(Queueptr)malloc(sizeof(QNode));

p)return;

p->

data=e;

Q.rear->

next=p;

Q.rear=p;

QElemTypeDeQueue(LinkQueue&

Q,QElemType&

e)

Queueptrp;

if(Q.front==Q.rear)return'

'

;

p=Q.front->

next;

e=p->

data;

next=p->

if(Q.rear==p)

Q.rear=Q.front;

free(p);

returne;

intQueueEmpty(LinkQueueQ)

if(Q.front==Q.rear)

return1;

else

return0;

intLocate(ALGraphG,VertexTypev)

for(intk=0;

if(v==G.vertices[k].data)

returnk;

if(k=G.vexnum)

voidCreateALGraph(ALGraph&

VertexTypev1,v2;

ArcNode*p,*r;

请输入顶点数和弧数(以空格分开):

"

%d%d"

G.vexnum,&

请输入第%d个结点:

G.vertices[i].data);

G.vertices[i].firstarc=NULL;

请输入第%d条弧(格式:

顶点顶点(以空格隔开)):

%c%c"

v2);

k=Locate(G,v1);

j=Locate(G,v2);

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

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

p->

adjvex=j;

info=NULL;

r->

adjvex=k;

nextarc=G.vertices[k].firstarc;

G.vertices[k].firstarc=p;

nextarc=G.vertices[j].firstarc;

G.vertices[j].firstarc=r;

voidBFSTraverse(ALGraphG,QElemTypex)

inti,v;

ArcNode*p;

QElemTypev1;

for(v=0;

v<

++v)

visited[v]=false;

LinkQueueQ;

InitQueue(Q);

EnQueue(Q,x);

i=Locate(G,x);

visited[i]=true;

while(!

QueueEmpty(Q))

DeQueue(Q,v1);

printf("

v1);

i=Locate(G,v1);

p=G.vertices[i].firstarc;

while(p!

=NULL)

{

if(!

visited[p->

adjvex])

{

visited[p->

adjvex]=true;

EnQueue(Q,G.vertices[p->

adjvex].data);

}

p=p->

nextarc;

}

visited[v])

visited[v]=true;

EnQueue(Q,G.vertices[v].data);

charflag1;

ALGraphgraph2;

QElemTypex;

CreateALGraph(graph2);

flag1='

Y'

while(flag1=='

||flag1=='

y'

请输入遍历的起点:

x);

广度遍历结果是:

BFSTraverse(graph2,x);

\n继续遍历(Y/N):

flag1);

3.

#defineStackInitSize20

#defineStackIncrement5

typedefVertexTypeSElemType;

typedefstruct

SElemType*base;

SElemType*top;

intstacksize;

}SqStack;

typedefstructArcNode

intindegree;

boolInitStack(SqStack&

s)

s.base=(SElemType*)malloc(StackInitSize*sizeof(SElemType));

s.base)returnfalse;

s.top=s.base;

s.stacksize=StackInitSize;

returntrue;

boolPop(SqStack&

s,int&

if(s.top==s.base)

returnfalse;

e=*--s.top;

boolPush(SqStack&

s,inte)

if(s.top-s.base>

=s.stacksize)

s.base=(SElemType*)realloc(s.base,(s.stacksize+StackIncrement)*sizeof(SElemType));

s.base)

returnfalse;

s.top=s.base+s.stacksize;

s.stacksize+=StackIncrement;

*s.top++=e;

boolStackEmpty(SqStacks)

if(s.top==s.base)

returntrue;

else

}

G)//邻接表存储

G.vertices[i].indegree=0;

请输入第%d条有向弧弧(格式:

voidFindInDegree(ALGraphG,inta[MaxVertexNum])

inti,k;

for(p=G.vertices[i].firstarc;

p;

p=p->

nextarc)

k=p->

adjvex;

a[k]=++G.vertices[k].indegree;

voidTopologicalSort(ALGraphG)//拓扑排序算法

inti,j,count;

SqStacks;

intindegree[MaxVertexNum];

MaxVertexNum;

indegree[i]=0;

FindInDegree(G,indegree);

InitStack(s);

indegree[i])

Push(s,i);

count=0;

while(!

StackEmpty(s))

Pop(s,i);

G.vertices[i].data);

++count;

j=p->

if(!

(--indegree[j]))Push(s,j);

if(count<

错误!

该有向图有回路!

elsereturn;

ALGraphgraph3;

CreateALGraph(graph3);

拓扑排序的结果是:

TopologicalSort(graph3);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1