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// Agrega_Clase_ListaSE.cpp: archivo de proyecto principal.
#include "stdafx.h"
#include "iostream"
#include <conio.h>
using namespace System;
using namespace std;
struct nodo
{
int dato;
nodo *sig;
};
class Lse
{
private:
nodo *inicial;
nodo *buscarLista(int clave);
public:
Lse();
~Lse();
void agregar();
void eliminar();
void desplegarLista();
};
Lse::Lse()
{
inicial=NULL;
}
Lse::~Lse ()
{
}
void Lse::desplegarLista()
{
if(inicial==NULL)
{
cout<<"La lista esta vacia"<<endl;
}
else
{
nodo *apunt;
apunt=inicial;
while(apunt!=NULL)
{
cout<<apunt->dato<<endl;
apunt=apunt->sig;
}
}
}
nodo *Lse::buscarLista(int clave)
{
//Devuelve la dirección del nodo que antecede al nuevo //nodo que va a ser agregado, o que va a ser eliminado.
//Si la clave es menor o igual al dato del primer nodo //el valor devuelto es NULL.
//Si la clave es mayor que el dato del último nodo //devuelve la dirección del último nodo.
nodo *anterior; // Anterior AUXILIAR
anterior=NULL;
if(clave <= inicial->dato)return anterior;
else
{
anterior=inicial;
while ( ( anterior->sig!=NULL) && (clave > anterior->sig->dato) )
anterior=anterior->sig;
return anterior;
}
}
void Lse::agregar()
{
nodo *nuevo,*anterior,*apunt;
char resp;
do
{
nuevo=new nodo();
cout<<"Entre clave del nodo a agregar"<<endl;
cin>>nuevo->dato;
if(inicial==NULL)
{
//Agrega el primer nodo a la lista
inicial=nuevo;
nuevo->sig=NULL;
}
else
{
//Agrega a una lista que contiene al menos un nodo
apunt=inicial;
while(apunt->sig!=NULL)
{
if(nuevo->dato==apunt->dato)
{
cout<<"El nodo a agregar ya existe"<<endl;
delete nuevo;
}
apunt=apunt->sig;
};
anterior=buscarLista(nuevo->dato);
if(anterior==NULL)
{
//Agrega un nodo que queda de primero
//en una lista que no estaba vacia
nuevo->sig=inicial;
inicial=nuevo;
}
else
{
if(anterior->sig!=NULL)
{
//Agrega un nodo que queda entre el
//primero y el ultimo
nuevo->sig=anterior->sig;
anterior->sig=nuevo;
}
else
{
//Agrega un nodo que queda de ultimo
nuevo->sig=NULL;
anterior->sig=nuevo;
}
}
}
cout<<"Desea agregar otro nodo? (s/n)"<<endl;
cin>>resp;
}while(resp=='s');
}
void main()
{
Lse l;
l.agregar();
l.desplegarLista();
}
Espero una pronta respuesta.