图的邻接表存储
2015-06-11 11:00
260 查看
邻接表是图的一种链式存储结构。在邻接表中,对图中的每个定点建立一个单链表,第i个单链表中的结点表示依附于定点vi的边。每个结点由三个域构成,表节点,头结点,还有存储图的。
如果像构建下图的一个图的结构
那么程序如下:
如果像构建下图的一个图的结构
那么程序如下:
#include<stdio.h> #include<stdlib.h> #define MAXNUM 100 typedef struct node //边表节点 { int adjvex; struct node* next; }EdgeNode; typedef struct //顶点表节点 { char vertex; EdgeNode* firstedge; }VertexNode; typedef struct { VertexNode adjlist[MAXNUM]; int n,e; }ALGraph; void create(ALGraph* G) { int i,j,k,w,v; EdgeNode *s; printf("读入顶点数和边数"); scanf("%d,%d",&G->n,&G->e); for (i=0;i<G->n;i++) { fflush(stdin); printf("建立顶点表"); G->adjlist[i].vertex=getchar(); G->adjlist[i].firstedge=NULL; } printf("建立边表\n"); for (k=0;k<G->e;k++) { printf("读入(vi-vj)的顶点对序号"); scanf("%d,%d",&i,&j); s=(EdgeNode*)malloc(sizeof(EdgeNode)); s->adjvex=j; s->next=G->adjlist[i].firstedge; //插入表头 G->adjlist[i].firstedge=s; s=(EdgeNode*)malloc(sizeof(EdgeNode)); s->adjvex=i; s->next=G->adjlist[j].firstedge; G->adjlist[j].firstedge=s; } } int main() { int i; ALGraph* G= (ALGraph*)malloc(sizeof(ALGraph)); create(G); for (i=0;i< G->n;i++) { printf("%d->",i); while(G->adjlist[i].firstedge!=NULL) { printf("%d->",G->adjlist[i].firstedge->adjvex); G->adjlist[i].firstedge=G->adjlist[i].firstedge->next; } printf("\n"); } }
相关文章推荐
- 猫都能学会的Unity3D Shader入门指南(一)
- char与byte差异
- 给多个表批量添加一列并赋予默认值
- POJ 2436
- POJ 2421
- POJ 2418
- 杭电ACM2024java做法
- 面试题杂货铺(四)
- php判断一个值是否在一个数组中,区分大小写-也可以判断是否在键中
- Linux-软连接与硬链接
- iOS各机型参数对比
- LeetCode 之 Swap Nodes in Pairs — C 实现
- Java实现验证码图片
- 黑马程序员——java基础2
- 3 way quick sort
- NDK的APP_STL与APP_LDFLAGS
- Android官方文档-Services(服务)
- Reverse Linked List
- Linux下Makefile的编写
- Leetcode[153]-Find Minimum in Rotated Sorted Array