数据结构Word格式文档下载.docx
- 文档编号:15045823
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:15
- 大小:61.45KB
数据结构Word格式文档下载.docx
《数据结构Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
/*邻接点域*/
structedgenode*next;
/*指向下一个边结点的链域*/
};
voidCreatel(vexlistGV,adjmatrixGA,intn,inte)
inti,j,k;
/*建立顶点数组*/
printf("
请输入%d个顶点:
"
n);
for(i=0;
i<
n;
i++)
scanf("
%d"
&
GV[i]);
for(j=0;
j<
j++){
GA[GV[i]][GV[j]]=0;
}
pleaseinput%dlines:
\n"
e);
for(k=0;
k<
e;
k++){
%d%d"
i,&
j);
/*输入一条边的两端点序号i和j*/
GA[i][j]=GA[j][i]=1;
outputadjacencymatrix:
i++){
j++)
GA[GV[i]][GV[j]]);
);
}
/*定义adjlist为存储n个表头指针的数组类型*/
typedefstructedgenode*adjlist[MaxVertexNum];
voidCreate2(vexlistGV,adjlistGL,intn,inte)
/*通过从键盘上输入的e条有向无权边的信息建立顶点数组GV和邻接表GL*/
/*初始化邻接表,即将表头向量中的每个域置空*/
for(i=0;
i<
i++)GL[GV[i]]=NULL;
/*建立邻接表*/
for(k=1;
k<
=e;
k++){
structedgenode*p;
structedgenode*q;
/*输入一条边<
i,j>
*/
scanf("
/*由系统分配2个新结点*/
p=malloc(sizeof(structedgenode));
q=malloc(sizeof(structedgenode));
/*将j的值赋给新结点的邻接点域*/
p->
adjvex=j;
q->
adjvex=i;
/*将新结点插入到Vi、Vj邻接表的表头*/
next=GL[i];
GL[i]=p;
next=GL[j];
GL[j]=q;
voidOutputAdjlist(vexlistGV,adjlistGL,intn)
/*输出一个图的邻接表*/
inti;
structedgenode*p;
%d:
GV[i]);
for(p=GL[GV[i]];
p!
=NULL;
p=p->
next)
p->
adjvex);
voiddfs1(vexlistGV,adjmatrixGA,inti,intn)
/*从初始点vi出发深度优先搜索由邻接矩阵GA表示的图*/
intj;
/*假定访问顶点vi以输出该顶点的序号代之*/
i);
/*标记vi已被访问过*/
visited[i]=1;
/*依次优先搜索访问vi的每个邻接点*/
j<
j++){
/*若vi的一个有效邻接点vj未被访问过,则从vj出发进行递归调用*/
if(GA[i][GV[j]]!
=0&
&
!
visited[GV[j]])
dfs1(GV,GA,GV[j],n);
voiddfs2(adjlistGL,inti,intn)
printf("
p=GL[i];
while(p!
=NULL){
intj=p->
adjvex;
if(!
visited[j])dfs2(GL,j,n);
p=p->
next;
structQueueSq{
ElemType*queue;
/*指向存储队列的数组空间*/
intfront,rear,len;
/*队首指针、队尾指针、队列长度变量*/
intMaxSize;
/*queue数组长度*/
voidInitQueue(structQueueSq*Q)
/*置队列空间初始最大长度为10*/
Q->
MaxSize=10;
/*动态存储空间分配*/
queue=malloc(10*sizeof(ElemType));
/*置队列为空*/
front=Q->
rear=0;
voidagainMalloc(structQueueSq*Q)
{/*空间扩展为原来的2倍,并由p所指向,原内容被自动拷贝到p所指向的存储空间中*/
ElemType*p;
p=realloc(Q->
queue,2*Q->
MaxSize*sizeof(ElemType));
p)
{/*分配失败退出运行*/
error!
exit
(1);
/*使queue指向新的队列空间*/
queue=p;
/*把原队列的尾部内容向后移动MaxSize个位置*/
if(Q->
rear!
=Q->
MaxSize-1)
{
rear;
i++)
queue[i+Q->
MaxSize]=Q->
queue[i];
/*队尾指针后移MaxSize个位置*/
rear+=Q->
MaxSize;
/*把队列空间大小修改为新的长度*/
MaxSize=2*Q->
voidEnQueue(structQueueSq*Q,ElemTypex)
/*当队列满时进行动态重分配*/
if((Q->
rear+1)%Q->
MaxSize==Q->
front)againMalloc(Q);
/*求出队尾的下一个位置*/
rear=(Q->
/*把item的值赋给新的队尾位置*/
queue[Q->
rear]=x;
ElemTypeOutQueue(structQueueSq*Q)
/*若队列为空则终止运行*/
front==Q->
rear){
/*使队首指针指向下一个位置*/
front=(Q->
front+1)%Q->
/*返回队首元素*/
returnQ->
front];
intEmptyQueue(structQueueSq*Q)
rear)
return1;
else
return0;
voidbfs1(vexlistGV,adjmatrixGA,inti,intn)
/*从初始点vi出发广度优先搜索由邻接矩阵GA表示的图*/
/*定义一个队列Q,其元素类型应为整型,初始化队列为空*/
structQueueSqQ;
InitQueue(&
Q);
/*队列数组空间大小被预分配为10*/
/*访问初始点vi,同时标记初始点vi已访问过*/
EnQueue(&
Q,i);
/*将已访问过的初始点序号i入队*/
/*当队列非空时进行循环处理*/
while(!
EmptyQueue(&
Q)){
/*删除队首元素,第一次执行时k的值为i*/
intk=OutQueue(&
/*依次搜索vk的每一个可能的邻接点*/
j++)/*顶点序号j入队*/
if(GA[k][GV[j]]!
visited[GV[j]]=1;
/*标记vj已访问过*/
GV[j]);
/*访问一个未被访问过的邻接点vj*/
Q,GV[j]);
voidbfs2(adjlistGL,inti)
Q))
/*删除队首元素*/
structedgenode*p=GL[k];
/*取邻接表的表头指针*/
while(p!
=NULL)/*依次搜索vk的每个邻接点*/
/*vj为vk的一个邻接点*/
visited[j])
j);
visited[j]=1;
Q,j);
/*使p指向vk邻接表的下一个边结点*/
main()
intm,n,e,i;
vexlistGV;
adjmatrixGA;
adjlistGL;
pleaseinputnumberofpointsandlines:
%d%d"
n,&
e);
Createl(GV,GA,n,e);
Create2(GV,GL,n,e);
outputadjacencylist:
OutputAdjlist(GV,GL,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构