Ввод элементов в связный список, пока не будет введено "q" - C (СИ)
Формулировка задачи:
Здраствуйте! При создании масива нужно, чтобы он создавал новый элемент пока юзер не введёт q. Но при выполнении почему выводит все, кроме первого элемента и вместо последнего - 0.
struct list { int value; struct list *next; }; int main(int argc, char const *argv[]){ int i; struct list *head = NULL; struct list *previous, *current; while(getchar() != 'q'){ current = (struct list *)malloc(sizeof(struct list)); if (head == NULL) head = current; else previous->next = current; current->next = NULL; scanf("%d", ¤t->value); previous = current; } current = head; while(current != NULL){ printf("%d\n",current->value); current = current->next; }
Решение задачи: «Ввод элементов в связный список, пока не будет введено "q"»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> struct list { int value; struct list *next; }; int main() { int value; struct list *head = NULL; struct list *previous, *current; while (scanf("%d", &value) == 1) { current = malloc(sizeof(struct list)); current->next = NULL; current->value = value; if (head == NULL) { head = current; } else { previous->next = current; } previous = current; } current = head; while (current != NULL) { printf("%d\n", current->value); current = current->next; } return 0; }
Объяснение кода листинга программы
В этом коде создаётся связный список, который наполняется значениями, вводимыми пользователем.
- Структура связного списка — структура данных, которая представляет собой набор узлов, каждый из которых содержит значение и ссылку (или
указатель
) на следующий узел в списке. - Описание структуры — в начале кода объявляется структура
list
, которая содержит целочисленное значение и указатель на следующий элемент списка. - Ввод значений — в цикле while программа запрашивает у пользователя ввод целочисленного значения и сохраняет его в переменной
value
. - Выделение памяти под новый элемент списка — после ввода каждого значения программа выделяет под него память с помощью функции malloc и сохраняет указатель на новый элемент в переменной
current
. - Создание связи между новым элементом и остальными — если список пуст, новый элемент становится его головой. Если же список уже содержит элементы, новый элемент добавляется в конец списка, и указатель на него сохраняется в
next
предыдущего элемента. - Обход списка и вывод значений — после завершения ввода все элементы списка обходятся в цикле while, и для каждого элемента выводится его значение.
- Освобождение памяти — когда все элементы списка были обработаны, необходимо освободить память, выделенную под каждый из них. Но в данном коде эта операция не выполняется, и указатели на список и его голову остаются в памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д