lunes, 14 de octubre de 2013

Lista enlazada simple

Listasimp.htm
/*
 
  Author: CARLOS MARTIN RAMIREZ GARCIA
  Date: 14/10/13 20:53
  Description: codigo de una lizta enlazada 
  ListaSimple.cpp
*/

#include<iostream>
using namespace std;

class NodoD
{
      public:
            int dato;
            NodoD *sig;
      
      NodoD()
      {
         dato=0;
         sig=NULL;
         }
      NodoD(int dato)
      {
        this->dato=dato;
        sig=NULL;
        }
        };
class ListaSimple
{
public:
       NodoD *primero;
       NodoD *ultimo;
             
       ListaSimple()
       {
        primero=NULL;
        ultimo=NULL;
         }
       int EstaVacia()
       {
       return (primero==NULL && ultimo==NULL);
       }
       void agregarAlprincipio(int dato)
       {
            if(EstaVacia())
            {
            NodoD *nodo;
            nodo=new NodoD(dato);
            primero=nodo;
            ultimo=nodo;
            }
             else
             {
                  NodoD *nodo;
                  nodo=new NodoD(dato);
                  nodo->sig=primero;
                  primero=nodo;
                  }
                  }
       void agregarAlfinal(int dato)
       {
            if(EstaVacia())
            {
            NodoD *nodo;
            nodo=new NodoD(dato);
            primero=nodo;
            ultimo=nodo;
            }
             else
             {
                  NodoD *nodo;
                  nodo=new NodoD(dato);
                  ultimo->sig=nodo;
                  ultimo=nodo;
                  
                  }
                  }

          NodoD* buscar(int dato)
          {
            NodoD *nodo;
            nodo=primero;
            while(nodo!=NULL && nodo->dato)
            {
               nodo=nodo->sig;
               }
               return nodo;
               }
               
          void mostrarLista()
          {
               
               if(EstaVacia())
               {
                 cout << "noexisten datos"<<endl;
                 return;
                 }
                 else
                 {
                 NodoD *imprime;
                imprime=primero;
                int i=0;
                cout<<"datos"<<endl;
                while(imprime!=NULL)
                {
                  cout<<"nodo: " << imprime->dato;
                  cout<<"\n";
                  imprime=imprime->sig;
                  cout<<"\n\n";                 
                   i++;
                   }
                   }
                   }
          int obtenerElemento(int indice)
          {
              NodoD *nodo;
              int i =1;
              nodo=primero;
              while(nodo!=NULL && i<indice)
              {
                 nodo=nodo->sig;
                 i++;
                 }
                 if(nodo!=NULL)
                 {
                   return nodo->dato;
                   }
                   else
                   {
                       cout << "Aviso nose encontro el evento: " << i << endl;
                       return 0XFFFFFF;
                       }
                       }
         
        void eliminar (int dato)
        {
             NodoD *prev, *nodo;
             nodo=primero;
             prev=NULL;
             while(nodo!=NULL && nodo->dato!=dato)
             {
               prev=nodo;
               nodo=nodo->sig;
               }
               if(prev!=NULL && nodo != NULL)
               {
                 prev->sig=nodo->sig;
                 delete nodo;
                 }
                 else if(nodo!=NULL && prev==NULL)
                 {
                    primero = nodo->sig;
                    primero=nodo->sig;
                    delete nodo;
                    }
                    }
                    
                 
  void insertar(int dato,int indice)
  {
       NodoD *nodo, *prev;
       int i=0;
       prev=NULL;
       nodo=primero;
       while(nodo!=NULL && i< indice)
       {
                        prev=nodo;
                        nodo=nodo->sig;
                        i++;
                        }
                        if(nodo!=NULL)
                        {
                          if(nodo!=primero)
                          {
                            NodoD *NuevoNodo=new NodoD(dato);
                            prev->sig=NuevoNodo;
                            NuevoNodo->sig=nodo;
                            }
                            }
                            else 
                            {
                                 cout<<"el dato se inserta en la posicion: "<< i << endl;
                                 if(EstaVacia())
                                 {
                                    agregarAlprincipio(dato);
                                    }
                                    else
                                    {
                                    agregarAlfinal(dato);
                                    }
                                    }
                                    }
                                    
                            
       void limpiar()
       {
         NodoD *nodo,*sig=NULL;
         if(EstaVacia())
          return;
          nodo=primero;
          while(nodo!=NULL)
         {
          sig=nodo->sig;
          delete nodo;
          nodo=sig;
          }
          primero=NULL;
          ultimo=NULL;
      }
~ListaSimple()
{
   limpiar();
}

                                                       
    
                     
       };
       
int main()
{
    int inf;
    ListaSimple lista;
    lista.agregarAlprincipio(1);
    lista.agregarAlprincipio(2);
    lista.agregarAlprincipio(3);
    lista.agregarAlprincipio(4);
    lista.agregarAlfinal(20);
    lista.mostrarLista();
    inf=lista.obtenerElemento(9);
    cout << "dato buscado: "<<inf<<endl;
    lista.eliminar (20);
    lista.mostrarLista();
      lista.insertar(5,2);
      lista.eliminar (3);
      lista.mostrarLista();
 
    lista.~ListaSimple(); 
    lista.mostrarLista();
    system("pause");
    return 0;
}


No hay comentarios:

Publicar un comentario