您的位置:首页 > 理论基础 > 数据结构算法

再回首,数据结构——图的常用术语,邻接矩阵、邻接表存储结构

2015-05-28 11:27 316 查看
       最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
 
      希望这些能提供给初学者一些参考。
 
//图的常用术语
 
1.邻接点;

2.顶点的度、入度、出度;

3.完全图、稠密图和稀疏图;

4.子图;

5.路径;

6.连通图、连通分量;

7.强连通图、强连通分量;

8.权、网;

//邻接矩阵的存储结构
#define MaxSize 顶点数目
typedef struct
{
VexType vexs[MaxSize]; //顶点数组
int arcs[MaxSize][MaxSize]; //顶点矩阵
int vexnum,arcnum//顶点边弧数
}AdjMatrix;

//建立图的邻接矩阵
typedef char VexType;
void CreateAMgraph(AdjMatrix *g)
{
printf("Please input vexnum and arcnum:\n");
scanf("%d",&g->vexnum);
scanf("%d",&g->arcnum);
getchar();
//建立顶点数组
for(i=0;i<g->vexnum;i++)
scanf("%c",&g->vexs[i]);

//初始化邻接矩阵
for(i=0;i<g->vexnum;i++)
for(j=0;i<g->vexnum;j++)
g->arcs[i][j]=0;

//根据顶点更新矩阵
for(i=0;i<g->vexnum;i++)
{
scanf("%d%d",&i,&j); //输入边(i,j),i,j为顶点序号
arcs[i][j]=1;
arcs[j][i]=1;
}
}

//邻接表的存储结构
#define MaxSize 顶点数目

//边节点
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
otherinfo info;
}ArcNode;

//表头节点
typedef struct VertexNode
{
VertexType data;
ArcNode *firstarc;
}VertexNode;

//邻接表节点
typedef struct
{
VertexNode vertex[MaxSize];
int vexnum,arcnum;
}AdjList;

//建立图的邻接表
typedef char VexType;
void CreateALGraph(AdjList *g)
{
printf("Please input vexnum and arcnum:\n");
scanf("%d",&g->vexnum);
scanf("%d",&g->arcnum);
getchar();

//建立表头节点表
for(i=0;i<g->vexnum;i++)
{
scanf("%c",&g->vertex[i].data);
g->vertex[i].firstarc=NULL; //边表置为空
}

//建立边节点
for(k=0;k<g->arcnum;k++)
{
scanf("%d%d",&i,&j); //输入边(i,j),i,j为顶点序号
s=(ArcNode *)malloc(sizeof(ArcNode));
s->adjvex=j;
s->nextarc=g->vertex[i].firstarc;
g->vertex[i].firstarc=s;

s=(ArcNode *)malloc(sizeof(ArcNode));
s->adjvex=i;
s->nextarc=g->vertex[j].firstarc;
g->vertex[j].firstarc=s;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构