数据结构学习笔记,用C语言实现图的邻接表存储与深度优先遍历

        图的存储结构主要分为邻接表存储与邻接矩阵存贮,我们先来实现一下邻接表存储。首先是邻接表的定义。

typedef struct ArcNode{
    int ps;//节点的位置
    struct ArcNode *next;
}ArcNode;

typedef struct ArcList{
    int data;//节点所存储的信息
    ArcNode    *first;
}ArcList,Arc[Max];

typedef struct ALGraph{
    Arc V;//tu
    int vex,arc;//结点数目与边数
    bool visited[Max];//是否已经被访问
}ALGraph;

需要定义一个邻接表,我们需要定义三个结构体,第一个结构体表示指向结点的信息(包括一个记录位置的整形变量与一个指向下一个结点的指针),第二个结构体表示结点的信息(data可以是int也可以是其他),第三个结构体表示这个图本身,包括图的节点数与边数,还有结点是否被访问的信息。

图的初始化:

图的初始化时,我们先输入图的结点数与边数,再利用for循环初始化visited与给结点赋初值(结点的信息),随后再根据边数进入for循环,确定结点的链接过程(1连接2,2连接3.....),随后根据结点的位置,将结点连接起来。

void InitALGraph(ALGraph &Ve){
    scanf("%d",&Ve.vex);//输入结点数
    scanf("%d",&Ve.arc);//bianshu
    for(int i=0;i<Max;i++){
        Ve.visited[i]=false;
    }
    for(int i=0;i<Ve.vex;i++){
        scanf("%d",&Ve.V[i].data);//shurujiedianxinxi
        Ve.V[i].first=NULL;
    }

    for(int i=0;i<Ve.arc;i++){
        int x,y;
        scanf("%d",&x);
        scanf("%d",&y);
        int temp1,temp2;
        temp1=search(Ve,x);
        temp2=search(Ve,y);
        ArcNode *p=(ArcNode*)malloc(sizeof(ArcNode));
        p->ps=temp2;
        p->next=Ve.V[temp1].first;
        Ve.V[temp1].first=p;
        ArcNode *q=(ArcNode*)malloc(sizeof(ArcNode));
        q->ps=temp1;
        q->next=Ve.V[temp2].first;
        Ve.V[temp2].first=q;
    }

}

图的深度优先遍历:

void visit(ALGraph Ve,int ps){
    ArcNode *p;
    int j;
    Ve.visited[ps]=true;
    printf("Node is %d",Ve.V[ps].data);
    printf("\n");
    p=Ve.V[ps].first;
    while(p!=NULL){
        j=p->ps;
            if(Ve.visited[j]==false){
                visit(Ve,j);
            }
        p=p->next;
    }
}

写的不是很详细,过几天会更新来补充。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值