Вывести на экран веденные списки - 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;
}

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

В данном коде реализована работа с двумя связанными списками. Они состоят из узлов, каждый из которых содержит целочисленную информацию и ссылку на следующий узел.

  1. Создаются структуры Node и List. В структуре Node содержится информация о узле, а именно целочисленное значение и указатель на следующий узел. В структуре List содержатся указатели на голову и хвост списка.
  2. Функция push добавляет новый узел в начало списка. Если список пуст, то новый узел становится и головой, и хвостом. В противном случае новый узел добавляется в начало списка, а указатель на хвост обновляется.
  3. Функция write выводит на экран все узлы списка, последовательно перебирая их.
  4. Функция read считывает из консоли список целочисленных значений и добавляет их в список с помощью функции push. Количество считываемых значений ограничено указанным параметром.
  5. В функции main создаются два пустых списка. Затем пользователь вводит количество элементов для каждого списка, после чего список заполняется с помощью функции read. Наконец, списки выводятся на экран с помощью функции write.

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


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

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

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