Advertisement
VladimirKostovsky

Лаба 2. Адовый котел. Бэки сворачивать

Mar 28th, 2022
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.06 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. struct list{int el; list *next; list *pred};
  7. struct queue{list *beg, *end;};
  8.     ofstream fout("output.txt", ios_base::app);
  9.  
  10. void putToQueue(queue *q, int iEl)   //добавить в очередь
  11. {
  12.     list *tmp;
  13.     tmp = new list;
  14.     tmp->next = NULL;
  15.     tmp->el = iEl;
  16.     if(q->end != NULL)
  17.         q->end->next = tmp;
  18.     else
  19.         q->beg = tmp;
  20.     q->end = tmp;
  21. }
  22.  
  23. void putToQueueBACK(queue *q, int iEl)   //добавить в очередь РЕВЕРС
  24. {
  25.     list *tmp;
  26.     tmp = new list;
  27.     tmp->pred = NULL;
  28.     tmp->el = iEl;
  29.     if(q->end != NULL)
  30.         q->end->pred = tmp;
  31.     else
  32.         q->beg = tmp;
  33.     q->end = tmp;
  34. }
  35.  
  36. int takeFromQueue(queue *q, int *iEl) // взять из очереди
  37. {
  38.     if(q->beg == NULL) return 0;
  39.     list *tmp;
  40.     tmp = q->beg;
  41.     *iEl = tmp->el;
  42.     q->beg = tmp->next;
  43.     delete tmp;
  44.     if(q->beg == NULL) q->end = NULL;
  45.     return 1;
  46. }
  47.  
  48. int takeFromQueueBACK(queue *q, int *iEl) // взять из очереди РЕВЕРС
  49. {
  50.     if(q->beg == NULL) return 0;
  51.     list *tmp;
  52.     tmp = q->beg;
  53.     *iEl = tmp->el;
  54.     q->beg = tmp->pred;
  55.     delete tmp;
  56.     if(q->beg == NULL) q->end = NULL;
  57.     return 1;
  58. }
  59.  
  60. queue *CreateQueue()            //создать очередь
  61. {
  62.     queue *q;
  63.     q = new queue;
  64.     q->beg = NULL;
  65.     q->end = NULL;
  66.     return q;
  67. }
  68.  
  69. int isQueueEmpty(queue *q)      //проверка очереди на пустоту
  70. {
  71.     if(q->beg == NULL) { return 1;}
  72.     return 0;
  73. }
  74.  
  75. int ClearQueue(queue *q)        //очистка очереди
  76. {
  77.     if(q->beg == NULL) return 0;
  78.     list *tmp, *t;
  79.     tmp = q->beg;
  80.     while(tmp->next != NULL)
  81.     {
  82.         t = tmp;
  83.         tmp = t->next;
  84.         delete t;
  85.     }
  86.     q->beg = NULL;
  87.     q->end = NULL;
  88.     return 1;
  89. }
  90.  
  91. int ClearQueueBACK(queue *q)        //очистка очереди
  92. {
  93.     if(q->beg == NULL) return 0;
  94.     list *tmp, *t;
  95.     tmp = q->beg;
  96.     while(tmp->pred != NULL)
  97.     {
  98.         t = tmp;
  99.         tmp = t->pred;
  100.         delete t;
  101.     }
  102.     q->beg = NULL;
  103.     q->end = NULL;
  104.     return 1;
  105. }
  106.  
  107. void PrintQueue(queue *q)       //вывести очередь на экран
  108. {
  109.     printf("\n");
  110.     queue *tmp = CreateQueue();
  111.     int iEl;
  112.     while(!isQueueEmpty(q))
  113.     {
  114.         takeFromQueue(q, &iEl);
  115.         fout << iEl << " ";
  116.         putToQueue(tmp, iEl);
  117.     }
  118.     while(!isQueueEmpty(tmp))
  119.     {
  120.         takeFromQueue(tmp, &iEl);
  121.         putToQueue(q, iEl);
  122.     }
  123.     fout << endl;
  124. }
  125.  
  126. void PrintQueueBACK(queue *q)       //вывести очередь на экран
  127. {
  128.     printf("\n");
  129.     queue *tmp = CreateQueue();
  130.     int iEl;
  131.     while(!isQueueEmpty(q))
  132.     {
  133.         takeFromQueueBACK(q, &iEl);
  134.         fout << iEl << " ";
  135.         putToQueueBACK(tmp, iEl);
  136.     }
  137.     while(!isQueueEmpty(tmp))
  138.     {
  139.         takeFromQueueBACK(tmp, &iEl);
  140.         putToQueueBACK(q, iEl);
  141.     }
  142.     fout << endl;
  143. }
  144.  
  145. int main()
  146. {
  147.     int i;
  148.     queue *q = CreateQueue();
  149.     fout << (".......Put Elems..............") << endl;
  150.     ifstream F;
  151.     F.open("input.txt");
  152.  
  153.     if (!F.is_open())
  154.     {
  155.         fout << "Файл не открылся! Проверь название/существование" << endl;
  156.     }
  157.     else {
  158.         fout << "Opening file" << endl;
  159.  
  160.         while (!F.eof())
  161.         {
  162.             F >> i; // заглавное звено
  163.             putToQueue(q, i);
  164.             PrintQueue(q);
  165.         }
  166.     {
  167.         putToQueue(q, i);
  168.         PrintQueue(q);
  169.     }
  170.     }
  171.     fout << ("\n......Take Elems...............") << endl;
  172.     fout << endl;
  173.     PrintQueue(q);
  174.     while(!isQueueEmpty(q))
  175.     {
  176.         takeFromQueue(q, &i);
  177.         PrintQueue(q);
  178.     }
  179.     fout << ("\n........Put Elems.............") << endl;
  180.     for(i=30; i<35; i++)
  181.     {
  182.         putToQueue(q, i);
  183.         PrintQueue(q);
  184.     }
  185.     fout << ("\n........Clear queue.............") << endl;
  186.     ClearQueue(q);
  187.     PrintQueue(q);
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement