Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/07/2013, 15:41
ambigus
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 16 años, 3 meses
Puntos: 1
Pregunta Guia_Listas_Enlazadas - C++

Saludos!!

El presente tema tiene como finalidad resolver una guía de programación estructurada en C++.

Este es el código con el que se va a trabajar.

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

Bien, acontinuación imagenes de la guía:





En Flirck:
1. http://farm3.staticflickr.com/2862/9...e64f8d0a_o.jpg
2. http://farm4.staticflickr.com/3710/9...6d0854ba_o.jpg
3. http://farm3.staticflickr.com/2819/9...8e45637c_o.jpg


Podrán encontrar la guía completa en PDF aquí: " https://mega.co.nz/#!aB1DRDiC!RWu4s1...lGa3yAev7cTsso
"

Ahora bien. Mi duda actual se refiere a la interpretación de las lineas:

Código C++:
Ver original
  1. nodo *Lse::buscarLista(int clave)
  2. {
  3.     //Devuelve la dirección del nodo que antecede al nuevo //nodo que va a ser agregado, o que va a ser eliminado.
  4.     //Si la clave es menor o igual al dato del primer nodo //el valor devuelto es NULL.
  5.     //Si la clave es mayor que el dato del último nodo //devuelve la dirección del último nodo.
  6.  
  7.     nodo *anterior;
  8.     anterior=NULL;
  9.     if(clave <= inicial->dato)return anterior;
  10.     else
  11.     {
  12.         anterior=inicial;
  13.         while ( ( anterior->sig!=NULL) && (clave > anterior->sig->dato) )
  14.                                                   anterior=anterior->sig;
  15.         return anterior;
  16.     }
  17. }

¿Qué está haciendo el programa?, ¿Asignando el código de memoria de un nodo-dato a otro?, ¿Cómo funciona el mecanismo?, ¿Cuándo intermabio el código de memoria ( En este caso x4 -> x9) ?, ¿Qué significa el simbolo "->"?

Gracias de antemano por la ayuda.