Aqui les dejo el codigo, pruebenlo y comenten.
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
typedef int tipo;
class nodo_doble{
tipo dato;
nodo_doble *anterior, *siguiente;
public:
nodo_doble(tipo d, nodo_doble * e , nodo_doble *ee ){ dato=d; siguiente=e; anterior=ee; }
nodo_doble(tipo d){ dato=d; }
tipo m_dato(){ return dato; }
nodo_doble* m_siguiente(){ return siguiente; }
nodo_doble* m_anterior(){ return anterior; }
void p_anterior(nodo_doble *e){ anterior=e; }
void p_siguiente(nodo_doble *e){ siguiente = e; }
};
class lista_d
{
nodo_doble *primero;
public:
lista_d(){ primero = NULL; }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~insertar principio
void insertar_p(tipo d){
nodo_doble * nuevo,*aux; aux=primero;
nuevo=new nodo_doble(d);
if(primero==NULL)
primero=nuevo;
else
{ while(aux->m_siguiente() != NULL)
{ aux=aux->m_siguiente(); }
aux->p_siguiente(nuevo);
nuevo->p_anterior(aux);
}//fin else
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~mostrar
void mostrar(){
nodo_doble * aux=primero;
cout<<" Lista: { ";
while(aux!=NULL)
{
cout<<aux->m_dato();cout<<","; aux=aux->m_siguiente();
if(aux==NULL)
cout<<"\b }"<<endl; } //fin while
}//fin mostrar
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~buscar
nodo_doble* buscar(tipo d){
nodo_doble * aux=primero;
while(aux!=NULL)
{
if(d==aux->m_dato())
return aux;
aux=aux->m_siguiente();
}
return NULL;
}//fin buscar
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~insertar entre elemento
void insertar_ee(nodo_doble *aux, tipo d){
nodo_doble *nuevo;
cout<<"Para insertarlo antes del elemento <1>, despues del elemento <2>\n";
int t=0; cin>>t;
nuevo=new nodo_doble(d);
do{
switch(t){
case 1: if(aux == primero)
{ nuevo->p_siguiente(primero);
if(primero!=NULL)
primero->p_anterior(nuevo);
primero=nuevo; }//fin if
else
{ nuevo->p_siguiente(aux);
nuevo->p_anterior(aux->m_anterior());
aux->m_anterior()->p_siguiente(nuevo);
aux->p_anterior(nuevo); }//fin else
break;
case 2: if(aux->m_siguiente() == NULL)
{ aux->p_siguiente(nuevo);
nuevo->p_anterior(aux); }//fin if
else
{ nuevo->p_siguiente(aux->m_siguiente());
nuevo->p_anterior(aux);
aux->m_siguiente()->p_anterior(nuevo);
aux->p_siguiente(nuevo); }//fin else
break;
default: cout<<"La opcion es incorrecta\n";
}//fin switch
}while(t<0 || t>2);//fin do-while
} //fin insertar entre elemento
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~eliminar
void eliminar(tipo d)
{
nodo_doble* aux; bool encon=false;
aux=primero;
while(!encon)
{
if(d==aux->m_dato())
{
encon=true;
}
else
{
aux=aux->m_siguiente();
}
}
if(encon)
{
if(aux==primero)
{ primero=aux->m_siguiente();
if(aux!=NULL)
primero->p_anterior(NULL);
}
else
{
if(aux->m_siguiente()!=NULL)
{ aux->m_anterior()->p_siguiente(aux->m_siguiente());
aux->m_siguiente()->p_anterior(aux->m_anterior());
}
else
{
aux->m_anterior()->p_siguiente(NULL);
}
}
delete aux; cout<<"Elemento eliminado\n";
getch();
}//fin if
}//fin eliminar
};//fin lista_d
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~main
main(){
lista_d uno; int num=0, resp=0; nodo_doble* encon;
while(num != -1) {
system("cls");
cout<<"\n\n 1. Insertar elementos.. \n";
cout<<" 2. Buscar elemento.. \n";
cout<<" 3. Insertar nuevo antes o despues de un elemento.. \n";
cout<<" 4. Eliminar elemento.. \n";
cout<<" 5. Mostrar lista.. \n";
cout<<"\n\n -1 para salir \n";
num=resp=0; cin>>resp;
switch(resp){
case 1:
cout<<"Introduzca los elementos de la lista, -1 para terminar\n";
do{
cin>>num; if(num!= -1) uno.insertar_p(num);
}while(num != -1);
num=0; break;
case 2:
cout<<" Indique elemento a buscar \n";
num=0; cin>>num; encon = uno.buscar(num);
if(encon != NULL)
cout<<"El elemento encontrado \n";
else
cout<<"El elemento no fue encontrado \n"; getch();
break;
case 3:
do{ cout<<" Indique el elemento antes/despues del cual quiere insertar uno nuevo\n";
num=0; cin>>num; encon = uno.buscar(num); resp=0;
if(encon != NULL)
{cout<<" Indique el nuevo elemento a insertar \n";
num=0; cin>>num; uno.insertar_ee(encon, num);;
}else
{ resp= 1; }
}while(resp == 1); getch();
break;
case 4:
cout<<" Indique elemento a eliminar\n";
cin>>num;
encon=uno.buscar(num);
if(encon != NULL)
{
cout<<"El elemento encontrado \n";
uno.eliminar(num);
}
else
{
cout<<"El elemento no fue encontrado \n"; getch();
}
break;
case 5: uno.mostrar(); getch(); break;
default: cout<<"Opcion incorrecta\n";
};//fin switch
}//fin while
}//fin main
0 comentarios:
Publicar un comentario