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();
}
}
}