Advertisement
zodiak1

DSA_Access_2

Mar 16th, 2022
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.93 KB | None | 0 0
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <locale.h>
  4.  
  5. const int QE = 2;
  6.  
  7. enum ACTION
  8. {
  9.    CLEAR,      // Очистить очередь
  10.    IS_EMPTY,   // Проверить, пуста ли очередь
  11.    PUSH,       // Добавить элемент в очередь
  12.    POP,        // Взять элемент из очереди
  13.    PRINT,      // Вывести содержимое очереди
  14.    EXIT        // Завершить работу программы
  15. };
  16.  
  17. struct item
  18. {
  19.    item(int _elem = 0, item *_next = NULL) : elem(_elem), next(_next) { }
  20.  
  21.    int elem;
  22.    item *next;
  23. };
  24.  
  25. struct queue
  26. {
  27.    private:
  28.    item *begin = NULL, *end = NULL;
  29.  
  30.    public:
  31.    /// <summary>
  32.    /// Добавляет элемент в конец очереди.
  33.    /// </summary>
  34.    /// <param name="e">Элемент, который нужно добавить в очередь.</param>
  35.    void push(char e) { end = (is_empty() ? begin : end->next) = new item(e); }
  36.  
  37.    /// <summary>
  38.    /// Выталкивает начальный элемент из очереди и передает его в e.
  39.    /// </summary>
  40.    /// <param name="e">Переменная, в которую нужно передать начальный элемент очереди.</param>
  41.    /// <returns>Код выполнения операции. Если 2, то операция не выполнена, из-за исчерапания очереди.</returns>
  42.    int pop(int &e)
  43.    {
  44.       bool is_e = is_empty();
  45.       if (!is_e)
  46.       {
  47.          item *d = begin;
  48.          e = d->elem;
  49.  
  50.          begin = begin == end ? end = NULL : begin->next;
  51.          delete d;
  52.       }
  53.  
  54.       return is_e ? QE : 0;
  55.    }
  56.    /// <summary>
  57.    /// Проверяет, пуста ли очередь.
  58.    /// </summary>
  59.    /// <returns>true - пуста, false - не пуста.</returns>
  60.    bool is_empty() { return !end; }
  61.  
  62.    /// <summary>
  63.    /// Очищает очередь от элементов.
  64.    /// </summary>
  65.    void clear() { for (int e = 0; !is_empty(); pop(e)); }
  66.  
  67.    /// <summary>
  68.    /// Выводит содержимое очереди.
  69.    /// </summary>
  70.    void print()
  71.    {
  72.       queue q;
  73.       int e = 0;
  74.  
  75.       for ( ; !is_empty(); pop(e), q.push(e), printf_s("%d\n", e));
  76.       for ( ; !q.is_empty(); q.pop(e), push(e));
  77.    }
  78. };
  79.  
  80. int main()
  81. {
  82.    setlocale(0, "");
  83.  
  84.    queue Q;
  85.    bool is_repeat = true;
  86.    int a = 0, r = 0, elem = 0;
  87.    
  88.    do
  89.    {
  90.       printf_s("Выберите действие:\nОчистить очередь [%d]\tПроверить, пуста ли очередь [%d]\tДобавить элемент в очередь [%d]\tВзять элемент из очереди[%d]\tРаспечатать содержимое очереди [%d]\tЗавершить работу [%d]\nДействие: ", CLEAR, IS_EMPTY, PUSH, POP, PRINT, EXIT);
  91.       scanf_s("%d", &a);
  92.       printf_s("\n");
  93.  
  94.       switch (a)
  95.       {
  96.          case CLEAR:
  97.             Q.clear();
  98.             printf_s("Очередь очищена."); break;
  99.          case IS_EMPTY:
  100.             printf_s(Q.is_empty() ? "Очередь пуста." : "Очередь не пуста."); break;
  101.          case PUSH:
  102.             printf_s("Введите элемент: ");
  103.             scanf_s("%d", &elem);
  104.  
  105.             Q.push(elem);
  106.             printf_s("Элемент успешно добавлен."); break;
  107.          case POP:
  108.             r = Q.pop(elem);
  109.             r == QE ? printf_s("Не удалось взять элемент: очередь пуста.") : printf_s("Взятый элемент: %d.", elem); break;
  110.          case PRINT:
  111.             printf_s("Содержимое очереди:\n");
  112.             Q.print(); break;
  113.          case EXIT:
  114.             is_repeat = false; break;
  115.          default: break;
  116.       }
  117.  
  118.       printf_s("\n\n");
  119.    } while (is_repeat);
  120.  
  121.    return 0 * _getch();
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement