利用十字链表存储树结构(便于同时求出某一点的入度与出度)------C语言实现...

#include <stdio.h>
#include<conio.h>
#include<stdlib.h>

/*
利用十字链表存储有向图,可用于同时查找某个顶点的出度与入度;
*/

typedef struct edge {//顶点表
    int headvex, tailvex;//headvex弧的七点在顶点表中的下标,tailvex是边的重点在顶点表中的下标
    edge *headlink, *taillink;//headlink指向与边相同起点的边,taillink指向与边相同终点的边
}Edge;

typedef struct vex {//边表
    int data;//顶点表数据
    Edge *firstin, *firstout;//firstin表示指向第一个入边,firstout指向第一个出边
}Vex;

typedef struct vexedge {
    Vex ve[100];
    int vexnum, edgenum;
}Vexedge;

//创建表

void create(Vexedge *v) {
    Edge *e;
    int i, j, k;
    printf("请输入顶点个数与边的条数:");
    scanf("%d%d", &v->vexnum, &v->edgenum);
    for (i = 0; i<v->vexnum; i++) {//初始化顶点表
        printf("请输入顶点的值:");
        scanf("%d", &v->ve[i].data);
        v->ve[i].data = getchar();
        v->ve[i].firstin = NULL;
        v->ve[i].firstout = NULL;
    }
    for (k = 0; k<v->edgenum; k++) {//初始化边表
        printf("请输入边的顶点坐标");
        scanf("%d%d", &i, &j);
        e = (Edge *)malloc(sizeof(Edge));
        e->headvex = i;
        e->tailvex = j;
        e->headlink = v->ve[i].firstout;
        e->taillink = v->ve[j].firstin;
        v->ve[i].firstout = e;
        v->ve[j].firstin = e;
    }
}

void degree(int n, Vexedge v) {
    int sumin = 0, sumout = 0;
    Edge *e1, *e2;
    e2 = v.ve[n].firstout;
    e1 = v.ve[n].firstin;
    while (e1) {
        sumin++;
        e1 = e1->taillink;
    }
    while (e2) {
        sumout++;
        e2 = e2->headlink;
    }
    printf("出度为:%d 入度为:%d", sumout, sumin);
}

int main() {
    Vexedge v;
    int m;
    create(&v);
    printf("请输入你想要查询的顶点:");
    scanf("%d", &m);
    degree(m, v);
    getch();
    return 0;

}

 

转载于:https://www.cnblogs.com/lin0/p/6502451.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值