Пользователь связанных списков вставляет узел (C) - PullRequest
0 голосов
/ 05 мая 2020

Я хочу создать связанный список, в который пользователь вставляет узлы. В этом коде я буду использовать таблицы (но сейчас это не моя проблема) и метод печати (что сейчас тоже не моя проблема).

Я хочу сохранить в каждом узле следующие данные:

1) ROW (int)

2) COLUMN (int)

3) VALUE (float)

Я хочу каждый раз, когда вставляется узел (это будет вставлен в первую позицию), заголовок будет ссылкой на первый узел (который был вставлен).

Например, я хочу быть примерно таким:

Введите row: 2

Введите столбец: 3

Введите значение: 7

Теперь голова должна ссылаться на этот узел следующим образом:

HEAD - > 237 -> NULL.

И затем я снова использую тот же метод для вставки нового узла со следующими данными:

строка: 1

столбец: 2

значение: 9

И теперь мой результат должен быть: HEAD -> 129 -> 237 -> NULL.

Как я могу это сделать?

I иметь следующий код:

typedef struct node     {
int     row;            /* element' s row */
int     column;         /* element's column*/
float   value;          /* Value of element*/
struct  node * next; } node;    /* next element */

typedef struct table{   
node *  head;                   
int     number_of_rows;         
int     number_of_columns;}table;




void insertNode(table * input) {

struct node *nod;

printf("Enter the number of rows: "); /*Nevermind for this */
scanf("%d" , &input->number_of_rows);

printf("Enter the number of columns : "); /*Nevermind for this */
scanf("%d" , &input->number_of_columns);

/* My question is about the following code */ 

printf("\n Enter the row : ");
scanf("%d" , &nod->row);

printf("Enter the column : ");
scanf("%d" , &nod->column);

printf("Enter the value : ");
scanf("%f" , &nod->value); }
* 103 9 * Я не знаю, как использовать переменную head и как я могу ссылаться на первый узел, поэтому я не использовал другие переменные.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Похоже, вы хотите ввести всю таблицу в insertNode, поскольку вы читаете значения для input->number_of_rows и input->number_of_columns. В рамках инициализации таблицы вы должны пометить список как пустой, установив head на NULL:

    input->head = NULL;

Для каждого нового узла, добавляемого в список, вам необходимо динамически распределять хранилище:

    nod = malloc(sizeof(struct node));

Для надежности вы должны проверить успешное выделение памяти и предпринять соответствующие действия в случае сбоя (nod будет NULL в случае сбоя выделения):

    if (nod == NULL) {
        /* just an example of one way to handle the error */
        fprintf(stderr, "Node allocation failure\n");
        exit(EXIT_FAILURE);
    }

Используйте следующий код, чтобы добавить новый узел в начало списка:

    nod->next = input->head;
    input->head = nod;
0 голосов
/ 05 мая 2020

Вы объявили указатель на структуру, но не указали на действительный адрес памяти. Измените struct node *nod; на struct node *nod=malloc(sizeof(node));

...