参考:算法: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");
}

  

图的邻接链表实现(c)的更多相关文章

  1. 稀疏图(邻接链表),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)

    全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...

  2. 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)

    数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边& ...

  3. 数据结构之---C语言实现图的邻接表存储表示

    // 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...

  4. 图论——图的邻接表实现——Java语言(完整demo)

    1.图的简单实现方法——邻接矩阵 表示图的一种简单的方法是使用一个一维数组和一个二维数组,称为领接矩阵(adjacent matrix)表示法. 对于每条边(u,v),置A[u,v]等于true:否则 ...

  5. c_数据结构_图_邻接表

    课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...

  6. 图的邻接表存储表示(C)

    //---------图的邻接表存储表示------- #include<stdio.h> #include<stdlib.h> #define MAX_VERTEXT_NUM ...

  7. 图的邻接表存储 c实现

    图的邻接表存储 c实现 (转载) 用到的数据结构是 一个是顶点表,包括顶点和指向下一个邻接点的指针 一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针 刚开始的时候把顶点表初始化 ...

  8. 基于visual Studio2013解决算法导论之054图的邻接矩阵表示

     题目 图的邻接矩阵表示 解决代码及点评 // 图的邻接矩阵表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <l ...

  9. 基于visual Studio2013解决算法导论之053图的邻接表表示

     题目 图的邻接表表示 解决代码及点评 // 图的邻接表表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <sta ...

随机推荐

  1. UIScrollView基本使用

    - (void)viewDidLoad { [super viewDidLoad]; scrollView = [[UIScrollView alloc] initWithFrame:CGRectMa ...

  2. css单位和值

    css需要单位来度量.内含整数.小数.百分数的情况,很多条件下支持正负的情况,当然是有限制的了.百分数基本是相对于自身.或是父或是祖先元素的某个属性值. 颜色         颜色的表示分为:命名颜色 ...

  3. shell 学习

    将maven 项目里面的jar 包导出目录: 在项目里面执行: mvn dependency:copy-dependencies -DoutputDirectory=lib shell 参数之间必有空 ...

  4. Spring学习之Ioc控制反转(2)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

  5. HDU 1033 - Edge

    题目很水 然翻译感人 顺时针或者逆时针走,输出坐标 #include <iostream> using namespace std; ]; int p; ]={,,,-,}; ]={,,- ...

  6. Android 技巧记录

    1.取消EditText自动获取焦点 在项目中,一进入一个页面, EditText默认就会自动获取焦点,弹出输入法界面,很不友好.那么如何取消这个默认行为呢? 解决之道:在EditText的父级控件中 ...

  7. Python : 熟悉又陌生的字符编码(转自Python 开发者)

    Python : 熟悉又陌生的字符编码 字符编码是计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概 ...

  8. SQLite header and source version mismatch 解决方案

    我下载了sqlite源码,并且configure, make, make install. 然后就出现SQLite header and source version mismatch  的错误. 上 ...

  9. 关于const限定符

    1.  指向非常量数据的非常量指针 具有最高的数据访问极限 .不包含const关键字. 2. 指向常量数据的非常量指针 指针可以被改写,使其指向相应类型的任何数据项, 但是它所指向的数据项的值是不能被 ...

  10. shell提示符显示git当前分支

    编辑/etc/profile或者~/.bashrc 在行末添加如下内容 # 获取git当前分支 git_branch() { branch='' cd $PWD if [ -d '.git' ]; t ...