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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


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

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Listas enlazadas en c++
« en: 13 Julio 2010, 04:56 am »

      Hola este es mi primer post desde q estoy en este foro no he tenido mucha participacion, hace tiempo q frecuento esta web y siempre q tube alguna duda aqui pude encontrar una respuesta.
 Aca dejo un codigo fuente que consta de tres partes un main.cpp es una pequeña aplicacion en donde se utiliza la clase lista luego un lista.h (cabezera de la clase lista) donde se encuentran las declaraciones de la estructura utilizada, los nombres del constructor general de la clase y metodos publicos, y un lista.cpp donde se en cuentra el codigo del constructor y metodos que se encuentran declarados en la cabezera de la clase.
 
main.cpp
Código
  1. #include <iostream>
  2. #include "lista.h"
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[]) {
  7.                lista l;
  8.                int x,i=0;
  9.                while(i!=5){
  10.                                l.AddData(i);
  11.                                i++;
  12.                }
  13.                i=l.Size();
  14.                while(i!=0){
  15.                                  x=l.GetData(i);
  16.                                  i--;
  17.                                  cout<<x<<endl;
  18.                }    
  19.                l.~lista();
  20.                cin.get();
  21. }
  22.  
  23.  

Lista.h
Código
  1.  
  2.  
  3. #ifndef __LISTA_H__
  4. #define __LISTA_H__
  5. #include <iostream>
  6. class lista
  7. {
  8.    private:  //Estructura de la lista
  9.                typedef struct tipoNodo{
  10.                                                        int dato;
  11.                                                        struct tipoNodo *siguiente;
  12.                                                        };
  13.                typedef tipoNodo *l;
  14.                l p;
  15.                int cant;
  16.  
  17.    public:
  18.               lista(void);  //constructor General de la clase
  19.               ~lista(void); //Destructor de la clase
  20.           void AddData(int); //Add inserta dato en la lista
  21.               int GetData(int);        //get retorna el dato de una poscion especifica
  22.               void DelData(int); //del borra el dato de una posicion especifica
  23.               int FindData(int); //find devuelve la posicion del dato en la lista
  24.               int Size(void);   //size devuelve el tamaño de la lista
  25.               bool vacio();  
  26.               void AddOrder(int); // inserta ordenado
  27. };
  28. #endif
  29.  
  30.  

Lista.cpp:
 
Código
  1.  
  2. #include <iostream>
  3. #include "lista.h"
  4.  
  5. using namespace std;
  6.  
  7. //constructor por defecto
  8. lista::lista(void){
  9.                   p=NULL;
  10.                   cant=0;
  11. }
  12. //Destructor
  13.  
  14. lista::~lista(void){
  15.                    delete p;
  16. }
  17.  
  18. //Add
  19. void lista::AddData(int n){
  20.                           l nuevo=new tipoNodo;
  21.                           nuevo->dato=n;
  22.                           nuevo->siguiente=p;
  23.                           p=nuevo;
  24.                           cant=cant+1;
  25. }
  26. //get
  27. int lista::GetData(int pos){
  28.                            l aux;
  29.                            int i=1;
  30.                            aux=p;
  31.                            while(i!=pos){
  32.                                          aux=aux->siguiente;
  33.                                          i++;
  34.                            }
  35.                            return aux->dato;
  36. }
  37. void lista::DelData(int pos){
  38.                             l aux,ant=NULL;
  39.                             int i=1;
  40.                             aux=p;
  41.                             while(i!=pos){
  42.                                           ant=aux;
  43.                                           aux=aux->siguiente;
  44.                                           i++;
  45.                             }
  46.                             if(ant==NULL){
  47.                                           delete aux;
  48.                                           cant=cant-1;
  49.                             }
  50.                             else{
  51.                                  ant->siguiente=aux->siguiente;
  52.                                  delete aux;
  53.                             }
  54. }
  55.  
  56. int lista::FindData(int nro){
  57.                             l aux;
  58.                             aux=p;
  59.                             int i=1;
  60.                             while((aux->dato!=nro)&&(aux!=NULL)){
  61.                                                                  aux=aux->siguiente;
  62.                                                                  i++;
  63.                             }
  64.                             if(aux==NULL){
  65.                                           return 0;
  66.                             }
  67.                             else{
  68.                                  return i;
  69.                             }
  70. }
  71.  
  72. int lista::Size(void){
  73.                      return cant;
  74. }
  75.  
  76. bool lista::vacio(void){
  77.                        if(cant==0){
  78.                                    return true;
  79.                        }
  80.                        else{
  81.                             return false;
  82.                        }
  83. }
  84.  
  85. void lista::AddOrder(int nro){
  86.                              l ant=NULL,aux=p,nuevo=new tipoNodo;
  87.                              nuevo->dato=nro;
  88.                              while((aux!=NULL)&&(nro>aux->dato)){
  89.                                                                  ant=aux;
  90.                                                                  aux=aux->siguiente;
  91.                              }
  92.                              if(ant==NULL){
  93.                                            nuevo->siguiente=aux;
  94.                                            p=nuevo;
  95.                              }
  96.                              else{
  97.                                   ant->siguiente=nuevo;
  98.                                   nuevo->siguiente=aux;
  99.                              }
  100. }
  101.  
  102.  

Me gustaria q los demas usuarios opinen y si hay algo en q mejorar me estaria bueno q me corrijan para aprender un poco mas.

Saludos a todos.


« Última modificación: 14 Julio 2010, 03:40 am por Devil_Nero » En línea

.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Listas enlazadas en c++
« Respuesta #1 en: 13 Julio 2010, 05:18 am »

Estas seguro que DelData funciona?... En AddData repetiste un proceso... Y estoy casi seguro de que DelData tiene algo malo en el while... Y si esta bueno, entonces no vale la pena que vea lo que sigue del code...

Saludos...


En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Listas enlazadas en c++
« Respuesta #2 en: 13 Julio 2010, 09:30 am »

En la función miembro vacio() creo que hay un error:

Código
  1. bool lista::vacio(void){
  2.                        if(cant=0){
  3.                                   return true;
  4.                        }
  5.                        else
  6.                            {
  7.                            return false;
  8.                            }
  9.     }
  10.  
Asignas 0 a cant dentro del IF.

Podrías crear un destructor que liberara la memoria usada.

Solo te aconsejo que retoques el código para que lo dejes más estético, la indentación es pesima, tal vez a ti no te importe, pero si algún día llegas a programar en un equipo esto es realmente importante.

Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
N3r0

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: Listas enlazadas en c++
« Respuesta #3 en: 13 Julio 2010, 12:42 pm »

Ahi corregi los errores . Luego corrigo la indentacion y agrego el destructor fue del apuro que quedo asi :xD gracias por comentar saludos.
« Última modificación: 13 Julio 2010, 12:47 pm por Devil_Nero » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con listas enlazadas.
Programación C/C++
samur88 9 4,893 Último mensaje 4 Diciembre 2010, 19:18 pm
por EddyC
aclaracion de listas dobles enlazadas
Programación C/C++
josue_tux 2 3,731 Último mensaje 15 Marzo 2011, 14:41 pm
por Don Pollo
ficheros en listas enlazadas
Programación C/C++
mapers 3 4,474 Último mensaje 28 Marzo 2011, 14:09 pm
por D4RIO
Ayuda con listas enlazadas C++ solo para Masters jejejeje
Programación C/C++
haven7 0 2,830 Último mensaje 27 Junio 2012, 03:32 am
por haven7
como crear funciones para listas enlazadas en c++?
Programación C/C++
KINGARZA 3 3,057 Último mensaje 14 Julio 2016, 23:52 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines