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