~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌
✌ 题目及题解持续更新中
【2023王道数据结构目录】课后算法设计题C、C++代码实现完整版大全
题目: 通过C++实现利用邻接表法存储创建图结构
代码实现:
#includeusing namespace std; #define MAX_VERTEX_NUM 100 // 边表结点 typedef struct EdgeNode { int adjvex; // 该结点在顶点表中位置 struct EdgeNode *next; //指向下一条边的指针 } EdgeNode; //顶点表结点 typedef struct VertexNode { char data; // 顶点信息 EdgeNode *first; // 指向相邻的第一个边表结点 } VertexNode, AdjList[MAX_VERTEX_NUM]; //邻接表 typedef struct { AdjList adj_list; // 邻接表 int vertex_num, edge_num; //顶点数量,边数量 } Graph; void InitGraph(Graph &g, char vertex[], int edge[][5], int n) { g.vertex_num = n; // 初始化图的顶点数量 g.edge_num = 0; // 初始化邻接表 for (int i = 0; i < n; i++) { g.adj_list[i].data = vertex[i]; // 初始化顶点信息 g.adj_list[i].first = NULL; // 将指针置为空 EdgeNode *p = NULL; // 定义工作指针,用于创建边表结点 // 创建每个顶点的边链表 for (int j = 0; j < n; j++) { // 如果存在路径,采用头插法创建边表 if (edge[i][j] != 0) { p = new EdgeNode; // 创建一个边表结点 p->adjvex = j; // 邻接的结点信息 // 头插法 p->next = g.adj_list[i].first; g.adj_list[i].first = p; // 图的边数目加1 g.edge_num++; } } } // 由于是有向图,边数需要除以2 g.edge_num /= 2; } void PrintGraph(Graph g) { for (int i = 0; i < g.vertex_num; i++) { // 打印顶点表信息 cout << g.adj_list[i].data << ": "; EdgeNode *p = g.adj_list[i].first; // 初始化工作指针,指向第一个边表结点 while (p) { cout << g.adj_list[p->adjvex].data << 't'; // 打印边表信息 p = p->next; // 指向下一个相邻结点 } cout << endl; } } void InitGraph(Graph &g) { char vertex[] = {'1', '2', '3', '4', '5'}; //图的顶点名称 //图的邻接矩阵 int edge[5][5] = { {0, 1, 0, 1, 0}, {1, 0, 1, 0, 1}, {0, 1, 0, 1, 1}, {1, 0, 1, 0, 0}, {0, 1, 1, 0, 0}}; InitGraph(g, vertex, edge, 5); } int main() { Graph g; InitGraph(g); PrintGraph(g); cout << g.edge_num << 't' << g.vertex_num; }



