//Сформировать список очередь строк,
//состоящих из нескольких слов через пробел.
//В списке определить элементы, в строках
//которых количество слов меньше 3 и удалить их.
//Использовать подпрограммы
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
// Описание элемента списка
struct elem{
    char st[80];
    elem *next;
    elem *pred;
    };
// Подпрограмма печати с начала
void printfl(elem *first)
{  elem *cur;
  puts("inputed spisok first -> last");
  cur=first;
  while(cur!=NULL)
  {puts(cur->st);
  cur=cur->next;}
  printf("\n");
}
// Подпрограмма печати с конца
void printlf(elem * last)
{elem * cur;
 cur=last;
 puts("inputed spisok last -> first");
   while(cur!=NULL)
  {puts(cur->st);
  cur=cur->pred;}
  printf("\n");
}
// Подпрограмма подсчета количества слов
int kolslov(char *s)
{int i;
int kols=0;
  for(i=0;i<=strlen(s);i++)
     if ((s[i]==' ')||(s[i]=='\0'))
       kols=kols+1;
      return kols;
}
// Основная программа
 int main()
 {    // Описание вспомогательных переменных
elem *first, *cur, *tmp, *last;
    char snum[80];
     int n,k;
 puts("Input string or ENTER");
  first=new elem;
  gets(snum);
  strcpy(first->st,snum);
  first->next=NULL;
  first->pred=NULL;
  last=first;
   while(gets(snum),strlen(snum)!=0)
   {  cur=new elem;
       strcpy(cur->st,snum);
    cur->next=NULL;
    cur->pred=last;
    last->next=cur;
    last=cur;
   }
 // печать с начала и с конца
 printfl(first);
  printlf(last);
  // Подсчет и вывод строк с указанным количеством слов и их удаление
 puts("String with kolslov <3 ");
 while((first!=NULL)&&(kolslov(first->st)<3))
 {  cur=first;
     puts(cur->st);
     first=first->next;
     first->pred=NULL;
     delete cur;
 }
   if(first!=NULL) // Если список не пуст
   {   cur=first;
        while(cur!=NULL)
     {
      if(kolslov(cur->st)<3)
             { puts(cur->st);
                  tmp=cur;
        tmp->pred->next=cur->next;
        if(cur->next!=NULL)
          cur->next->pred=cur->pred;
        else
            last=cur->pred;
        cur=cur->next;
        delete tmp;
            }
      else
       cur=cur->next;
     }
     printfl(first);
     printlf(last);
   }
   else puts("Spisok is empty");

 puts("Delete spisok");
 while(first!=NULL)
 {    cur=first;
       first=first->next;
       delete cur;
 }
 cur=last=tmp=NULL;
 getch();
 return 0;

}
