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
// Максимальное кол-во элементов в деке. const UCHAR N = 4; // Команды консольного меню. enum COMMAND { PUSH_FRONT, // Добавить элемент в начало дека. PUSH_BACK, // Добавить элемент в конец дека. POP_FRONT, // Вытолкнуть элемент из начала дека. POP_BACK, // Вытолкнуть элемент из конца дека. EMPTY, // Проверить, пуст ли дек. FULL, // Проверить, полон ли дек. CLEAR, // Очистить дек. PRINT, // Вывести все элементы дека на консоль. EXIT // Завершить выполнение программы. }; struct deck { private: char beg = -1, end = -1, data[N] = { }; public: ///
/// Добавляет элемент e в начало дека. ///
///
Элемент, который нужно добавить. ///
Выполнилась ли операция.
bool push_front(char e) { bool is_f = full(), is_e = empty(); if (!is_f) { beg = is_e ? end = N - 1 : beg == 0 ? N - 1 : beg - 1; data[beg] = e; } return !is_f; } ///
/// Добавляет элемент e в конец дека. ///
///
Элемент, который нужно добавить. ///
Выполнилась ли операция.
bool push_back(char e) { bool is_f = full(), is_e = empty(); if (!is_f) { end = is_e ? beg = 0 : end == N - 1 ? 0 : end + 1; data[end] = e; } return !is_f; } ///
/// Выталкивет элемент из начала дека и передает его в e. ///
///
Куда передать вытолкнутый элемент. ///
Выполнилась ли операция.
bool pop_front(char &e) { bool is_e = empty(), will_e = beg == end; if (!is_e) { e = data[beg]; beg = will_e ? end = -1 : beg == N - 1 ? 0 : beg + 1; } return !is_e; } ///
/// Выталкивет элемент из начала дека и передает его в e. ///
///
Куда передать вытолкнутый элемент. ///
Выполнилась ли операция.
bool pop_back(char &e) { bool is_e = empty(), will_e = beg == end; if (!is_e) { e = data[end]; end = will_e ? beg = -1 : end == 0 ? end = N - 1 : end - 1; } return !is_e; } ///
/// Проверяет, пуст ли дек. ///
bool empty() { return beg == -1; } ///
/// Проверяет, полон ли дек. ///
bool full() { return beg - end == 1 || end - beg == N - 1; } ///
/// Очищает дек. ///
void clear() { for (char e = 0; pop_front(e); ); } ///
/// Выводит элементы дека на консоль. ///
void print() { deck d; char e = 0; for ( ; pop_front(e); d.push_back(e)) printf_s("%c ", e); for ( ; d.pop_front(e); push_back(e)); } }; int main() { UINT iCp = GetConsoleCP(), oCp = GetConsoleOutputCP(); SetConsoleCP(1251); SetConsoleOutputCP(1251); deck d; bool repeat = true; char cmd = 0, elem = 0; do { printf_s("Выберите команду:\n[%d] Добавить элемент в начало дека;\n[%d] Добавить элемент в конец дека;\n[%d] Вытолкнуть элемент из начала дека;\n[%d] Вытолкнуть элемент из конца дека;\n[%d] Проверить, пуст ли дек;\n[%d] Проверить, полон ли дек;\n[%d] Очистить дек;\n[%d] Вывести содержимое дека;\n[%d] Завершить работу.\nКоманда: ", PUSH_FRONT, PUSH_BACK, POP_FRONT, POP_BACK, EMPTY, FULL, CLEAR, PRINT, EXIT); scanf_s("\n%c", &cmd, 1); printf_s("\n"); switch (cmd - '0') { case PUSH_FRONT: printf_s("Введите элемент: "); scanf_s("\n%c", &elem, 1); printf_s(d.push_front(elem) ? "Элемент успешно добавлен." : "Не удалось добавить элемент: стек полон."); break; case PUSH_BACK: printf_s("Введите элемент: "); scanf_s("\n%c", &elem, 1); printf_s(d.push_back(elem) ? "Элемент успешно добавлен." : "Не удалось добавить элемент: стек полон."); break; case POP_FRONT: d.pop_front(elem) ? printf_s("Вытолкнутый элемент: %c", elem) : printf_s("Не удалось выполнить данную операцию: стек пуст."); break; case POP_BACK: d.pop_back(elem) ? printf_s("Вытолкнутый элемент: %c", elem) : printf_s("Не удалось выполнить данную операцию: стек пуст."); break; case EMPTY: printf_s(d.empty() ? "Дек пуст." : "Дек не пуст."); break; case FULL: printf_s(d.full() ? "Дек полон." : "Дек не полон."); break; case CLEAR: d.clear(); printf_s("Дек очищен."); break; case PRINT: printf_s("Содержимое дека:\n"); d.print(); break; case EXIT: repeat = false; break; default: printf_s("Неверный номер команды."); break; } printf_s("\n\n"); } while(repeat); SetConsoleCP(iCp); SetConsoleOutputCP(oCp); 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)