//Создать двунаправленный список - стек,
//вывести его на печать в 2 направлениях.
//Определить элементы, кратные 3  и их количество.
// Описание библиотек
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

// Описание Элемента двунаправленного списка
struct elem{
    int num;
    elem *next;
    elem *pred;
    };
// Описание переменных
    elem *first, *cur, *tmp, *last;
    char snum[10];
 int  main()
 {
     int n,k;
     puts("Input integer value or ENTER");
// Создание первого элемента списка
  first=new elem;
  puts("");
  gets(snum);
  first->num=atoi(snum);  // Преобразование строки в число
  first->next=NULL;
  first->pred=NULL;
  last=first;
// Цикл по формированию списка
   while(gets(snum),strlen(snum)!=0)
   { cur=new elem;
      cur->num=atoi(snum);
    cur->next=first;
    first->pred=cur;
    cur->pred=NULL;
    first=cur;
   }
// Печать списка в двух направлениях
  puts("-----------inputed spisok first -> last----------\n-");
  cur=first;
  while(cur!=NULL)
  { printf("%5d",cur->num);
  cur=cur->next;
}
  printf("\n");
  cur=last;
 puts("-----------inputed spisok last -> first-----------\n");
   while(cur!=NULL)
  {printf("%5d",cur->num);
  cur=cur->pred;}
  printf("\n");
// Подсчет элементов, кратных трем
  k=0; // переменная для подсчета элементов, кратных трем
  cur=first;
  puts("------elementy kratnye 3--------\n");
  while(cur!=NULL)
  {
      if (cur->num%3==0)
          { k++;
       printf("%5d",cur->num);
      }
     cur=cur->next;
  }
// Вывод результатов
  if(k!=0)
 printf("\nV spiske %5d elementov, kratnyx 3\n",k);
  else puts("V spiske elementov, kratnyx 3,net");
 puts("\n-------Delete spisok----------");
  cur=first;
  while(first!=NULL)
  {  cur=first;
    first=first->next;
    delete cur;
   }
  cur=last=NULL;
   getch();
return 0;
}
