fork download
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. struct node {
  7. int valor;
  8. struct node* sig;
  9. };
  10. typedef struct node Nodo;
  11.  
  12. struct pila{
  13. Nodo* head;
  14. int tam;
  15. };
  16. typedef struct pila Pila;
  17.  
  18. Pila* pila_vacia();
  19. void apila(Pila* p, int e);
  20. int desapila(Pila* p);
  21. bool es_vacia(Pila* p);
  22.  
  23. int main() {
  24. Pila* p;
  25.  
  26. p = pila_vacia();
  27.  
  28. apila(p, 5);
  29. apila(p, 3);
  30. apila(p, 1);
  31.  
  32. cout << desapila(p) << "\n";
  33. cout << desapila(p) << "\n";
  34. cout << desapila(p) << "\n";
  35. cout << desapila(p);
  36. }
  37.  
  38. Pila* pila_vacia(){
  39. Pila* p = (Pila*) malloc(sizeof(Pila));
  40. p->head = NULL;
  41. p->tam = 0;
  42. return p;
  43. }
  44. void apila(Pila* p, int e){
  45. Nodo* nodo = (Nodo*) malloc(sizeof(Nodo));
  46.  
  47. if(es_vacia(p)){
  48. cout << "Apila.vacia.\n";
  49. nodo->valor = e;
  50. nodo->sig = NULL;
  51.  
  52. p->head = nodo;
  53. p->tam = 1;
  54. }
  55. else{
  56. cout << "lleno: " << (p->head)->valor << "\n";
  57. nodo->valor = (p->head)->valor;
  58. nodo->sig = (p->head)->sig;
  59.  
  60. (p->head)->valor = e;
  61. (p->head)->sig = nodo;
  62. p->tam = p->tam + 1;
  63. }
  64. }
  65. int desapila(Pila* p){
  66. int valor;
  67. if(es_vacia(p)){
  68. cout<< "ERROR: PILA VACIA.\n";
  69. exit(-1);
  70. }
  71. else if(p->tam == 1){
  72. p->tam = 0;
  73. valor = (p->head)->valor;
  74. free(p->head);
  75. p->head = NULL;
  76. }
  77. else{
  78. p->tam = p->tam - 1;
  79. valor = (p->head)->valor;
  80. Nodo* cabeza = p->head;
  81. p->head = ((p->head)->sig);
  82. free(cabeza);
  83. }
  84. return valor;
  85. }
  86. bool es_vacia(Pila* p){
  87. return (p->tam == 0);
  88. }
Runtime error #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
Apila.vacia.
lleno: 5
lleno: 3
1
3
5
ERROR: PILA VACIA.