Односвязный список, вывод элементов не работает - C (СИ)
Формулировка задачи:
ЯЗЫК СИ. ПОМОГИТЕ! Что надо поменять??? На ВХОД Длина списка и потом сами элементы списка. ВЫХОД Элементы списка. ПРОБЛЕМА В ТОМ, ЧТО ПРОГА ЦИКЛИТСЯ И ВЫВОДИТ ПОСЛЕДНИЙ ВВЕДЕННЫЙ ЭЛЕМЕНТ #include <stdio.h>
#include <stdlib.h> typedef struct type_node //Односвязный список { int data; struct type_node *next; } node; int main(void) { node *spis , *tmp; int n, i , a; scanf("%d", &n); for (i=0; i < n; i++) { spis = malloc(sizeof(node)); scanf("%d", &a); spis->data = a; spis = spis->next; } spis->next = NULL; while(spis != NULL) { printf("%d", spis->data); spis->next = spis; } while(spis != NULL) { printf("%d", spis->data); spis = spis->next; } return 0; }
Решение задачи: «Односвязный список, вывод элементов не работает»
textual
Листинг программы
#pragma hdrstop #pragma argsused #include <stdio.h> #include <tchar.h> #include <stdlib.h> typedef struct type_node //Односвязный список { int data; struct type_node *next; } node; int _tmain(int argc, _TCHAR* argv[]) { node *spis , *tmp, *first, *prev = NULL; int n, i , a; char timeout; printf("Please enter size list: "); scanf("%d", &n); for (i=0; i < n; i++) { spis = malloc(sizeof(node)); printf("Please enter element %d list: ", i); scanf("%d", &a); spis->data = a; if (i == 0) { first = spis; prev = first; }else { prev->next = spis; prev = prev->next; } //память не выделена, а вы двигаетесь вперед //spis = spis->next; } //spis последний элемент списка spis->next = NULL; //присвоение первом элементу spis = first; printf("Elements list: "); while(spis != NULL) { printf("%d ", spis->data); /* Ваш: spis->next = spis; Циклится вокруг последнего элемента */ spis = spis->next; } printf("\r\n"); //Лишний код /* while(spis != NULL) { printf("%d", spis->data); spis = spis->next; } */ //Задержка экрана printf("Please Press Enter symbol 'e' for exit program..."); while (1) { scanf("%c", &timeout); if (timeout == 'e') break; } return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
, , . - Определяется структура узла односвязного списка (node). Узел содержит целочисленное значение и указатель на следующий узел.
- Задаётся размер списка, для чего пользователю предлагается ввести число с клавиатуры.
- В цикле формируется список, где каждый узел заполняется значениями, введёнными пользователем.
- Последний элемент списка не указывает на следующий узел, инициализируется как NULL.
- Указатель
spis
получает значениеfirst
, то есть ссылку на первый элемент списка. - В цикле по всем элементам списка выводятся значения этих элементов.
- В конце программы запрашивается символ 'e' для выхода из программы. Пока этот символ не будет введен, программа будет продолжать выводить на экран список.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д