Ввод элементов в связный список, пока не будет введено "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", &current->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;
}

Объяснение кода листинга программы

В этом коде создаётся связный список, который наполняется значениями, вводимыми пользователем.

  1. Структура связного списка — структура данных, которая представляет собой набор узлов, каждый из которых содержит значение и ссылку (или указатель) на следующий узел в списке.
  2. Описание структуры — в начале кода объявляется структура list, которая содержит целочисленное значение и указатель на следующий элемент списка.
  3. Ввод значений — в цикле while программа запрашивает у пользователя ввод целочисленного значения и сохраняет его в переменной value.
  4. Выделение памяти под новый элемент списка — после ввода каждого значения программа выделяет под него память с помощью функции malloc и сохраняет указатель на новый элемент в переменной current.
  5. Создание связи между новым элементом и остальными — если список пуст, новый элемент становится его головой. Если же список уже содержит элементы, новый элемент добавляется в конец списка, и указатель на него сохраняется в next предыдущего элемента.
  6. Обход списка и вывод значений — после завершения ввода все элементы списка обходятся в цикле while, и для каждого элемента выводится его значение.
  7. Освобождение памяти — когда все элементы списка были обработаны, необходимо освободить память, выделенную под каждый из них. Но в данном коде эта операция не выполняется, и указатели на список и его голову остаются в памяти.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы