Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - N3r0

#1
Programación C/C++ / Listas enlazadas en c++
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

#include <iostream>
#include "lista.h"

using namespace std;

int main(int argc, char *argv[]) {
                lista l;
                int x,i=0;
                while(i!=5){
                                l.AddData(i);
                                i++;
                }
                i=l.Size();
                while(i!=0){
                                  x=l.GetData(i);
                                  i--;
                                  cout<<x<<endl;
                }   
                l.~lista();
                cin.get();
}



Lista.h


#ifndef __LISTA_H__
#define __LISTA_H__
#include <iostream>
class lista
{
    private:  //Estructura de la lista
                typedef struct tipoNodo{
                                                        int dato;
                                                        struct tipoNodo *siguiente;
                                                        };
                typedef tipoNodo *l;
                l p;
                int cant;

    public:
               lista(void);  //constructor General de la clase
               ~lista(void); //Destructor de la clase
           void AddData(int); //Add inserta dato en la lista
               int GetData(int);        //get retorna el dato de una poscion especifica
               void DelData(int); //del borra el dato de una posicion especifica
               int FindData(int); //find devuelve la posicion del dato en la lista
               int Size(void);   //size devuelve el tamaño de la lista
               bool vacio(); 
               void AddOrder(int); // inserta ordenado
};
#endif



Lista.cpp:



#include <iostream>
#include "lista.h"

using namespace std;

//constructor por defecto
lista::lista(void){
                   p=NULL;
                   cant=0;
}
//Destructor

lista::~lista(void){
                    delete p;
}

//Add
void lista::AddData(int n){
                           l nuevo=new tipoNodo;
                           nuevo->dato=n;
                           nuevo->siguiente=p;
                           p=nuevo;
                           cant=cant+1;
}
//get
int lista::GetData(int pos){
                            l aux;
                            int i=1;
                            aux=p;
                            while(i!=pos){
                                          aux=aux->siguiente;
                                          i++;
                            }
                            return aux->dato;
}
void lista::DelData(int pos){
                             l aux,ant=NULL;
                             int i=1;
                             aux=p;
                             while(i!=pos){
                                           ant=aux;
                                           aux=aux->siguiente;
                                           i++;
                             }
                             if(ant==NULL){
                                           delete aux;
                                           cant=cant-1;
                             }
                             else{
                                  ant->siguiente=aux->siguiente;
                                  delete aux;
                             }
}

int lista::FindData(int nro){
                             l aux;
                             aux=p;
                             int i=1;
                             while((aux->dato!=nro)&&(aux!=NULL)){
                                                                  aux=aux->siguiente;
                                                                  i++;
                             }
                             if(aux==NULL){
                                           return 0;
                             }
                             else{
                                  return i;
                             }
}

int lista::Size(void){
                      return cant;
}

bool lista::vacio(void){
                        if(cant==0){
                                    return true;
                        }
                        else{
                             return false;
                        }
}

void lista::AddOrder(int nro){
                              l ant=NULL,aux=p,nuevo=new tipoNodo;
                              nuevo->dato=nro;
                              while((aux!=NULL)&&(nro>aux->dato)){
                                                                  ant=aux;
                                                                  aux=aux->siguiente;
                              }
                              if(ant==NULL){
                                            nuevo->siguiente=aux;
                                            p=nuevo;
                              }
                              else{
                                   ant->siguiente=nuevo;
                                   nuevo->siguiente=aux;
                              }
}



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.