fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <class T>
  5. class elemento {
  6. public:
  7. T dado;
  8. elemento<T> *prox;
  9. };
  10.  
  11. template <class T>
  12. class pilha {
  13. private:
  14. elemento<T> *top;
  15. public:
  16. pilha() { top = NULL; }
  17. bool empilha(T);
  18. T topo();
  19. T pop();
  20. bool vazio();
  21. ~pilha();
  22. };
  23.  
  24. template <class T>
  25. pilha<T>::~pilha() {
  26. delete [] top;
  27. }
  28.  
  29. template <class T>
  30. bool pilha<T>::empilha(T x) {
  31. if (top == NULL) {
  32. top = new elemento<T>;
  33. top->dado = x;
  34. top->prox = NULL;
  35. return true;
  36. } else {
  37. elemento<T> *aux = new elemento<T>;
  38. aux->dado = x;
  39. aux->prox = top;
  40. top = aux;
  41. return true;
  42. }
  43. return false;
  44. }
  45.  
  46. template <class T>
  47. T pilha<T>::topo() {
  48. if (!vazio()) return top->dado;
  49. return -1; //RETORNA -1 QUANDO A PILHA ESTA VAZIA
  50. }
  51.  
  52. template <class T>
  53. T pilha<T>::pop() {
  54. if (vazio()) return -1; //RETORNA -1 QUANDO A PILHA ESTA VAZIA
  55. else {
  56. T aux = top->dado;
  57. top = top->prox;
  58. return aux;
  59. }
  60. }
  61.  
  62. template <class T>
  63. bool pilha<T>::vazio() { return (top==NULL); }
  64.  
  65. using namespace std;
  66.  
  67. int main() {
  68. pilha<int> p;
  69. if (!p.vazio()) {
  70. cout<<p.topo()<< endl;
  71. }
  72. p.empilha(1);
  73. cout<<p.pop()<< endl;
  74. p.empilha(2);
  75. cout<<p.pop()<< endl;
  76. p.empilha(3);
  77. cout<<p.pop()<< endl;
  78. p.empilha(4);
  79. cout<<p.pop()<< endl;
  80. p.empilha(5);
  81. cout<<p.pop()<< endl;
  82. p.empilha(6);
  83. p.empilha(7);
  84. p.empilha(8);
  85. cout<<p.pop()<< endl;
  86. p.empilha(9);
  87. p.empilha(10);
  88. p.empilha(11);
  89. p.empilha(12);
  90. p.empilha(13);
  91. cout<<p.pop()<< endl;
  92. p.empilha(14);
  93. cout<<p.topo()<< endl;
  94. cout<<p.pop()<< endl;
  95. cout<<p.pop()<< endl;
  96. cout<<p.pop()<< endl;
  97. cout<<p.pop()<< endl;
  98. cout<<p.pop()<< endl;
  99. cout<<p.pop()<< endl;
  100. cout<<p.pop()<< endl;
  101. cout<<p.pop()<< endl;
  102. }
  103.  
  104. //https://pt.stackoverflow.com/q/55871/101
Success #stdin #stdout 0s 4408KB
stdin
Standard input is empty
stdout
1
2
3
4
5
8
13
14
14
12
11
10
9
7
6
-1