Вывести на экран веденные списки - C (СИ)
Формулировка задачи:
Пытаюсь вывести на экран веденные списки, но ничего не печатается.
int main() { SLIST *lst1; // адрес начала списка SLIST *lst2; lst1 = (SLIST*)malloc(sizeof(slist)); lst2 = (SLIST*)malloc(sizeof(slist)); init_slist(lst1); init_slist(lst2); int N,N2; printf("\nINPUT SIZE OF THE SPISOK: "); scanf("%d",&N); // ввод размера списка PNODE nd; // указатель на последний элемент printf("\nINPUT DATE:"); do{ // цикл формирования списка nd=(PNODE)malloc(sizeof(node)); nd=prepand(lst1,nd); if(nd==NULL) // выход из цикла break; N--; // счетчик введенных элементов } while(N > 0); // пока необходимо вводить элементы printf("\n\n\nOur SPISOK:"); print_to_slist(lst1); // вывод на печать сформированного списка fflush(stdin); //free(nd); PNODE nd1; printf("\nINPUT SIZE OF THE SPISOK: "); scanf("%d",&N2); // ввод размера списка //PNODE first2=NULL; // указатель на последний элемент printf("\nINPUT DATE:"); do{ // цикл формирования списка nd1=(PNODE)malloc(sizeof(node)); nd1=prepand(lst2,nd1); if(nd1==NULL) // выход из цикла break; N2--; // счетчик введенных элементов } while(N2 > 0); // пока необходимо вводить элементы printf("\n\n\nOur SPISOK:"); print_to_slist(lst2); return 0; }
PNODE prepand(SLIST *l,PNODE nd) { //PNODE nd; // указатель на новый элемент static int num=1; // номер вводимого элемента //nd=(PNODE)malloc(sizeof(node)); // выделение памяти для элемента printf("\n\t%d element: ",num); scanf("%d",&nd->info); // ввод данных if(nd->info==0) // окончание ввода данных { free(nd); return NULL; } fflush(stdin); // очищение буфера ввода nd->next=NULL; if(is_slist_empty(l)) { l->head = l->tail =nd; nd->next = NULL; l->count = 1; } else{ nd->next = l->head; l->head = nd; num++; } // счетчик элементов return nd; }
Решение задачи: «Вывести на экран веденные списки»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> typedef struct Node_t { int info; struct Node_t* next; } Node; typedef struct List_t { Node* head; Node* tail; } List; //----------------------------------------------------------------------------- List* push(List* list, int info) { Node* node = malloc(sizeof(Node)); node->info = info; node->next = NULL; if (list->head == NULL) { list->head = list->tail = node; } else { list->tail->next = node; list->tail = node; } return list; } //----------------------------------------------------------------------------- void write(const List* list) { const Node* node = list->head; for (; node; node = node->next) { printf("%d ", node->info); } printf("\n"); } //----------------------------------------------------------------------------- List* read(List* list, int cnt) { int info; while ((cnt--) && (scanf("%d", &info) == 1)) { push(list, info); } return list; } //----------------------------------------------------------------------------- int main() { List list1 = {NULL, NULL}; List list2 = {NULL, NULL}; int n1, n2; printf("input size list: "); scanf("%d", &n1); read(&list1, n1); write(&list1); printf("input size list: "); scanf("%d", &n2); read(&list2, n2); write(&list2); return 0; }
Объяснение кода листинга программы
В данном коде реализована работа с двумя связанными списками. Они состоят из узлов, каждый из которых содержит целочисленную информацию и ссылку на следующий узел.
- Создаются структуры
Node
иList
. В структуреNode
содержится информация о узле, а именно целочисленное значение и указатель на следующий узел. В структуреList
содержатся указатели на голову и хвост списка. - Функция
push
добавляет новый узел в начало списка. Если список пуст, то новый узел становится и головой, и хвостом. В противном случае новый узел добавляется в начало списка, а указатель на хвост обновляется. - Функция
write
выводит на экран все узлы списка, последовательно перебирая их. - Функция
read
считывает из консоли список целочисленных значений и добавляет их в список с помощью функцииpush
. Количество считываемых значений ограничено указанным параметром. - В функции
main
создаются два пустых списка. Затем пользователь вводит количество элементов для каждого списка, после чего список заполняется с помощью функцииread
. Наконец, списки выводятся на экран с помощью функцииwrite
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д