- 实验内容
- 有向图邻接表表示
- 代码内容
- 运行结果
- 总结
建立有向图的邻接表存储并求出第i个顶点的出度并输出
#include#define MVNum 100 //最大顶点数 #define OK 1; #define ERROR 0; typedef int Status; typedef char VerTexType; //顶点的数据类型定为字符型 using namespace std; //存储边的信息 typedef struct ArcNode{ Status adjvex; //该边所指向的顶点的位置 //ArcNode *nextarc;//和下面是一样的效果 struct ArcNode *nextarc; //指向下一条边的指针 Status arcs; //该条边的权值 }ArcNode; //存储定点信息 typedef struct VNode{ VerTexType data; //存储顶点内容 ArcNode *firstarc; //指向第一条依附该顶点的边的指针 }VNode,AdjList[MVNum];//结构体数组,顺序结构存储 //邻接表 typedef struct ALGraph{ AdjList vertices; Status vexnum,arcnum; //图当前顶点数和边数 }ALGraph; //寻找v1,v2在G中的位置 Status LocateVex(ALGraph G,VerTexType v){ for(int i=0;i >G.vexnum>>G.arcnum; //输入总顶点数,总边数 cout<<"依次输入点的信息"< >G.vertices[i].data; //输入点信息 G.vertices[i].firstarc=NULL; //初始化表头结点的指针域为NULL } VerTexType v1,v2; Status w,i,j; for(int k=0;k >v1>>v2>>w; //找到v1 v2的位置 i=LocateVex(G,v1); j=LocateVex(G,v2); ArcNode *p1=new ArcNode; //生成一个新的边节点*p1 p1->adjvex=j; //邻接点序号为j p1->nextarc=G.vertices[i].firstarc; //nextarc(指针域)置空 G.vertices[i].firstarc=p1; //将新节点*p1插入顶点v1的边表 头部 p1->arcs=w; //边 的权值 } return OK; } Status OutDegree(ALGraph G,int n){ int count=0; ArcNode *p; //定义边的指针 p=G.vertices[n].firstarc; //指针指向要查找顶点的边 while(p!=NULL){ count++; p=p->nextarc; //指向下一条边 } return count; } main(){ ALGraph G; int n; CreateDG(G);//邻接表创建有向图 cout<<"请输入要查找的顶点,输入 -1 退出"< >n&&n!=-1){ cout<<"第"< 运行结果 总结 主要考察我们对邻接表的理解,出度的理解,结构体指针的使用
邻接表便于增加和删除顶点,便于统计边的数目,但不便于判断点与点之间是否有边,不便于计算各个顶点的度



