Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.30 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <locale.h>
  5.  
  6. // создаем свой тип данных для односвязного списка
  7. typedef struct List
  8. {
  9.  int info;
  10.  struct List* next;
  11. } List;
  12.  
  13. // указатели на первый и последний элемент списка
  14. List [id58802|*First], *Last;
  15.  
  16. // функция добавления нового элемента в конец списка
  17. void push(int inf)
  18. {
  19.  struct List* el;
  20.  
  21.  // динамически выделяем память под очередной элемент списка
  22.  el = (struct List*)malloc(sizeof(struct List));
  23.  if (el == NULL)
  24.  {
  25.   printf("Не удалось выделить память под элемент списка.\n");
  26.   return;
  27.  }
  28.  
  29.  el->info = inf;
  30.  el->next = NULL;
  31.  
  32.  if (First == NULL)
  33.   First = Last = el;
  34.  else
  35.  {
  36.   Last->next = el;
  37.   Last = Last->next;
  38.  }
  39. }
  40. void pop()
  41. {
  42.  struct List *el1, *q, *p;
  43.  int i = 0, flag = 0, flag2=0;
  44.  
  45.  if(First==NULL) return;
  46.  
  47.  if(First->next==NULL) return;
  48.  
  49.  el1=First;
  50.  
  51.  if ((First->info %2)== 0)
  52.  {
  53.   p=First->next;
  54.   free ( First);
  55.   First=p;
  56.   flag=1;
  57.  }
  58.  
  59.  for (el1 = First; el1->next != NULL; )
  60.  {
  61.   if ((el1->next->info % 2) == 0) // dell first % 2 element
  62.   {
  63.    p = el1;
  64.    q=el1->next;
  65.    p->next = el1->next->next;
  66.    q->next=NULL;
  67.  
  68.   }
  69.   else
  70.   {
  71.    if (((el1->next->info % 2) == 0) && (el1->next->next == NULL))
  72.    {
  73.     el1->next = NULL;
  74.     return;
  75.    }
  76.    else
  77.      el1=el1->next;
  78.   }
  79.  
  80.  
  81.  }
  82.  return;
  83. }
  84. int main(void)
  85. {
  86.  int inf , num , i = 0;
  87.  List [id1449472|*el], *tmp;
  88.  
  89.  setlocale(LC_ALL, "Russian");
  90.  
  91.  First = Last = NULL;
  92.  
  93.  printf(" Введите элементы списка (окончание ввода — любой символ, кроме цифры):\n");
  94.  while (scanf("%d", &inf) != 0)
  95.   push(inf);
  96.  pop();
  97.  
  98.  printf("\nВаш список: ");
  99.  for (el = First; el != NULL; el = el->next)
  100.   printf("%d ", el->info);
  101.  printf("\n"); // освобождение выделенной под список памяти
  102.  for (el = First; el != NULL;)
  103.  {
  104.   tmp = el;
  105.   el = el->next;
  106.   free(tmp);
  107.  }
  108.  
  109.  return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement