Скопировать все отрицательные элементы исходного в новый список - 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;
}
Объяснение кода листинга программы
В этом коде создается список (связанный список) с помощью динамического выделения памяти. Пользователю предлагается ввести некоторое количество целых чисел, после чего программа выводит исходный список, а затем копирует в новый список все отрицательные числа из исходного списка.
- Создаются две структуры:
TListиnode_t. - В функции
main()создаются два указателя:listиnewlist, которые будут указывать на голову списка. - В цикле
whileпользователь вводит числа, которые добавляются в список. - Затем выводится исходный список с помощью цикла
for. - Далее, в цикле
forпроходится по списку и проверяется условиеif, если значениеdataотрицательное, то создается новый узел, копируется значениеdataи добавляется в новый список. - Выводится новый список с помощью цикла
for. - В конце программы вызывается функция
system(pause), чтобы программа не закрылась сразу, и пользователь мог увидеть результат. - Возвращается значение 0, что означает успешное завершение программы.