Реализация списка смежности графа (C)

Я пытаюсь создать соседнее представление ist графа в C, используя следующие определения...

typedef struct edge
{
    int to_vertex;
    int weight;
} Edge;

typedef struct edgeNode
{
    Edge edge;
    struct edgeNode *next;
} *EdgeNodePtr;

typedef struct edgeList
{
    EdgeNodePtr head;
} EdgeList;

typedef struct graph
{
    int V;
    EdgeList *edges;
} Graph;

Основной функцией для создания и добавления всех значений на график является

    int numEdges;
    int edgeToVertex;
    int weight;
    EdgeNodePtr new_node;
    Graph G;

    EdgeNodePtr current;
    int *inDeg;


    scanf("%d", &G.V);
    G.edges = malloc(G.V * sizeof(EdgeList));

    for (int i = 0; i < G.V; i++)
    {
        scanf("%d", &numEdges);
        G.edges[i].head = NULL;


        for (int j = 0; j < numEdges; j++)
        {
            new_node = malloc(sizeof(*new_node));

            scanf("%d,%d", &edgeToVertex, &weight);
            new_node->edge.to_vertex = edgeToVertex;
            new_node->edge.weight = weight;

            new_node->next = G.edges[i].head;
            new_node = G.edges[i].head;

        }
    }

По какой-то причине я не могу понять, что граф не будет создан, и я попытался запустить это, и он добавит узел, но узел всегда будет одним и тем же. Любая помощь приветствуется


person Secernere    schedule 21.05.2018    source источник
comment
OT: Не вводите указатели typedef. Это всегда приводит к путанице.   -  person 4386427    schedule 21.05.2018
comment
Оказывается, просто моя IDE глупа и не распознает массив ребер.   -  person Secernere    schedule 21.05.2018


Ответы (1)


Это выглядит странно:

        new_node->next = G.edges[i].head;
        new_node = G.edges[i].head;

когда вы перезаписываете new_node на head.

Возможно, вы хотите сделать:

        new_node->next = G.edges[i].head;
        G.edges[i].head = new_node;

чтобы head указывало на новый узел.

person 4386427    schedule 21.05.2018
comment
Определенно помогло, однако все еще не уверен, правильно ли я выделяю память для краев. Разве он не должен образовывать массив - person Secernere; 21.05.2018