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)
| | |-+  Listas enlazadas, nodos y pilas en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Listas enlazadas, nodos y pilas en C++  (Leído 17,680 veces)
Raxis

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Listas enlazadas, nodos y pilas en C++
« en: 2 Mayo 2011, 20:46 pm »

Un saludo para todos.

Soy estudiante de primer año en Ingenieria de Sistemas y debo desarrollar en programación orientada a objetos un ejercicio en C++ que consiste en crear una clase Lista, una clase Nodo y una clase Pila.

Se debe hacer con asignación dinámica de memoria y estas clases las debo utilizar en la implementación de otro programa; pero no se como funciona realmente la Pila, como se crean Listas enlazadas y como se crea un nodo.

Que atributos y métodos deberían tener cada una de estas clases.

Agradezco la ayuda que me puedan brindar.


En línea

Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Listas enlazadas, nodos y pilas en C++
« Respuesta #1 en: 2 Mayo 2011, 20:54 pm »

Para saber como funciona una pila o una lista te recomiendo que te leas los apuntes, no es nada complicado de entender, pero si tal vez tedioso de explicar en un foro...

Respecto a los métodos que tiene cada clase...

Una pila debería tener un Push (T) que apile en el tope el objeto T, un Pop() que lo borre, un TOP() que te devuelva el valor del tope, un Empty() que te diga si está vacía... y más cosas que puedas querer añadir tu, eso es a tu gusto o a la necesidad del ejercicio.

La clase nodo si la entiendes de los apuntes no tiene mucho tema, debería tener 2 ó 3 objetos dependiendo de como vayas a usar las listas, 2 que guardaran punteros al anterior y al siguiente de la lista y otro con el valor guardado en la lista.

Y la lista basada en los nodos como explique arriba... Las listas stl normalmente se basan en iteradores, pero no sé si vosotros los quereis usar. Lo normal es un begin() que te devuelve referencia a la primera posicion, un end() con la ultima, un empty() que te dirá si está vacía, un clear() que te la limpia... Pero basicamente el funcionamiento debería ser del iterador que lo recorre, o que te dice el elemento actual y demas.


En línea

Raxis

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Listas enlazadas, nodos y pilas en C++
« Respuesta #2 en: 2 Mayo 2011, 22:15 pm »

Citar
Este es parte del código que he desarrollado. No he cargado las otras clases, pero en esta parte me está generando error. Vehiculos es la superclase, al programa se le ingresan varios tipos de vehículos. Luego, cuando se ejecuta el método sacar -(eliminarElementoPorDato) en Lista.cpp - saca bien todos los vehículos pero el primero no lo sacaGracias por la ayuda.

NOTA: ALGUNOS CÓDIGOS SE DESCONFIGURABAN AL USAR code=cpp por eso me tocó quitarlo de algunos de estos archivos cargados.

Acermax, no te entendí lo de leer los apuntes para saber el funcionamiento de la pila. ¿Dónde encuentro los apuntes?


Nodo.h
Código
  1.  
  2.  
  3. #ifndef NODO_H
  4. #define NODO_H
  5.  
  6. #include "Vehiculos.h"
  7.  
  8. class Nodo
  9. {
  10. private:
  11. Nodo *siguiente;
  12. Vehiculos *dato;
  13. public:
  14. Nodo(Vehiculos*,Nodo* =0);
  15. ~Nodo();
  16. Vehiculos * verDato();
  17. Nodo * verSiguiente();
  18. void modificarSiguiente(Nodo *);
  19.  
  20. };
  21. #endif
  22.  
  23.  


Nodo.cpp

Código
  1. #include "Nodo.h"
  2. Nodo::Nodo(Vehiculos* dato,Nodo* siguiente)
  3. {
  4. this->siguiente=siguiente;
  5. this->dato=dato;
  6. }
  7.  
  8. Nodo::~Nodo()
  9. {
  10. if(siguiente!=0)
  11. delete siguiente;
  12.  
  13. if(dato!=0)
  14. delete dato;
  15. }
  16.  
  17. Vehiculos *Nodo::verDato()
  18. {
  19. return dato;
  20. }
  21.  
  22. Nodo * Nodo::verSiguiente()
  23. {
  24. return siguiente;
  25. }
  26.  
  27. void Nodo::modificarSiguiente(Nodo * siguiente)
  28. {
  29. this->siguiente = siguiente;
  30. }
  31.  
  32.  

Lista.h

Código:

#ifndef __CLASSLista
#define __CLASSLista

#include "Nodo.h"
#include <string.h>

using namespace std;

class Lista
{
    protected:
        Nodo* cabeza;
        int tama;
        
    public:
        Lista();
        bool existeElemento(string elemento);
        virtual void agregarNodo();
        virtual void agregarNodo(Nodo*);
        void imprimirLista();
        int numeroNodos();
        void eliminarElementoPorPosicion(int posicion);
void eliminarElementoPorDato(const string&);
        bool listaVacia();
Lista& operator<<(Nodo*);
Nodo * operator[](int);
        
    };

#endif



Lista.cpp

Código
  1.  
  2. #include "Lista.h"
  3. #include "Carro.h"
  4. #include "Furgoneta.h"
  5. #include "Camion.h"
  6. #include "Moto.h"
  7. using namespace std;
  8.  
  9. Lista::Lista()
  10. {
  11. //aqui es cabeza = 0 y tama = o
  12.        cabeza = 0;
  13.        tama = 0;
  14. }
  15.  
  16. bool Lista::existeElemento(string dato)
  17. {
  18. Nodo *actual = cabeza;
  19.  
  20. while(actual!=0)
  21. if(actual->verDato()->verPlaca()==dato)
  22. return true;
  23. else
  24. actual = actual->verSiguiente();
  25.  
  26. return false;
  27. }
  28. int tipos()
  29. {
  30. int tipo;
  31. cout<<"Seleccione el tipo de vehiculo"<<endl;
  32. cout<<"1 Carro"<<endl;
  33. cout<<"2 Moto"<<endl;
  34. cout<<"3 Furgoneta"<<endl;
  35. cout<<"4 Camion"<<endl;
  36. cin>>tipo;
  37. return tipo;
  38. }
  39. void Lista::agregarNodo()
  40. {
  41. string placa,color,marca,modelo;
  42. cout<<"Ingresar placa del auto"<<endl;
  43. cin>> placa;
  44. cout<<"Ingresar color del auto"<<endl;
  45. cin>> color;
  46. cout<<"Ingresar marca del auto"<<endl;
  47. cin>> marca;
  48. cout<<"Ingresar modelo del auto"<<endl;
  49. cin>> modelo;
  50. Vehiculos * vehiculo;
  51. switch(tipos())
  52. {
  53. case 1: vehiculo = new Carro(placa,color,marca,modelo);break;
  54. case 2: vehiculo = new Moto(placa,color,marca,modelo);break;
  55. case 3: vehiculo = new Furgoneta(placa,color,marca,modelo);break;
  56. case 4: vehiculo = new Camion(placa,color,marca,modelo);break;
  57. default:
  58. cout<<"Tipo de vehiculo desconocido.\nVehiculo no agregado!"<<endl;
  59. return;
  60. }
  61. agregarNodo(new Nodo(vehiculo));
  62. }
  63.  
  64. Lista& Lista::operator<<(Nodo* dato)
  65. {
  66. if(cabeza==0) cabeza = dato;
  67.  
  68. Nodo *actual = cabeza;
  69.  
  70. for(int i=1; i<tama;i++)
  71. actual = actual->verSiguiente();
  72.  
  73. actual->modificarSiguiente(dato);
  74.  
  75. tama++;
  76.  
  77. return *(this);
  78. }
  79.  
  80. Nodo * Lista::operator[](int posicion)
  81. {
  82. Nodo *actual = cabeza;
  83.  
  84. for(int i=0; i>posicion-1; i++)
  85. actual=actual->verSiguiente();
  86.  
  87. actual->modificarSiguiente(actual->verSiguiente()->verSiguiente());
  88.  
  89. return actual;
  90.  
  91. }
  92.  
  93. void Lista::agregarNodo(Nodo*dato)
  94. {
  95. if(cabeza==0) cabeza = dato;
  96.  
  97. Nodo *actual = cabeza;
  98.  
  99. for(int i=1; i<tama;i++)
  100. actual = actual->verSiguiente();
  101.  
  102. actual->modificarSiguiente(dato);
  103.  
  104. tama++;
  105. }
  106. void Lista::imprimirLista()
  107. {
  108. Nodo *actual = cabeza;
  109. Vehiculos * vehiculoActual;
  110.  
  111. while(actual!=0)
  112. {
  113. vehiculoActual = actual->verDato();
  114. cout<<vehiculoActual->verPlaca()<<'\t';
  115. cout<<vehiculoActual->verTipo()<<'\t';
  116. cout<<vehiculoActual->verColor()<<'\t';
  117. cout<<vehiculoActual->verMarca()<<'\t';
  118. cout<<vehiculoActual->verModelo()<<'\t';
  119. cout<<endl;
  120. actual = actual->verSiguiente();
  121. }
  122. }
  123.  
  124. int Lista::numeroNodos()
  125. {      
  126. return  tama; //solo dice return tama;
  127. }
  128.  
  129. void Lista::eliminarElementoPorDato(const string& dato)
  130. {
  131. Nodo *anterior=0,*actual = cabeza;
  132.  
  133. while(actual!=0)
  134. {
  135. if( (actual->verDato()->verPlaca()==dato) && (anterior!=0) )
  136. {
  137. anterior->modificarSiguiente(actual->verSiguiente());
  138.  
  139. tama--;
  140. return;
  141. }
  142.  
  143. anterior = actual;
  144. actual=actual->verSiguiente();
  145.  
  146. }
  147. }
  148.  
  149. void Lista::eliminarElementoPorPosicion(int posicion)
  150. {
  151. Nodo *actual = cabeza;
  152.  
  153. for(int i=0; i>posicion-1; i++)
  154. actual=actual->verSiguiente();
  155.  
  156. actual->modificarSiguiente(actual->verSiguiente()->verSiguiente());
  157.  
  158. tama--;
  159. }
  160.  
  161. bool Lista::listaVacia()
  162. {
  163. if(tama==0)
  164. return true;
  165.  
  166. return false;
  167. }
  168.  
  169.  


Pila.h

Código:

#ifndef __CLASSPila
#define __CLASSPila

#include "Lista.h"
#include "Nodo.h"
#include "Vehiculos.h"


using namespace std;

class Pila:public Lista
{
    public:
        Pila();
        bool pilaVacia();
        Vehiculos* obtenerTope();  
        void desapilar(int);
        void imprimirPila();

};

#endif


Pila.cpp

Código
  1.  
  2. #include "Pila.h"
  3. using namespace std;
  4.  
  5. Pila::Pila():Lista()
  6. {
  7.  
  8. }
  9.  
  10. bool Pila::pilaVacia()
  11. {
  12. return listaVacia();
  13. }
  14.  
  15. Vehiculos* Pila::obtenerTope()
  16. {
  17. Nodo * actual = cabeza;
  18.  
  19. while(actual->verSiguiente()!=0)
  20. actual=actual->verSiguiente();
  21.  
  22. return actual->verDato();
  23. }
  24.  
  25. void Pila::imprimirPila()
  26. {
  27. imprimirLista();
  28. }  
  29.  
  30. void Pila::desapilar(int posicion)
  31. {
  32. eliminarElementoPorPosicion(posicion);
  33. }
  34.  
  35.  
« Última modificación: 3 Mayo 2011, 00:04 am por Raxis » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Listas enlazadas en c++
Programación C/C++
N3r0 3 8,523 Último mensaje 13 Julio 2010, 12:42 pm
por N3r0
Listas enlazadas (Eliminar nodos segun condicion de sus datos).
Programación C/C++
santycarp17 2 3,059 Último mensaje 9 Octubre 2017, 00:38 am
por santycarp17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines