Advertisement
Falmung

Stack Palindrome

Dec 13th, 2011
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.41 KB | None | 0 0
  1. ///////////////////////////////////////////////////
  2. ///stack.h
  3. //////////////////////////////////////////////////
  4. template <class T>
  5. class Stack{
  6. private:
  7.     int size;
  8.     int top;
  9.     T *stackPtr;
  10.  
  11. public:
  12.     Stack(int n);
  13.     Stack(Stack &);
  14.     Stack();
  15.     ~Stack();
  16.     int getTop();
  17.     int getSize();
  18.     bool push(const T &);
  19.     bool pop(T &);
  20.     bool pop();
  21.     bool isEmpty() const;
  22.     bool isFull() const;
  23.     void print() ;
  24.  
  25.     friend bool operator ==(const Stack<T>& stack1, const Stack<T>& stack2);
  26. };//end Stack class
  27.  
  28.  
  29. template<class T>
  30. Stack <T >::Stack(int n):size(n),top(-1)
  31. {
  32.     stackPtr = new T[n];
  33. }//end default constructor
  34. template<class T>
  35. Stack <T >::Stack():size(maxStack),top(-1)
  36. {
  37.     stackPtr = new T[maxStack];
  38. }//end default constructor
  39.  
  40. template<class T>
  41. Stack <T>::~Stack()
  42. {
  43.     delete [] stackPtr;
  44. }//end destructor
  45.  
  46. template<class T>
  47. bool  Stack <T >::push(const T &dato){
  48.     if(!(this->isFull()))
  49.     {
  50.         this->top++;
  51.         *(stackPtr +top) = dato;
  52.         return true;
  53.     }//end if
  54.     else
  55.         return false;
  56. }//end function push
  57.  
  58. template<class T>
  59. bool  Stack <T >::pop(T &dato){
  60.     if(!(this->isEmpty()))
  61.     {
  62.         dato = *(stackPtr +top);
  63.         this->top--;
  64.         return true;
  65.     }//end if
  66.     else
  67.         return false;
  68. }//end function pop
  69.  
  70. template<class T>
  71. bool  Stack <T >::pop()
  72. {
  73.     if(!(this->isEmpty()))
  74.     {
  75.         this->top--;
  76.         return true;
  77.     }//end if
  78.     else
  79.         return false;
  80. }//end function pop
  81.  
  82. template<class T>
  83. bool  Stack <T >::isEmpty() const
  84. {
  85.     if(this->top == -1)
  86.         return true;
  87.     else
  88.         return false;
  89. }//end function isEmpty
  90.  
  91. template<class T>
  92. bool  Stack <T >::isFull() const
  93. {
  94.     if(this->top == (this->size -1))
  95.         return true;
  96.     else
  97.         return false;
  98. }//end function isFull
  99.  
  100. template<class T>
  101. int Stack <T >:: getTop()
  102. {
  103.     return(this->top);
  104. }//end function getTop
  105.  
  106. template<class T>
  107. int Stack <T >:: getSize()
  108. {
  109.     return(this->size);
  110. }//end function getSize
  111.  
  112. template<class T>
  113. Stack <T >::Stack(Stack &tempStack)
  114. {
  115.     T dato;
  116.     if(tempStack.getTop() == -1){
  117.         stackPtr = NULL;
  118.         top = -1;
  119.     } //end if
  120.     else{
  121.         stackPtr = new T[tempStack.size];
  122.         size = tempStack.getSize();
  123.         top = -1;
  124.         Stack tempStack1(size);        //Usa un stack temporero ,       elementos en orden contario
  125.         while(!tempStack.isEmpty())
  126.         {
  127.             tempStack.pop(dato);
  128.             tempStack1.push(dato);
  129.         }//end while
  130.         tempStack.top = tempStack1.getTop();
  131.  
  132.         while(!tempStack1.isEmpty())        //Los retorna en el orden original
  133.         {
  134.             tempStack1.pop(dato);
  135.             push(dato);
  136.         }//end while
  137.     }//end else
  138. }//end copy constructor
  139.  
  140. template<class T>
  141. void Stack <T >::print()
  142. {
  143.     T dato;
  144.     int tempTop;
  145.     tempTop = this->getTop();
  146.     cout<<"Stack:";
  147.     while(!(this->isEmpty())){
  148.         this->pop(dato);
  149.         cout<<dato<<",";
  150.     } //end while
  151.     this->top = tempTop;
  152.     cout<<endl;
  153. }//end function print
  154.  
  155. template<class T>
  156. bool operator==(const Stack<T>& stack1, const Stack<T>& stack2) {
  157.  
  158.  /*return (stack1.size == stack2.size &&
  159.             stack1.top == stack2.top &&
  160.            stack1.stackPtr == stack2.stackPtr
  161.            );*/
  162. }
  163.  
  164.  
  165. //////////////////////////////////////////////////
  166. ///main.cpp
  167. /////////////////////////////////////////////////
  168. #include<iostream>
  169. using namespace:: std;
  170. #include "stack.h"
  171. int main(){
  172.     int n;
  173.     char dato;
  174.     bool palindrome;
  175.  
  176.     cout<<"Entre la cantidad de caracteres al Stack:";
  177.     cin>>n;                                                    
  178.     Stack<char> stackChar(n);                                      
  179.     for(int i=0;i<n;i++)                                          
  180.  
  181.     {
  182.         cout<<"Entre el valor:";
  183.         cin>>dato;
  184.         stackChar.push(dato);
  185.     }//end for
  186.     Stack<char> stack(stackChar);
  187.     cout<<"Stack Original:";
  188.     stack.print();
  189.     cout<<"Stack copy constructor:";                            
  190.     stackChar.print();    
  191.  
  192.     palindrome = (stackChar == stack);
  193.     cout << palindrome;
  194.  
  195.     stackChar.pop(dato);
  196.     cout<<"El valor "<<dato<<" fue eliminado del Stack\n";
  197.     cout<<"El tope del stack esta apuntando al indice    ";
  198.     stackChar.print();
  199.     if(!stackChar.pop())
  200.  
  201.         cout<<"El stack esta vacio\n";
  202.  
  203.     else
  204.  
  205.         stackChar.print();
  206.  
  207.     if(!stackChar.pop())
  208.  
  209.         cout<<"El stack esta vacio\n";
  210.  
  211.     else
  212.  
  213.         stackChar.print();
  214.     if(!stackChar.pop())
  215.         cout<<"El stack esta vacio\n";
  216.     else
  217.         stackChar.print();
  218.  
  219.    
  220.  
  221.  
  222.  
  223.     system("pause");
  224.     return 0;
  225.  
  226. }
  227.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement