fork(1) download
  1. #include <stdio.h>
  2. #include <stdexcept>
  3. using namespace std;
  4.  
  5. struct IStack {
  6. virtual void push(int value) = 0; //добавить элемент value в стек, O(1)
  7. virtual void pop() = 0; //удалить из стека последний добавленный элемент, O(1)
  8. virtual int &top() = 0; //получить значение последнего добавленного элемента, O(1)
  9. virtual int size() const = 0; //получить количество элементов в стеке, O(1)
  10. virtual bool empty() const = 0; //проверить, пуст ли стек, O(1)
  11. };
  12.  
  13. class ArrayStack : public IStack {
  14. static const int MAX_SIZE = 100;
  15. int a[MAX_SIZE], topIndex, elementsCount;
  16. public:
  17. ArrayStack() {
  18. topIndex = elementsCount = 0;
  19. }
  20. void push(int value) {
  21. if (elementsCount == MAX_SIZE)
  22. throw runtime_error("Stack is full!");
  23. a[topIndex++] = value;
  24. elementsCount++;
  25. }
  26. void pop() {
  27. if (empty())
  28. throw runtime_error("Stack is empty!");
  29. topIndex--;
  30. elementsCount--;
  31. }
  32. int &top() {
  33. if (empty())
  34. throw runtime_error("Stack is empty!");
  35. return a[topIndex - 1];
  36. }
  37. int size() const {
  38. return elementsCount;
  39. }
  40. bool empty() const {
  41. return elementsCount == 0;
  42. }
  43. };
  44.  
  45.  
  46. int main() {
  47. ArrayStack stack;
  48. for (int i = 1; i <= 5; i++) {
  49. stack.push(i);
  50. }
  51. for (int i = 1; i <= 5; i++) {
  52. printf("%d ", stack.top());
  53. stack.pop();
  54. }
  55. }
Success #stdin #stdout 0s 15224KB
stdin
Standard input is empty
stdout
5 4 3 2 1