Скопировать все отрицательные элементы исходного в новый список - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Однонаправленный линейный список, скопировать все отрицательные элементы в новый список. Просто создаю список эл-тов.
Листинг программы
  1. #include <iostream.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #define N 5
  5. struct List
  6. { int data;
  7. List* next;};
  8. List *root,*q,*p, *t;
  9. int main()
  10. {
  11. int i;
  12. q=new List;
  13. cout <<"vvedite chisla:\n";
  14. cin >>q->data;
  15. root = q;
  16. for (i=1; i < N; i++)
  17. {
  18. q->next=new List;
  19. q = q ->next;
  20. cin >>q->data;
  21. q->next=NULL;
  22. }
  23. q = root;
  24. cout <<"Data:";
  25. while (q!=NULL)
  26. {
  27. cout <<" "<<q->data;
  28. q=q->next;
  29. }
  30. q = root;
  31. t = q;
  32. q = root;
  33. cout << "\nresult:";
  34. while (q!=NULL)
  35. {
  36. cout <<" "<<q->data;
  37. q=q->next;
  38. }
  39. cout <<"\n";
  40. system("pause");
  41. return 0;
  42. getch();
  43. }

Решение задачи: «Скопировать все отрицательные элементы исходного в новый список»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct node_t
  5. {
  6.    int data;
  7.    struct node_t* next;
  8. }  TList;
  9.  
  10. int main()
  11. {
  12.    TList* list = NULL;
  13.    TList* newlist = NULL;
  14.    TList* node, * tmp;
  15.    int data;
  16.  
  17.    printf("input numbers: ");
  18.    while (scanf("%d", &data))
  19.    {
  20.       node = (TList*) malloc(sizeof(TList));
  21.       node->data = data;
  22.       node->next = list;
  23.       list = node;
  24.    }
  25.  
  26.    printf("source: ");
  27.    for (node = list; node; node = node->next)
  28.    {
  29.       printf("%d ", node->data);
  30.    }
  31.    printf("\n");
  32.  
  33.    for (node = list; node; node = node->next)
  34.    {
  35.       if (node->data < 0)
  36.       {
  37.          tmp = (TList*) malloc(sizeof(TList));
  38.          tmp->data = node->data;
  39.          tmp->next = newlist;
  40.          newlist = tmp;
  41.       }
  42.    }
  43.  
  44.    printf("result: ");
  45.    for (node = newlist; node; node = node->next)
  46.    {
  47.       printf("%d ", node->data);
  48.    }
  49.    printf("\n");
  50.  
  51.    system("pause");
  52.    return 0;
  53. }

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

В этом коде создается список (связанный список) с помощью динамического выделения памяти. Пользователю предлагается ввести некоторое количество целых чисел, после чего программа выводит исходный список, а затем копирует в новый список все отрицательные числа из исходного списка.

  1. Создаются две структуры: TList и node_t.
  2. В функции main() создаются два указателя: list и newlist, которые будут указывать на голову списка.
  3. В цикле while пользователь вводит числа, которые добавляются в список.
  4. Затем выводится исходный список с помощью цикла for.
  5. Далее, в цикле for проходится по списку и проверяется условие if, если значение data отрицательное, то создается новый узел, копируется значение data и добавляется в новый список.
  6. Выводится новый список с помощью цикла for.
  7. В конце программы вызывается функция system(pause), чтобы программа не закрылась сразу, и пользователь мог увидеть результат.
  8. Возвращается значение 0, что означает успешное завершение программы.

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


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

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

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы