Advertisement
jcvitanovic

Zad12

Dec 19th, 2014
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. /*
  2. 18.12.2014
  3. Problem 12 Write a C Program to reverse a stack in place using recursion. You can only
  4. use the following ADT functions on stack: IsEmpty, IsFull, Push, Pop, Top.
  5.  
  6. */
  7.  
  8. #include<stdio.h>
  9. #include<vector>
  10. #include<iostream>
  11.  
  12. #define max 1000
  13. using namespace std;
  14.  
  15. class Stack {
  16.  
  17. private:
  18.     int size = 0;
  19.     vector<int> items;
  20. public:
  21.  
  22.     Stack(){
  23.         items = vector<int>(1);
  24.     }
  25.  
  26.     bool IsEmpty(){
  27.         return size == 0;
  28.     }
  29.     bool IsFull(){
  30.         return false;
  31.         //return size == max; // ?
  32.     }
  33.     int Pop(){
  34.         int popItem = items[size - 1];
  35.         size--;
  36.         if ((size > 0) && (size == items.size() / 4)){
  37.             items.resize(items.size() / 2);
  38.         }
  39.         return popItem;
  40.     }
  41.     void Push(int item){
  42.         size++;
  43.         items[size - 1] = item;
  44.         if (size == items.size()){
  45.             items.resize(items.size() * 2);
  46.         }
  47.     }
  48.     int Top(){
  49.         return items[size - 1];
  50.     }
  51.  
  52.  
  53. };
  54.  
  55. void pushToBottom(Stack *stack, int value){
  56.     if (stack->IsEmpty()){
  57.         stack->Push(value);
  58.     }
  59.     else{
  60.         int top = stack->Pop();
  61.         pushToBottom(stack, value);
  62.         stack->Push(top);
  63.     }
  64.  
  65. }
  66.  
  67. void reverseStack(Stack *stack) {
  68.     if (stack->IsEmpty()){
  69.         return;
  70.     }
  71.     int top = stack->Pop();
  72.     reverseStack(stack);
  73.     pushToBottom(stack, top);
  74. };
  75.  
  76.  
  77. int main(){
  78.     Stack stack;
  79.     for (int i = 0; i < 10; i++){
  80.         stack.Push(i);
  81.     }
  82.  
  83.     reverseStack(&stack);
  84.     cout << "Reverse!" << "\n";
  85.     while (!stack.IsEmpty()){
  86.         cout << stack.Pop() << " ";
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement