Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/08/2011, 16:27
cristian_herrera05
 
Fecha de Ingreso: agosto-2011
Ubicación: Rivadavia
Mensajes: 4
Antigüedad: 12 años, 9 meses
Puntos: 0
A medida que Ingreso ordenos los datos a una Lista Enlazada usando Clases

Hola a todos, les comento mi problema, tengo que hacer una lista enlazada donde a medida que ingreso los datos los tengo que ordenar, luego mostrarlo, encare el tema usando clases, pero cuando lo compilo me da errores y no se como se solucionan.. pasa que soy nuevo en esto de POO, para hacerlo use el Dev-C++, espero puedan ayudarme.. desde ya muchas gracias..
este es el codigo del programa::

//**************************************************

// esta es la declaracion de la clase lista


#ifndef LISTA_H
#define LISTA_H
#include "nodo.h"

/*
* con esta clase creo la lista
*/
class lista
{
private:
nodo cabeza; // cabeza es un dato tipo nodo

public:
// class constructor
lista();
// class destructor
~lista();
bool InsertarOrdenado(int nuevodato );
void MostrarLista();
};

#endif // LISTA_H

//************************************************

// esta es la declaracion de la clase nodo

ifndef NODO_H
#define NODO_H


class nodo
{
private:
int valor;
nodo *sig;

public:
// class constructor
nodo();
// class destructor
~nodo();

//nodo (int valornuevo,nodo sigui);
nodo VerSiguiente();
int VerDato();
void AsignarDato(int nuevo);
void AsignarSiguiente(nodo siguiente);
};

//************************************************** ****

// esta es la definicion de los metodos de la clase lista

#include "nodo.h"
#include "lista.h" // class's header file
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

// class constructor
lista::lista()
{
cabeza= NULL; // esto lo agregue 2011cabeza= NULL;
}

// class destructor
lista::~lista()


bool lista::InsertarOrdenado(int nuevodato)

{
lista lista=new lista (); //
nodo nuevo; //
nuevo = new nodo(); //
nuevo.AsignarDato(int nuevo); //
nuevo.AsignarSiguiente(cabeza); // me parece que el error esta aca.
nuevo = cabeza; //
try
{
if (cabeza == null)
cabeza = nuevo;
else
{
nodo actual = cabeza;
nodo ant = actual;
while ((actual != null)&& (actual.VerDato() < nuevo.VerDato()))
{
ant = actual;
actual = actual.VerSiguiente();
}
ant.AsignarSiguiente(nuevo);
nuevo.AsignarSiguiente(actual);
return true;
}
return true;
}
return false
}

void lista::MostrarLista()
{
nodo actual=cabeza;
while ((actual != null))
{
cout << actual.VerDato()<< endl;
actual = actual.VerSiguiente();
}
}

//********************************************

//esta es la definicion de los metodos dela clase nodo


#include <iostream.h>
#include "nodo.h" // class's header file
#include "lista.h"


using std::cout;
using std::cin;
using std::endl;

// class constructor
nodo::nodo()
{
// insert your code here
}

// class destructor
nodo::~nodo()
{
// insert your code here
}


//nodo nodo::nodo(int valornuevo,nodo sigui)
//{
// valor = valornuevo;
// sig = sigui;
//}

nodo nodo::VerSiguiente()
{
return sig;
}

int nodo::VerDato()
{
return valor;
}

void nodo::AsignarDato(int nuevo)
{
valor = nuevo;
}

void nodo::AsignarSiguiente(nodo siguiente)
{
sig = siguiente;
}


//*******************************************

// este es el programa principal...


#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include "nodo.h"
#include "lista.h"


using namespace std;

int main(int argc, char *argv[])
{ lista lista;
int dato;
//lista = new lista();
cout<<"\n\n Ingrese Dato Cero (0) para finalizar\n"<<endl;
cin>>dato;
while (dato != 0) // si el dato es cero salgo del programa
{
//nodo nuevo = new nodo(dato,null);
lista.InsertarOrdenado(dato);
cout<<"\n\n Ingrese Dato Cero (0) para finalizar\n"<<endl;
cin>>dato;
}
cout<<"\n\n La Lista de datos es:\n"<<endl;
lista.MostrarLista();

system("PAUSE");
return EXIT_SUCCESS;
}



este programita lo hice en C# ( que me parecio mas entendible y luego cuando lo hice en C++ tuve los problemas..) este es el codigo en C#, y funciona bien..



using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class nodo
{
int valor;
nodo sig;
//constructor
public nodo(int valornuevo,nodo sigui)
{
valor = valornuevo;
sig = sigui;
}

public nodo VerSiguiente()
{ return sig; }

public int VerDato()
{ return valor; }

public void AsignarDato(int nuevo)
{ valor = nuevo; }

public void AsignarSiguiente(nodo siguiente)
{
sig = siguiente;
}

}
class lista
{
nodo cabeza;

public lista()
{
cabeza = null;
}

public bool lnsertarOrdenado(nodo nuevo)
{
try
{
if (cabeza == null)//true: lista vacia
cabeza = nuevo;
else
{
nodo actual = cabeza;
nodo ant = actual;//anterior apunta a lo que apunta actual.
while ((actual != null) && (actual.VerDato() < nuevo.VerDato()))
{
ant = actual;
actual = actual.VerSiguiente();
}
ant.AsignarSiguiente(nuevo);
nuevo.AsignarSiguiente(actual);
return true;
}
return true;
}
catch (Exception e) { Console.WriteLine(e.Message); }
return false;
}

public void MostrarLista()
{
nodo actual=cabeza;
while ((actual != null))
{
Console.WriteLine(actual.VerDato());
actual = actual.VerSiguiente();
}
}
}
class Program
{
static void Main(string[] args)
{
int dato=1;
lista lista = new lista();
Console.WriteLine("Ingrese Dato. Cero para finalizar");
dato = Int32.Parse(Console.ReadLine());
while (dato != 0)
{

nodo nuevo = new nodo(dato, null);
lista.lnsertarOrdenado(nuevo);
Console.WriteLine("Ingrese Dato. Cero para finalizar");
dato = Int32.Parse(Console.ReadLine());
}
Console.WriteLine("Lista de datos");
lista.MostrarLista();
Console.ReadKey();
}
}
}