Ver Mensaje Individual
  #17 (permalink)  
Antiguo 28/07/2013, 18:49
ambigus
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 16 años, 3 meses
Puntos: 1
Exclamación Respuesta: Guia_Listas_Enlazadas - C++

¿Porqué no corre? :(

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