再回首,数据结构——图的常用术语,邻接矩阵、邻接表存储结构
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;
}
}
希望这些能提供给初学者一些参考。
//图的常用术语
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;
}
}
相关文章推荐
- 再回首,数据结构——树的常用术语、树和二叉树的存储结构
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 再回首,数据结构——以邻接矩阵、邻接表表示的图的深度、广度优先搜索
- 数据结构——图—概念和存储(邻接矩阵,邻接表)
- 数据结构之图的存储表示(邻接矩阵、邻接表和边集数组)
- 数据结构—图的存储—邻接表和邻接矩阵
- 第十一周 项目一 数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 【数据结构】图的存储方式:邻接矩阵和邻接表
- 数据结构——图的存储 邻接表
- 数据结构之图(术语、存储结构、遍历)
- 数据结构之图(邻接表存储,DFS和BFS遍历)