Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <locale.h>
- const int QE = 2;
- enum ACTION
- {
- CLEAR, // Очистить очередь
- IS_EMPTY, // Проверить, пуста ли очередь
- PUSH, // Добавить элемент в очередь
- POP, // Взять элемент из очереди
- PRINT, // Вывести содержимое очереди
- EXIT // Завершить работу программы
- };
- struct item
- {
- item(int _elem = 0, item *_next = NULL) : elem(_elem), next(_next) { }
- int elem;
- item *next;
- };
- struct queue
- {
- private:
- item *begin = NULL, *end = NULL;
- public:
- /// <summary>
- /// Добавляет элемент в конец очереди.
- /// </summary>
- /// <param name="e">Элемент, который нужно добавить в очередь.</param>
- void push(char e) { end = (is_empty() ? begin : end->next) = new item(e); }
- /// <summary>
- /// Выталкивает начальный элемент из очереди и передает его в e.
- /// </summary>
- /// <param name="e">Переменная, в которую нужно передать начальный элемент очереди.</param>
- /// <returns>Код выполнения операции. Если 2, то операция не выполнена, из-за исчерапания очереди.</returns>
- int pop(int &e)
- {
- bool is_e = is_empty();
- if (!is_e)
- {
- item *d = begin;
- e = d->elem;
- begin = begin == end ? end = NULL : begin->next;
- delete d;
- }
- return is_e ? QE : 0;
- }
- /// <summary>
- /// Проверяет, пуста ли очередь.
- /// </summary>
- /// <returns>true - пуста, false - не пуста.</returns>
- bool is_empty() { return !end; }
- /// <summary>
- /// Очищает очередь от элементов.
- /// </summary>
- void clear() { for (int e = 0; !is_empty(); pop(e)); }
- /// <summary>
- /// Выводит содержимое очереди.
- /// </summary>
- void print()
- {
- queue q;
- int e = 0;
- for ( ; !is_empty(); pop(e), q.push(e), printf_s("%d\n", e));
- for ( ; !q.is_empty(); q.pop(e), push(e));
- }
- };
- int main()
- {
- setlocale(0, "");
- queue Q;
- bool is_repeat = true;
- int a = 0, r = 0, elem = 0;
- do
- {
- printf_s("Выберите действие:\nОчистить очередь [%d]\tПроверить, пуста ли очередь [%d]\tДобавить элемент в очередь [%d]\tВзять элемент из очереди[%d]\tРаспечатать содержимое очереди [%d]\tЗавершить работу [%d]\nДействие: ", CLEAR, IS_EMPTY, PUSH, POP, PRINT, EXIT);
- scanf_s("%d", &a);
- printf_s("\n");
- switch (a)
- {
- case CLEAR:
- Q.clear();
- printf_s("Очередь очищена."); break;
- case IS_EMPTY:
- printf_s(Q.is_empty() ? "Очередь пуста." : "Очередь не пуста."); break;
- case PUSH:
- printf_s("Введите элемент: ");
- scanf_s("%d", &elem);
- Q.push(elem);
- printf_s("Элемент успешно добавлен."); break;
- case POP:
- r = Q.pop(elem);
- r == QE ? printf_s("Не удалось взять элемент: очередь пуста.") : printf_s("Взятый элемент: %d.", elem); break;
- case PRINT:
- printf_s("Содержимое очереди:\n");
- Q.print(); break;
- case EXIT:
- is_repeat = false; break;
- default: break;
- }
- printf_s("\n\n");
- } while (is_repeat);
- return 0 * _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement