//Создать двунаправленный список - очередь, вывести его на печать.
//Удалить из списка каждый элемент, стоящий на месте, кратном 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=NULL;
    cur->pred=last;
    last->next=cur;
    last=cur;
   }
  puts("inputed spisok first -> last");
  cur=first;
  while(cur!=NULL)
  {printf("%5d",cur->num);
  cur=cur->next;}
  printf("\n");
  cur=last;
 puts("inputed spisok last -> first");
   while(cur!=NULL)
  {printf("%5d",cur->num);
  cur=cur->pred;}
  printf("\n");
  k=0;
  cur=first;
  while(cur!=NULL)
  {
      k++;
    if (k%3==0)
     {cur->pred->next=cur->next;
        if (cur->next!=NULL)
        { cur->next->pred=cur->pred;
          tmp=cur;
          cur=cur->next;
        }
        else {last=cur->pred;
             last->next=NULL;
             tmp=cur;cur=NULL;}
        delete tmp;
       }
   else cur=cur->next;
  }
puts("inputed spisok first -> last after del every  3");
  cur=first;
  while(cur!=NULL)
  {printf("%5d",cur->num);
  cur=cur->next;
  }
  printf("\n");
  puts("inputed spisok  last->first after del every  3");
    cur=last;
    while(cur!=NULL)
    {printf("%5d",cur->num);
    cur=cur->pred;
    }
    printf("\n");
// Удаление элемента с номером к
  printf("Input k\n");
  scanf("%d",&k);
  cur=first;

  while((cur!=NULL)&&(cur->num!=k))
     cur=cur->next;
  if(cur==NULL)printf("Elemett %5d not found\n",k);
  else
  { if (cur->next!=NULL)
      cur->next->pred=cur->pred;
    else
      { last=cur->pred;last->next=NULL;
      }
    if (cur->pred!=NULL)
       cur->pred->next=cur->next;
    else
        { first=cur->next;
          first->pred=NULL;
         }

            delete cur;

   printf("inputed spisok first -> last after udal udalelem with num %5d\n",k);
   cur=first;
   while(cur!=NULL)
   {printf("%5d",cur->num);
   cur=cur->next;
   }
   printf("\n");
   printf("inputed spisok last ->first after udal udalelem with num %5d\n",k);
  cur=last;
  while(cur!=NULL)
  {printf("%5d",cur->num);
  cur=cur->pred;
  }
  printf("\n");
  }
  getch();
  return 0;

}
