elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Pila en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pila en C++  (Leído 6,020 veces)
Norochii

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Pila en C++
« en: 25 Mayo 2011, 19:01 pm »

Código
  1. //Pila.cpp
  2. //By Norochii
  3. //Estructura de Datos
  4. #include "StdAfx.h"
  5. #include "Pila.h"
  6. #include <iostream>
  7. using namespace std;
  8.  
  9. Pila::Pila(void) //Constructor. se inicializa el tope o cima de la pila en -1
  10. {
  11. top = -1;
  12. }
  13.  
  14.  
  15. Pila::~Pila(void) //Destructor. Destruye los datos de la pila
  16. {
  17. cout<<"Destruyendo datos"<<endl;
  18. }
  19.  
  20. void Pila::EmptyStack() //Verifica si la pila esta vacia,
  21. { //viendo si el tope esta en -1
  22. top = -1;
  23. }
  24.  
  25. void Pila::AddStack(int elemento) //Verifica si la Pila esta llena
  26. {
  27. if(FullStack()) //Si la pila esta llena emite el mensaje
  28. { //Desbordamiento pila
  29. cout<<"Desbordamiento pila :";
  30. }
  31. else //Sino el apuntador o subindice se incrementa con cima++
  32. {
  33.  
  34. top++; //y se almacena un elemento en el arreglo A[cima] automaticamente
  35. A[top] = elemento; //ya que se iguala. El elemento que entro se guarda en el arreglo A[]
  36.  
  37. }
  38. }
  39.  
  40.  
  41. void Pila::Push(int elemento) //Esta funcion coincide con la funcion AddStack()
  42. {
  43. AddStack(elemento);
  44. }
  45.  
  46.  
  47. int Pila::Pop() //Esta funcion extrae los elementos de la pila
  48. {
  49. int Aux; //Se crea una variable auxiliar o temporal para poder guardar
  50. if(top == -1) //dentro de la variable Aux el ultimo elemento en entrar
  51. {
  52. cout<<"Se intenta sacar un elemento de una Pila vacia"<<endl;
  53. }
  54. else
  55. {
  56. Aux = A[top]; //Aqui se guarda el elemento del tope osea el ultimo elemento en entrar
  57. top--; //se decrementa el tope y apunta al siguiente elemento y asi sucecivamente hasta que quede en -1
  58. }
  59. return Aux; //se retorna el ultimo elemento del arreglo A[] almacenado en la variable Aux
  60. }
  61.  
  62. int Pila::FirstStack() //comprueba que la pila no este vacia
  63. {
  64. if(top == -1) //Si esta vacia emite un mensaje
  65. {
  66. cout<<"Se intenta sacar un elemento de una Pila vacia"<<endl;
  67. }
  68. else //sino se dara el elemento del arreglo A[] almacenado en la posicion apuntada por la cima
  69. {
  70. return A[top];
  71. }
  72. }
  73.  
  74.  
  75. void Pila::ClearStack() //Se encarga de eliminar el ultimo elemento que entro en la pila
  76. {
  77. if(top == -1) //Primero comprueba que la pila no este vacia
  78. { //Si esta vacia emite un mensaje
  79. cout<<"Se intenta sacar un elemento de una Pila vacia"<<endl;
  80. }
  81. else //Sino se decrementa el tope en 1
  82. {
  83. top--;
  84. }
  85. }
  86.  
  87. bool Pila::FullStack()
  88. {
  89. return top == MaxTamPila-1; //En este caso la pila estara llena cuando el tope apunte al valor MaxTamPila-1
  90. }
  91.  
  92. void Pila::CuentaPila() //Esta funcion es para saber cuantos elementos hay en la pila
  93. {
  94. if(top == -1)
  95. {
  96. cout<<"Se han sacado los elementos anteriormente o aun no introduce ninguno"<<endl;
  97. }
  98. else
  99. cout<<"Elementos existentes en la pila : "<<top + 1<<" Elementos"<<endl;
  100. }
  101.  
  102. void Pila::Elementos() //Una funcion que lo unico que hace es mostrar un mensaje de cuantos elementos se han introducido hasta ese momento
  103. {
  104.  
  105. cout<<"Elemento "<<top +2 <<endl;
  106. }
  107.  


En línea

Norochii
Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Pila en C++
« Respuesta #1 en: 25 Mayo 2011, 20:24 pm »

No sé exactamente que problemas tienes, pero mirándolo así por encima te puedo decir alguna cosa a corregir.

Código
  1. void Pila::EmptyStack() //Verifica si la pila esta vacia,
  2. { //viendo si el tope esta en -1
  3. top = -1;
  4. }
  5.  

Esto no hace lo que dice el comentario, lo que hace esta función es limpiar la pila.
Para hacer lo que dice el comentario deberías retornar un booleano y comprobar si el tope es igual a -1

Código
  1. int Pila::Pop() //Esta funcion extrae los elementos de la pila
  2. {
  3. int Aux; //Se crea una variable auxiliar o temporal para poder guardar
  4. if(top == -1) //dentro de la variable Aux el ultimo elemento en entrar
  5. {
  6. cout<<"Se intenta sacar un elemento de una Pila vacia"<<endl;
  7. }
  8. else
  9. {
  10. Aux = A[top]; //Aqui se guarda el elemento del tope osea el ultimo elemento en entrar
  11. top--; //se decrementa el tope y apunta al siguiente elemento y asi sucecivamente hasta que quede en -1
  12. }
  13. return Aux; //se retorna el ultimo elemento del arreglo A[] almacenado en la variable Aux
  14. }
  15.  


Ten cuidado aquí. En el caso de que la pila esté vacía, estás retornando una variable sin ningún valor de inicialización, así que no puedes saber lo que estas devolviendo. El return debería ir dentro del else.

Además, en cuestión a todos estos mensajes. En el caso de que se esté intentando extraer un elemento de una pila vacía, o no se puede introducir un elemento porque la pila está llena, deberías envíar un error con un aserto o con  un throw y parar la ejecución del programa. Un simple mensaje por pantalla no estaría bien.

Supongo que los nombres de las funciones te los mandarían poner en clase así, pero lo normal es que la función Pop() haga lo que hace tu función ClearStack(),y haya una  función Top() que haga lo que hace tu función Pop().

Si veo algo más ya vuelvo a postear.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La pila
Electrónica
Sardi 1 4,593 Último mensaje 6 Noviembre 2003, 04:22 am
por Meta
Una pila en C
Programación C/C++
Dark Invader 4 4,030 Último mensaje 25 Junio 2011, 19:40 pm
por Dark Invader
Hay opcion pila de llamadas en Olly?
Ingeniería Inversa
x64core 3 3,361 Último mensaje 27 Marzo 2012, 10:12 am
por x64core
Problemas se me descontinua la PILA
Programación C/C++
x64core 0 1,613 Último mensaje 10 Junio 2012, 08:42 am
por x64core
Saber la carga de una pila
Electrónica
kikelillo 8 12,208 Último mensaje 23 Agosto 2012, 22:59 pm
por xiruko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines