Разбиение списка чисел на два новых - с отрицательными и положительными числами

Для набора действительных чисел, представленных в виде списка, построить два списка: положительных и отрицательных чисел. Задание №3(ПРОСТЫЕ СПИСКИ) (см. "Сборник задач для начинающего программиста").

Алгоритм:

-Создаём структуру "Titem",которая будет хранить число из введённого списка и указатель на следующее число.

-Описываем функцию "add_item" добавляющую в список числа, вводимые с клавиатуры.

-Описываем функцию "clear", очищающую память от структур типа "Titem".

-Запускаем функцию "add_item" для чисел вводимых с клавиатуры.

-Выводим на экран исходный список.

-Добавляем отрицательные элементы в новый список, сравнивая все числа исходного списка с 0.

-Добавляем положительные элементы в новый список, сравнивая все числа исходного списка с 0.

-Выводим вновь полученные списки на экран.

-Очищаем память от вышеперечисленных списков.

#include<stdio.h>
#include<conio.h>  //библиотека с функцией GETCH
 
struct Titem{   //Создаём структуру "Titem",которая будет хранить число из введённого списка и указатель на следующее число
  int n;
  Titem *next;
} *start, *last, *p, *startp, *startm, *lastp, *lastm;
 
int v;
 
void add_item(int v){
 
  Titem *p;       //Описываем функцию "add_item" добавляющую в список числа, вводимые с клавиатуры.
  if (start == NULL){
    start= new Titem;
    start->n=v;
    start->next=NULL;
    last=start;
  }
  else {
    p=new Titem;
    p->n=v;
    p->next=NULL;
    last->next=p;
    last=p;
  }
 
  return;
}
 
void clear (Titem *start){ //Описываем функцию "clear", очищающую память от структур типа "Titem"
  Titem *p,*p1;
  p=start;
  while (p!=NULL){
    p1=p->next;
    delete p;
    p=p1;
  }
  return;
}
 
int main () {
  printf("Введите набор чисел (закончив ввод нажмите ctrl+z)\n");
 
  start=NULL; last=NULL;
  startp=NULL; lastp=NULL;  startm=NULL; lastm=NULL;
 
  Titem *p1, *p2;
  while (scanf("%d",&v)!= EOF){  //Запускаем функцию "add_item" для чисел вводимых с клавиатуры
    add_item(v);
  }                              //ctrl+z заканчивает ввод элементов
 
  p=start;
  while (p!=NULL){
    printf ("%d ", p->n);        //Выводим на экран исходный список
    p=p->next;
  }
 
  p=start;
  while(p!=NULL){
 
    if (p->n <0){          //Добавляем отрицательные элементы в новый список, сравнивая все числа исходного списка с 0
 
      if (startm == NULL){
	startm= new Titem;
	startm->n=p->n;
	startm->next=NULL;
	lastm=startm;
      }
      else {
	p1=new Titem;
	p1->n=p->n;
	p1->next=NULL;
	lastm->next=p1;
	lastm=p1;
      }
    }
    else {                 //Добавляем положительные элементы в новый список, сравнивая все числа исходного списка с 0
      if (startp == NULL){
	startp= new Titem;
	startp->n=p->n;
	startp->next=NULL;
	lastp=startp;
      }
      else {
	p2=new Titem;
	p2->n=p->n;
	p2->next=NULL;
	lastp->next=p2;
	lastp=p2;
      }
    }
    p=p->next;
  }
 
  printf ("\n");
 
  p=startm;               //выводим на экран список с отрицательными числами
  while (p!=NULL){
    printf ("%d ", p->n);
    p=p->next;
  }
 
  printf ("\n");
 
  p=startp;               //выводим на экран список с положительными числами
  while (p!=NULL){
    printf ("%d ", p->n);
    p=p->next;
  }
 
  clear(start);
  clear(startm);
  clear(startp);
 
  getch();   //задерживает экран до нажатия любой клавиши
 
  return 0;
}

Ключевые слова: 
Списки, создание новых списков, сортировка списков
ВложениеРазмер
Prog1.rar9.97 кб