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

Jajajaja perdón es 5 con memoria x24 :)

Muchos números xD

Amigo, mira estoy intentando hacer el literal b) y este es el código que propongo, pero nosé qué esta mal con él :(

b) Corregir la función agregar de tal forma que no permita agergar nodos con claves repetidas. La función, en caso de intentar agregar una clave ya existente, debe mostrar el siguiente mensaje: "El nodo a agregar ya existe".

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

Espero una pronta respuesta.