Ver Mensaje Individual
  #29 (permalink)  
Antiguo 05/08/2013, 17:36
ambigus
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 16 años, 4 meses
Puntos: 1
Pregunta Respuesta: Guia_Listas_Enlazadas - C++

Código C++:
Ver original
  1. // Agrega_Clase_ListaDE.cpp: archivo de proyecto principal.
  2.  
  3. #include "stdafx.h"
  4. #include "iostream"
  5. #include <conio.h>
  6. using namespace System;
  7. using namespace std;
  8. struct nodo
  9. {
  10.     int dato;
  11.     nodo *ant;
  12.     nodo *sig;
  13. };
  14. class Lde
  15. {
  16. private:
  17.     nodo *inicial;
  18.     nodo *buscarLista(int clave);
  19. public:
  20.     Lde();
  21.     ~Lde();
  22.     void agregar();
  23.     void eliminarNodo();
  24.     void desplegarLista(); 
  25. };
  26. Lde::Lde()
  27. {
  28.     inicial=NULL;
  29. }
  30. Lde::~Lde ()
  31. {
  32. }
  33. void Lde::desplegarLista()
  34. {
  35.     if(inicial==NULL)
  36.     {
  37.         cout<<"La lista esta vacia"<<endl;
  38.     }
  39.     else
  40.     {
  41.         nodo *apunt;
  42.         apunt=inicial;
  43.         while(apunt!=NULL)
  44.         {
  45.             cout<<apunt->dato<<endl;
  46.             apunt=apunt->sig;
  47.         }
  48.     }  
  49. }
  50. nodo *Lde::buscarLista(int clave)
  51. {
  52.     //Devuelve la dirección del nodo que antecede al nuevo //nodo que va a ser agregado, o que va a ser eliminado.
  53.     //Si la clave es menor o igual al dato del primer nodo //el valor devuelto es NULL.
  54.     //Si la clave es mayor que el dato del último nodo //devuelve la dirección del último nodo.
  55.  
  56.     nodo *anterior; // Anterior AUXILIAR
  57.     anterior=NULL;
  58.     if(clave <= inicial->dato)return anterior;
  59.     else
  60.     {
  61.         anterior=inicial;
  62.         while ( ( anterior->sig!=NULL) && (clave > anterior->sig->dato) )
  63.                                                   anterior=anterior->sig;
  64.         return anterior;
  65.     }
  66. }
  67. void Lde::agregar()
  68. {
  69.     nodo *nuevo,*anterior,*apunt,*clavenodo;
  70.     char resp;
  71.     do
  72.     {
  73.         nuevo=new nodo();
  74.         cout<<"Entre clave del nodo a agregar"<<endl;
  75.         cin>>nuevo->dato;
  76.         if(inicial==NULL)
  77.         {
  78.             //Agrega el primer nodo a la lista
  79.             inicial=nuevo;
  80.             nuevo->ant=NULL;
  81.             nuevo->sig=NULL;
  82.         }
  83.         else
  84.         {
  85.             //Agrega a una lista que contiene al menos un nodo
  86.             anterior=buscarLista(nuevo->dato);
  87.             if(anterior==NULL)
  88.             {
  89.                 //Agrega un nodo que queda de primero
  90.                 //en una lista que no estaba vacia
  91.                 nuevo->sig=inicial;
  92.                 nuevo->ant=inicial->ant;
  93.                 inicial->ant=nuevo;
  94.                 inicial=nuevo;
  95.             }
  96.             else
  97.             {
  98.                 if(anterior->sig!=NULL)
  99.                 {
  100.                     //Agrega un nodo que queda entre el
  101.                     //primero y el ultimo
  102.                     nuevo->sig=anterior->sig;
  103.                     nuevo->ant=anterior;
  104.                     anterior->sig->ant=nuevo;
  105.                     anterior->sig=nuevo;
  106.                 }
  107.                 else
  108.                 {
  109.                     //Agrega un nodo que queda de ultimo
  110.                     nuevo->sig=anterior->sig;
  111.                     nuevo->ant=anterior;
  112.                     anterior->sig=nuevo;
  113.                 }
  114.             }
  115.         }
  116.         cout<<"Desea agregar otro nodo? (s/n)"<<endl;
  117.         cin>>resp;
  118.         resp=tolower(resp);
  119.     }while(resp=='s');
  120.  
  121.            
  122. }
  123.  
  124. void Lde::eliminarNodo()
  125. {
  126.     nodo *apunteliminar, *eliminarNodo,*clavenodo;
  127.     char resp;
  128.     apunteliminar=inicial;
  129.  
  130.         cout<<"Desea eliminar un nodo? (y/n)"<<endl;
  131.         cin>>resp;
  132.         resp=tolower(resp);
  133.         if(resp=='y')
  134.         {
  135.             clavenodo==NULL;
  136.             cout<<"Digite la clave del nodo que va a eliminar"<<endl;
  137.             cin>>clavenodo->dato;
  138.         }
  139.  
  140.     if(apunteliminar->dato==clavenodo->dato)
  141.     {
  142.         delete apunteliminar;
  143.         cout<<"El nodo señalado ha sido eliminado"<<endl;
  144.     }
  145.     else
  146.     {
  147.         cout<<"El nodo señalado no ha sido encontrado"<<endl;
  148.     }
  149. }
  150. void main()
  151. {
  152.     Lde l;
  153.     l.agregar();
  154.     l.desplegarLista();
  155.     getch();
  156. }

En este código. ¿Qué significa la linea de comando

Código C++:
Ver original
  1. anterior->sig->ant=nuevo;

¿Está bien planteado esta interpretación de "Listas Doblemente Enlazadas?



Gracias de antemano.