Analicen este programa:
Este programa debe crear dos listas, imprimirlas, borrar un nodo deseado, ordenarlas y unirlas o concatenarlas.
Quién puede decirme por qué no funcionan las funciones unir y ordenar?.
Les agradeceré mucho, es urgente.
#include <iostream.h>
#include <conio.h>
class nodo {
public:
nodo(int v, nodo *sig = NULL)
{
valor = v;
siguiente = sig;
siguiente1 = sig;
aux=NULL;
anterior=NULL;
}
private:
int valor;
nodo *siguiente, *siguiente1, *aux,*anterior;
friend class lista1;
friend class lista;
};
typedef nodo *pnodo;
class lista {
public:
lista() { actual = NULL; }
~lista();
void listac_insertar(int val);
void listac_borrar(int val);
void imprimir();
void Siguiente();
void ordenar();
void unir();
int ValorActual() { return actual->valor; }
private:
pnodo actual;
};
lista::~lista()
{
pnodo nodo;
while(actual->siguiente != actual) {
nodo = actual->siguiente;
actual->siguiente = nodo->siguiente;
delete nodo;
}
delete actual;
actual = NULL;
}
void lista:: listac_insertar (int val)
{
pnodo Nodo;
Nodo = new nodo(val);
if(actual == NULL) actual = Nodo;
else Nodo->siguiente = actual->siguiente;
actual->siguiente = Nodo;
}
void lista::unir()
{
pnodo Nodo;
Nodo = new nodo(0);
Nodo->siguiente = actual->siguiente;
actual->siguiente = Nodo;
actual->aux= Nodo->siguiente;
actual->siguiente1 = actual->aux;
Nodo->siguiente = actual->aux;
}
void lista:: listac_borrar (int val)
{
pnodo nodo;
nodo = actual;
do {
if(actual->siguiente->valor != val) actual = actual->siguiente;
} while(actual->siguiente->valor != val && actual != nodo);
if(actual->siguiente->valor == val) {
if(actual == actual->siguiente) {
delete actual;
actual = NULL;
}
else {
nodo = actual->siguiente;
actual->siguiente = nodo->siguiente;
delete nodo;
}
}
else cout <<"no existe ese valor en la lista";
}
void lista::imprimir()
{
if(actual !=NULL)
cout<<"la Lista si tiene datos y estos son: n";
pnodo nodo = actual;
do {
cout << nodo->valor << " --> ";
nodo = nodo->siguiente;
} while(nodo != actual);
cout << endl;
}
void lista::ordenar()
{
if(actual !=NULL)
cout<<"la Lista ordenada queda: n";
pnodo nodo = actual;
do {
cout << nodo->valor << " --> ";
nodo = nodo->siguiente;
} while(nodo != actual);
cout << endl;
}
void lista::Siguiente()
{
if(actual) actual = actual->siguiente;
}
class lista1 {
public:
lista1() { actual = NULL; }
~lista1();
void listac_insertar1(int val);
void listac_borrar1(int val);
void imprimir1();
void Siguiente1();
int ValorActual() { return actual->valor; }
private:
pnodo actual;
};
lista1::~lista1()
{
pnodo nodo;
while(actual->siguiente1 != actual) {
nodo = actual->siguiente1;
actual->siguiente1 = nodo->siguiente1;
delete nodo;
}
delete actual;
actual = NULL;
}
void lista1::listac_insertar1(int val)
{
pnodo Nodo;
Nodo = new nodo(val);
if(actual == NULL) actual = Nodo;
else
Nodo->siguiente1 = actual->siguiente1;
actual->siguiente1 = Nodo;
}
void lista1::listac_borrar1(int val)
{
pnodo nodo;
nodo = actual;
do {
if(actual->siguiente1->valor != val) actual = actual->siguiente1;
} while(actual->siguiente1->valor != val && actual != nodo);
if(actual->siguiente1->valor == val) {
if(actual == actual->siguiente1) {
delete actual;
actual = NULL;
}
else {
nodo = actual->siguiente1;
actual->siguiente1 = nodo->siguiente1;
delete nodo;
}
}
else cout <<"no existe ese valor en la lista n";
}
void lista1::imprimir1()
{
if(actual !=NULL)
cout<<"la Lista si tiene datos y estos son: n";
pnodo nodo = actual;
do {
cout << nodo->valor << " --> ";
nodo = nodo->siguiente1;
} while(nodo != actual);
cout << endl;
}
void lista1::Siguiente1()
{
if(actual) actual = actual->siguiente1;
}
int main()
{
lista ob2;
lista1 ob1;
int a,b,c,d,e;
cout <<"Deme los valores para ingresar en la lista n" ;
cout<< "Deme los datos <<Números enteros >>";
gotoxy(4,4);cin >>a;
gotoxy(4,5);cin >>b;
gotoxy(4,6);cin >>c;
gotoxy(4,7);cin >>d;
ob1.listac_insertar1(a);
ob1.listac_insertar1(b);
ob1.listac_insertar1(c);
ob1.listac_insertar1(d);
ob2.listac_insertar(10);
ob2.listac_insertar(2);
ob2.listac_insertar(3);
ob2.listac_insertar(4);
ob2.ordenar();
ob1.imprimir1();
ob2.imprimir();
// ob2.unir();
ob2.imprimir();
cout << "Lista de elementos:" << endl;
cout <<"Qué dato desea borrar?";
cin >>e;
ob1.listac_borrar1(e);
cout <<"Luego de ese proceso, :n ";
ob1.imprimir1();
return 0;
}
Quién puede decirme por qué no funcionan las funciones unir y ordenar?.
Les agradeceré mucho, es urgente.
#include <iostream.h>
#include <conio.h>
class nodo {
public:
nodo(int v, nodo *sig = NULL)
{
valor = v;
siguiente = sig;
siguiente1 = sig;
aux=NULL;
anterior=NULL;
}
private:
int valor;
nodo *siguiente, *siguiente1, *aux,*anterior;
friend class lista1;
friend class lista;
};
typedef nodo *pnodo;
class lista {
public:
lista() { actual = NULL; }
~lista();
void listac_insertar(int val);
void listac_borrar(int val);
void imprimir();
void Siguiente();
void ordenar();
void unir();
int ValorActual() { return actual->valor; }
private:
pnodo actual;
};
lista::~lista()
{
pnodo nodo;
while(actual->siguiente != actual) {
nodo = actual->siguiente;
actual->siguiente = nodo->siguiente;
delete nodo;
}
delete actual;
actual = NULL;
}
void lista:: listac_insertar (int val)
{
pnodo Nodo;
Nodo = new nodo(val);
if(actual == NULL) actual = Nodo;
else Nodo->siguiente = actual->siguiente;
actual->siguiente = Nodo;
}
void lista::unir()
{
pnodo Nodo;
Nodo = new nodo(0);
Nodo->siguiente = actual->siguiente;
actual->siguiente = Nodo;
actual->aux= Nodo->siguiente;
actual->siguiente1 = actual->aux;
Nodo->siguiente = actual->aux;
}
void lista:: listac_borrar (int val)
{
pnodo nodo;
nodo = actual;
do {
if(actual->siguiente->valor != val) actual = actual->siguiente;
} while(actual->siguiente->valor != val && actual != nodo);
if(actual->siguiente->valor == val) {
if(actual == actual->siguiente) {
delete actual;
actual = NULL;
}
else {
nodo = actual->siguiente;
actual->siguiente = nodo->siguiente;
delete nodo;
}
}
else cout <<"no existe ese valor en la lista";
}
void lista::imprimir()
{
if(actual !=NULL)
cout<<"la Lista si tiene datos y estos son: n";
pnodo nodo = actual;
do {
cout << nodo->valor << " --> ";
nodo = nodo->siguiente;
} while(nodo != actual);
cout << endl;
}
void lista::ordenar()
{
if(actual !=NULL)
cout<<"la Lista ordenada queda: n";
pnodo nodo = actual;
do {
cout << nodo->valor << " --> ";
nodo = nodo->siguiente;
} while(nodo != actual);
cout << endl;
}
void lista::Siguiente()
{
if(actual) actual = actual->siguiente;
}
class lista1 {
public:
lista1() { actual = NULL; }
~lista1();
void listac_insertar1(int val);
void listac_borrar1(int val);
void imprimir1();
void Siguiente1();
int ValorActual() { return actual->valor; }
private:
pnodo actual;
};
lista1::~lista1()
{
pnodo nodo;
while(actual->siguiente1 != actual) {
nodo = actual->siguiente1;
actual->siguiente1 = nodo->siguiente1;
delete nodo;
}
delete actual;
actual = NULL;
}
void lista1::listac_insertar1(int val)
{
pnodo Nodo;
Nodo = new nodo(val);
if(actual == NULL) actual = Nodo;
else
Nodo->siguiente1 = actual->siguiente1;
actual->siguiente1 = Nodo;
}
void lista1::listac_borrar1(int val)
{
pnodo nodo;
nodo = actual;
do {
if(actual->siguiente1->valor != val) actual = actual->siguiente1;
} while(actual->siguiente1->valor != val && actual != nodo);
if(actual->siguiente1->valor == val) {
if(actual == actual->siguiente1) {
delete actual;
actual = NULL;
}
else {
nodo = actual->siguiente1;
actual->siguiente1 = nodo->siguiente1;
delete nodo;
}
}
else cout <<"no existe ese valor en la lista n";
}
void lista1::imprimir1()
{
if(actual !=NULL)
cout<<"la Lista si tiene datos y estos son: n";
pnodo nodo = actual;
do {
cout << nodo->valor << " --> ";
nodo = nodo->siguiente1;
} while(nodo != actual);
cout << endl;
}
void lista1::Siguiente1()
{
if(actual) actual = actual->siguiente1;
}
int main()
{
lista ob2;
lista1 ob1;
int a,b,c,d,e;
cout <<"Deme los valores para ingresar en la lista n" ;
cout<< "Deme los datos <<Números enteros >>";
gotoxy(4,4);cin >>a;
gotoxy(4,5);cin >>b;
gotoxy(4,6);cin >>c;
gotoxy(4,7);cin >>d;
ob1.listac_insertar1(a);
ob1.listac_insertar1(b);
ob1.listac_insertar1(c);
ob1.listac_insertar1(d);
ob2.listac_insertar(10);
ob2.listac_insertar(2);
ob2.listac_insertar(3);
ob2.listac_insertar(4);
ob2.ordenar();
ob1.imprimir1();
ob2.imprimir();
// ob2.unir();
ob2.imprimir();
cout << "Lista de elementos:" << endl;
cout <<"Qué dato desea borrar?";
cin >>e;
ob1.listac_borrar1(e);
cout <<"Luego de ese proceso, :n ";
ob1.imprimir1();
return 0;
}
