Advertisement
Guest User

Untitled

a guest
May 24th, 2015
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.73 KB | None | 0 0
  1. // Classic queue
  2. // C-Programm
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <malloc.h>
  6.  
  7. typedef struct tnode // узел
  8. {
  9.     int value;
  10.     struct tnode * next;
  11. }node, *p_node;
  12.  
  13. typedef struct tqueue // очередь
  14. {
  15.     int count = 0;
  16.     node * head;
  17.     node * tail;
  18. }queue, *p_queue;
  19.  
  20. p_queue addelement(p_queue ptr, int x);
  21. p_queue pop(p_queue ptr);
  22. void print(p_queue ptr);
  23.  
  24. int main()
  25. {
  26.     queue m;
  27.     int x, ich;
  28.     char ch;
  29.     while (1)
  30.     {
  31.         puts("1.Create queue");
  32.         puts("2.Delete element from queue");
  33.         puts("3.Print queue");
  34.         puts("4.Exit.");
  35.         scanf("%d", &ich);
  36.         // проверка на неправильный ввод
  37.         while (ich != 1 && ich != 2 && ich != 3 && ich != 4)
  38.         {
  39.             puts("Error enter. Please, try again.");
  40.             puts("1.Create queue");
  41.             puts("2.Delete element from queue");
  42.             puts("3.Print queue");
  43.             puts("4.Exit.");
  44.             scanf("%d", &ich);
  45.         }
  46.         switch (ich)
  47.         {
  48.             case 1:
  49.             {
  50.                 puts("Do you want to enter element?(y-yes, n-no)?");
  51.                 getchar();
  52.                 ch = getchar();
  53.                 while (ch == 'y')
  54.                 {
  55.                     puts("Enter element:");
  56.                     scanf("%d", &x);
  57.                     addelement(&m, x);
  58.                     puts("Do you want to enter element?(y-yes, n-no)?");
  59.                     getchar();
  60.                     ch = getchar();
  61.                 }
  62.                 break;
  63.             }
  64.             case 2:
  65.             {
  66.                 pop(&m);
  67.                 break;
  68.             }
  69.             case 3:
  70.             {
  71.                 print(&m);
  72.                 break;
  73.             }
  74.             case 4:
  75.                 exit(0);
  76.         }
  77.     }
  78.     system("pause");
  79. }
  80.  
  81. p_queue addelement(p_queue ptr, int x)
  82. {
  83.     p_node new_node;
  84.     new_node = (p_node)malloc(sizeof(node));
  85.     new_node->value = x;
  86.     new_node->next = NULL;
  87.     if (ptr->count == 0) // если очередь пуста
  88.     {
  89.         ptr->head = new_node; // новый узел голова
  90.         ptr->tail = new_node; // новый узел хвост
  91.         ptr->count++;
  92.     }
  93.     else // если не пустая
  94.     {
  95.         ptr->tail->next = new_node; // хвостовой элемент теперь ссылается на созданный узел
  96.         ptr->tail = new_node; // созданный узел становится хвостом
  97.         ptr->count++;
  98.     }
  99.     return 0;
  100. }
  101.  
  102. p_queue pop(p_queue ptr)
  103. {
  104.     if (ptr->count == 0)
  105.     {
  106.         puts("We can't delete element from your queue. Queue is empty!");
  107.         goto exit;
  108.     }
  109.     else
  110.     {
  111.         p_queue new_q;
  112.         new_q = (p_queue)malloc(sizeof(queue));
  113.         new_q->head = ptr->head;
  114.         ptr->head = ptr->head->next;
  115.         free(new_q->head);
  116.         ptr->count--;
  117.         puts("Completed!");
  118.     }
  119.     exit: return 0;
  120. }
  121.  
  122. void print(p_queue ptr)
  123. {
  124.     p_node new_node;
  125.     new_node = ptr->head;
  126.     if (ptr->count == 0)
  127.     {
  128.         puts("We can't print your queue. Queue is empty!");
  129.         return;
  130.     }  
  131.     else
  132.     {
  133.         puts("Your queue:");
  134.         while (new_node != NULL)
  135.         {
  136.             printf("%d ", new_node->value);
  137.             new_node = new_node->next;
  138.         }
  139.         puts("");
  140.     }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement