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
#include
///
/// N - максимальное число элементов в стеке; S_FULL - код, стек полон; S_EMPTY - код, стек пуст. ///
const char N = 3, S_FULL = 1, S_EMPTY = 2; class Stack { private: char top = -1; LONGLONG data[N] = { 0 }; public: ///
/// Добавляет элемент в стек. ///
///
Элемент, который нужно добавить в стек ///
Код выполнения операции: S_FULL - операция не выполнена (стек s полон), 0 - операция выполнена
int push(LONGLONG &elem) { bool is_f = is_full(); if (!is_f) { top++; data[top] = elem; } return is_f ? S_FULL : 0; } ///
/// Берет последний элемент из стека. ///
///
Ссылка, куда нужно положить взятый элемент из стека ///
Код выполнения операции: S_EMPTY - операция не выполнена (стек s пуст), 0 - операция выполнена
int pop(LONGLONG &elem) { bool is_e = is_empty(); if (!is_e) { elem = data[top]; data[top] = 0; top--; } return is_e ? S_EMPTY : 0; } ///
/// Проверяет пустой ли стек. ///
///
true - пустой, false - не пустой
bool is_empty() { return top == -1; } ///
/// Проверяет, полный ли стек. ///
///
true - стек полный, false - стек не полный
bool is_full() { return top == N - 1; } ///
/// Очищает стек. ///
void clear() { for (; !is_empty(); top--) data[top] = 0; } ///
/// Выводит все элементы стека на консоль. ///
void print() { LONGLONG n = 0; Stack sb; // Стек-буфер. while (!is_empty()) // Вывод содержимого s. { pop(n); printf_s("%lli\n", n); sb.push(n); } while (!sb.is_empty()) // Заполнение пустого this его же элементами. { sb.pop(n); push(n); } } }; int main() { setlocale(0, ""); Stack S; // process - продолжать работу программы, f - цикл отрабатывает первый раз. bool process = true, f = true; do { LONGLONG n = 0; int a = 0, r = 0; if (!f) // Отступ на консоли после предыдущего круга, чтобы разделять информацию. printf_s("\n\n"); f = false; printf_s("Выберите действие:\nОчистить стек [0]\tПроверить, пустой ли стек [1]\tПроверить, полный ли стек [2]\tДобавить число в стек [3]\tВзять число из стека[4]\tРаспечатать содержимое стека [5]\tЗавершить работу [6]\nДействие: "); scanf_s("%d", &a); printf_s("\n"); switch (a) { case 0: // Очистить стек. S.clear(); printf_s("Стек очищен."); break; case 1: // Проверить, пустой ли стек. printf_s(S.is_empty() ? "Стек пуст." : "Стек не пуст."); break; case 2: // Проверить, полный ли стек. printf_s(S.is_full() ? "Стек полон." : "Стек не полон."); break; case 3: // Добавить число в стек. printf_s("Введите число: "); scanf_s("%lld", &n); r = S.push(n); printf_s(r == S_FULL ? "Не удалось добавить число: стек заполнен." : "Число добавлено."); break; case 4: // Взять число из стека. r = S.pop(n); r == S_EMPTY ? printf_s("Не удалось взять число: стек пуст.") : printf_s("Взятое число: %lld.", n); break; case 5: // Распечатать стек. S.print(); break; case 6: // Завершение работы программы. process = false; break; default: break; } } while (process); 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)