图的邻接链表实现(c)
2015-08-24 21:07
281 查看
参考:算法:C语言实现 一书
实现:
测试:
实现:
#ifndef GRAPH #define GRAPH #include<stdio.h> #include<stdlib.h> struct edge{ int v; int w; }; struct node{ int v; node* next; }; struct graph{ int v; int e; node** adj; }; node* NEW(int v,node* next) { node* x = (node*)malloc(sizeof(node)); x->v = v; x->next = next; return x; } graph* graphInit(int v) { graph* g = (graph*)malloc(sizeof(graph)); g->v = v; g->e = 0; g->adj = (node**)malloc(v*sizeof(node*)); for (int v = 0; v < g->v; ++v) g->adj[v] = NULL; return g; } void graphInsert(graph* g, edge e) { int v = e.v, w = e.w; g->adj[v] = NEW(w, g->adj[v]); g->adj[w] = NEW(v, g->adj[w]); ++g->e; } void graphShow(graph* g) { for (int v = 0; v < g->v; ++v){ printf("%d: ", v); node* p = g->adj[v]; while (p){ printf("%d ", p->v); p = p->next; } printf("\n"); } } #endif
测试:
#include"graph.h" #include<time.h> #include<queue> using namespace std; int main() { printf("\tgraph of list test:\n"); graph* g = graphInit(10); edge e[10]; for (int i = 0; i < 10; ++i){ srand(i); //使得每次运行产生的数据是一样的,便于分析 e[i].v = rand() % 10; e[i].w = rand() % 10; graphInsert(g, e[i]); } graphShow(g); printf("\n"); for (int i = 0; i < 10; ++i) printf("%d %d\n", e[i].v, e[i].w); printf("\n"); }
相关文章推荐
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof
- 双向链表(十)
- CSS选择器
- 链接地址和存储地址
- Windows 安装bugzilla
- KMP HDOJ 4300 Clairewd's message
- Spring Boot 内嵌Tomcat的端口号的修改
- 计划doing.....
- Failed to install metadata only whitespace content allowed before start tag and not \u0
- POJ 3522 生成树(kruskal)
- web.xml配置
- NSTimer 的用法
- FORM表单新增的一些特性
- List Feature
- jQuery学习笔记--标签切换
- 魅蓝note如何进行安卓开发调试
- Tomcat 7 域名访问配置一
- POJ 2492 A Bug's Life(种类并查集 + 偏移量)
- Android的常用基本控件ImageView、ListView
- 45.数据库