zoukankan      html  css  js  c++  java
  • (ljb.h)邻接表

    #include<stdio.h>
    #include<stdlib.h>
    #define M 20
    typedef char type;
    typedef struct node//边表节点(边)
    {
        int adjvex;//邻接点
        struct node *next;
    }EdgeNode;
    typedef struct vnode//头结点
    {
        type vartex;//顶点信息
        EdgeNode *FirstEdge;//邻接表头指针(指向第一条边)
    }VertexNode;
    typedef struct//邻接表
    {
        VertexNode adjlist[M];//存放头节点的顺序表
        int n,e;//图的顶点数与边数
    }LinkedGraph;
    //从文件读入数据创建图的邻接表
    void creat(LinkedGraph *g,char *filename,int c)
    {
        int i,j,k;
        EdgeNode *s;
        FILE *fp;
        fp=fopen(filename,"r");
        if(fp)
        {
            fscanf(fp,"%d%d",&g->n,&g->e);//读入图的顶点数,边数
            for(i=0;i<g->n;i++)//读入顶点信息并将其邻接表头指针置空
            {
                fscanf(fp,"%1s",&g->adjlist[i].vartex);
                g->adjlist[i].FirstEdge=NULL;
            }
            for(k=0;k<g->e;k++)//读入每条边
            {
                fscanf(fp,"%d%d",&i,&j);//读入边的顶点序号
                s=(EdgeNode*)malloc(sizeof(EdgeNode));
                s->adjvex=j;//创建新节点并将其邻接点序号置为j
                s->next=g->adjlist[i].FirstEdge;//插入到其邻接表最前面
                g->adjlist[i].FirstEdge=s;
                if(c==0)//如果是无向图则对称处理
                {
                    s=(EdgeNode*)malloc(sizeof(EdgeNode));
                    s->adjvex=i;
                    s->next=g->adjlist[j].FirstEdge;
                    g->adjlist[j].FirstEdge=s;
                }
            }
            fclose(fp);
        }
        else g->n=0;
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    简单介绍数据流动的控制
    数据再寄存器中的暂时保存
    八位三态数据通路控制器的逻辑电路设计讲解
    什么是同步有限状态机???
    verilog逻辑复制
    流水线经典讲解!!!!!
    流水线(pipe-line)简介
    总线(BUS)和总线操作
    多路选择器(multiplexer)简介
    使用telnet发送HTTP请求
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768506.html
Copyright © 2011-2022 走看看