listas circulares en c++

diegoleo24
04 de Febrero del 2005
Alguien puede ayudarme con un programa que concatene dos listas circulares en c++?
Gracias.
Yo poseo otros programas en c++ que puedo compartir.

noel solw
04 de Febrero del 2005
tengo uno que usa pointers y clases genericas.
Si conoces el tema, te lo mando.

vceli
04 de Febrero del 2005
quiero saber como hacen las operaciones la colas circulares en c++

noel solw
04 de Febrero del 2005
fijate en el foro bajo el titulo "unir dos listas enlazadas".

Edison
04 de Febrero del 2005
Hola amigo ...
Lamentablemente no puedo ayudarte pero .....si no fuera mucha molestia me gustaria que me envies algunos programas de listas enlazadas dobles que trabajen con letras " String " ......

Pero dime tu problema quisa yo pudiera ayudarte , la verdad no estoyt seguro ...recien estoy introduciendome en lo que es listas enlazadas pero si en algo pueda ayudarte ...

Gracias

BELKYS
04 de Febrero del 2005
por favor necesito un algoritmo que me cree, inserte y elimine

©garaxin
04 de Febrero del 2005
hola, lamento, no poder ayudarte, pero te agradeceria mucho si pudiaeras ayudarme a mi, necesito crear una lista doblemente enlazada en C++, gracias, suerte

diegoleo24
04 de Febrero del 2005

#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;
}