Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
#include
enum COMMAND { PUSH, // Добавить элемент в очередь POP, // Вытолкнуть элемент из очереди CLEAR, // Очистить очередь PRINT, // Вывести содержимое очереди на консоль EMPTY, // Проверить, пуста ли очередь EXIT // Завершение работы программы }; struct list { list(char _elem = 0, list *_next = NULL, list *_prev = NULL) : elem(_elem), next(_next), prev(_prev) { } char elem; list *next, *prev; }; struct queue { private: list *l = NULL; public: ///
/// Добавляет элемент в конец очереди. ///
///
Значение элемента, который нужно добавить в очередь. void push(char e) { l->prev = empty() ? l->next = l = new list(e) : l->prev->next = new list(e, l, l->prev); } ///
/// Выталкивает первый элемент очереди и передает его в e. ///
///
Переменная, в которую нужно передать вытолкнутый элемент очереди. ///
true - операцию удалось выполнить, false - операция не выполнена.
bool pop(char &e) { bool is_e = empty(); if (!is_e) { list *d = l; e = d->elem; if (l->next == l) l = NULL; else { l = l->next; d->prev->next = l; l->prev = d->prev; } delete d; } return !is_e; } ///
/// Проверяет, пуста ли очередь. ///
///
true - пуста, false - не пуста.
bool empty() { return !l; } ///
/// Очищает очередь от элементов. ///
void clear() { for (char e = 0; pop(e); ); } ///
/// Выводит содержимое очереди. ///
void prchar() { queue q; char e = 0; for ( ; pop(e); q.push(e)) printf_s("%c ", e); for ( ; q.pop(e); push(e)); } }; int main() { UINT inCp = GetConsoleCP(), outCp = GetConsoleOutputCP(); SetConsoleCP(1251); SetConsoleOutputCP(1251); queue Q; bool is_repeat = true; do { char cmd = 0, elem = 0; printf_s("Выберите команду:\n" "[%d] Добавить элемент в очередь\n" "[%d] Вытолкнуть элемент из очереди\n" "[%d] Очистить очередь\n" "[%d] Вывести содержимое очереди\n" "[%d] Проверить, пуста ли очередь\n" "[%d] Завершить работу\n" "Действие: ", PUSH, POP, CLEAR, PRINT, EMPTY, EXIT); scanf_s("\n%c", &cmd, 1); printf_s("\n"); switch (cmd - '0') { case PUSH: printf_s("Введите элемент: "); scanf_s("\n%c", &elem, 1); Q.push(elem); printf_s("Элемент успешно добавлен."); break; case POP: Q.pop(elem) ? printf_s("Взятый элемент: %c.", elem) : printf_s("Не удалось взять элемент: очередь пуста."); break; case CLEAR: Q.clear(); printf_s("Очередь очищена."); break; case PRINT: printf_s("Содержимое очереди:\n"); Q.prchar(); break; case EMPTY: printf_s(Q.empty() ? "Очередь пуста." : "Очередь не пуста."); break; case EXIT: is_repeat = false; break; default: printf_s("Неверный номер команды."); } printf_s("\n\n"); } while(is_repeat); SetConsoleCP(inCp); SetConsoleOutputCP(outCp); return 0 * _getch(); }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)