в структуре данных графика с использованием списка ссылок изменяются значения узлов

#c #data-structures

Вопрос:

это графическая структура данных с использованием списка ссылок. поэтому я застрял на том, что значения узла изменены. сначала я помещаю вывод, а затем код. почему это происходит.

(

это выводится в значениях узла im-печати, и они изменились, почему

введите число ребер= 4

введите номер узла 4

#0#1#2#3

#1#2#0#3

введите соединение

)

//вот код

 #include <iostream>
using namespace std;
struct graph
{
    int nn;
    int ne;
    struct node *a;
};

struct node
{
    int x;
    node *next;
};
void makegraph(graph *amp;g)
{

    cout << "enter no of edges=" << endl;
    cin >> g->ne;
    cout << "enter no of nodes" << endl;
    cin >> g->nn;
    g->a = new node[g->nn];
    node *q;
    node *ih = g->a;
    for (int i = 0; i < g->nn; i  )
    {
        ih->x = i;
        cout << "#" << ih->x;
        ih->next = NULL;
        ih = ih   i;
    }
    cout << endl;

    int ii = 0;
    ih = g->a;
    while (ii < 4)
    {
        cout << "#" << (ih   ii)->x;

        ii  ;
    }
    cout << endl;
    int t, y;
    node *temp = NULL;

    for (int i = 0; i < g->ne; i  )
    {

        cout << "enter connection" << endl;

     ****output is of till here****


        cin >> t >> y;
        q = new node;
        q->x = y;
        q->next = NULL;
        g->a = g->a   t;
        temp = g->a;
        while (temp->next != NULL)
        {
            temp = temp->next;
        }

        temp->next = q;
        g->a = g->a - t;
    }
    g->a = ih;
}

int main()
{
    graph *g = new graph;
    makegraph(g);
    
}
 

Комментарии:

1. что означает ih » nn , ne «? Не могли бы вы, пожалуйста, добавить комментарий к их названию, чтобы объяснить их аббревиатуру? (Кроме того, это действительно плохая практика-называть переменные таким образом. Назовите их полными словами, как next_node мне кажется . в противном случае другим будет трудно понять ваш код.)

2. ih = ih i это не имеет смысла. На первой итерации цикла ih указывает на g->a[0] . На втором, это снова указывает на g->a[0] (так ih = ih i как нет операции, когда i == 0 ). На третьем, это указывает на g->a[1] . На четвертом, к g->a[3] ; g->a[2] пропускается. Вот как вы в конечном итоге сохранили 1, 2 и 3 в узлах 0, 1 и 3. Значение в узле 2 на самом деле является неинициализированным мусором; оно случайно равно нулю.

3. @ignortandetnik хорошо понял, я должен написать ih=ih 1;