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

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

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

Однонаправленный линейный список, скопировать все отрицательные элементы в новый список. Просто создаю список эл-тов.
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#define N 5
struct List
{ int data;
List* next;};
List *root,*q,*p, *t;
int main()
{
    int i;
    q=new List;
    cout <<"vvedite chisla:\n";
    cin >>q->data;
    root = q;
    for (i=1; i < N; i++)
    {
        q->next=new List;
        q = q ->next;
        cin >>q->data;      
        q->next=NULL;
    }
    q = root;
    cout <<"Data:";
    while (q!=NULL)
    {
        cout <<" "<<q->data;
        q=q->next;
    }
    q = root;
    t = q;
    q = root;
    cout << "\nresult:";
        while (q!=NULL)
        {
            cout <<" "<<q->data;
            q=q->next;
        }
        cout <<"\n";
    system("pause");
    return 0;
    getch();
}

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
typedef struct node_t
{
   int data;
   struct node_t* next;
}  TList;
 
int main()
{
   TList* list = NULL;
   TList* newlist = NULL;
   TList* node, * tmp;
   int data;
 
   printf("input numbers: ");
   while (scanf("%d", &data))
   {
      node = (TList*) malloc(sizeof(TList));
      node->data = data;
      node->next = list;
      list = node;
   }
 
   printf("source: ");
   for (node = list; node; node = node->next)
   {
      printf("%d ", node->data);
   }
   printf("\n");
 
   for (node = list; node; node = node->next)
   {
      if (node->data < 0)
      {
         tmp = (TList*) malloc(sizeof(TList));
         tmp->data = node->data;
         tmp->next = newlist;
         newlist = tmp;
      }
   }
 
   printf("result: ");
   for (node = newlist; node; node = node->next)
   {
      printf("%d ", node->data);
   }
   printf("\n");
 
   system("pause");
   return 0;
}

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

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

  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
Похожие ответы