图的链接表存储的小问题!!在线等

OICQshenshi 2012-05-14 03:36:17
请教,for(k=0;k<g->e;k++)里面的内容为何要插入两次,他的意义是否是做入度和出度各一次。如果从存储的角度,是无向图的话保留1个vi或vj是否就行了呢?
#include <stdio.h>
#include <malloc.h>

#define MaxVertexNum 100
//表结点
typedef struct node
{
int adjvex; //邻接点在图中的位置
node *nextarc;//下一个顶点域
int info; //数据域,存储与弧或边的相关信息
}EdgeNode;
//头结点
typedef struct
{
int vexdata;//头结点数据域
EdgeNode *firstarc;//指向链表的第一个结点
}VertexNode,AdjList[MaxVertexNum];//AdjList是邻接表类型

typedef struct
{
AdjList adjlist; //邻接表
int n,e; //图中当前顶点数和边数
}ALGraph;
//建立无向图的邻接表
void CreateALGraph(ALGraph *g)
{
int i,j,k;

printf("请输入无向图的邻接表顶点数,边数:\n");
scanf("%d%d",&g->n,&g->e);

//建立顶点表
for(i=0;i<g->n;i++)
{
g->adjlist[i].vexdata=i;
g->adjlist[i].firstarc=NULL;
}
//建立边表
EdgeNode *s;
for(k=0;k<g->e;k++)
{
printf("请输入边表的对应顶点vi,vj的位置:");
scanf("%d%d",&i,&j);
s=(EdgeNode *)malloc(sizeof(EdgeNode));//生成边表结点
s->adjvex=j; //邻接点序号为j
s->nextarc=g->adjlist[i].firstarc;
g->adjlist[i].firstarc=s; //将新结点*s插入顶点vi的表头部
s=(EdgeNode *)malloc(sizeof(EdgeNode));
s->adjvex=i; //邻接结点序号为i
s->nextarc=g->adjlist[j].firstarc;
g->adjlist[j].firstarc=s; //将新结点*s插入结点vj的表头部


}

}
void main()
{

}

请教,for(k=0;k<g->e;k++)里面的内容为何要插入两次,他的意义是否是做入度和出度各一次。如果从存储的角度,是无向图的话保留1个vi或vj是否就行了呢?
...全文
55 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
OICQshenshi 2012-05-15
  • 打赏
  • 举报
回复
自己搞定了..

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧