图的邻接链表实现(c)
参考:算法:C语言实现 一书
实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #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 |
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #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" ); } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥