Listas Dobles

Busca y elimina en una lista doble

Mediante el uso de Listas dobles, creamos un menú que permita insertar, buscar y eliminar elementos de una lista y luego mostrar los elementos insertados.

El menú contará con 6 opciones, la cual contará con los siguientes atributos.

El programa debe permitir insertar elementos al inicio, insertar elementos al final, buscar elementos, eliminar la lista y poder salir del programa. Para ingresar a estas opciones, el programa debe pedir que el usuario ingrese el número de opción que desea conocer.

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
struct nodo{
            int nro;
            struct nodo *sgte;
            struct nodo *ant;
            };
typedef struct nodo *Tlista;
void insertar(Tlista&, int);
void insertarfinal(Tlista&,int);
bool buscar(Tlista&,int,int&);
void eliminarlista(Tlista&);
void imprimir(Tlista);
void main()
{Tlista lista=NULL;
 int valor, opc,pos;
 bool R;
 do
 {
 cout<<"1. Insertar al Inicio"<<endl;
 cout<<"2. Insertar al Final"<<endl;
 cout<<"3. Busqueda"<<endl;
 cout<<"4. Eliminar Lista"<<endl;
 cout<<"5. Ver Lista"<<endl;
 cout<<"6. Salir"<<endl;
 cout<<"Ingrese Opcion:";
 cin>>opc;
 char opc0='s';
 switch(opc)
 {
 case 1: while(opc0=='s' || opc0=='S')
         {
         cout<<"Ingrese valor al inicio:";
         cin>>valor;
         insertar(lista, valor);
         cout<<endl;
         cout<<"Seguir ingresando [s/n]: ";cin>>opc0;
         }
         break;
 case 2: while(opc0=='s' || opc0=='S')
         {cout<<"Ingrese valor al final:";
         cin>>valor;
         insertarfinal(lista,valor);
         cout<<endl;
         cout<<"Seguir ingresando [s/n]: ";cin>>opc0;
         }
         break;
 case 3: cout<<"***Buscar un Valor de la lista***"<<endl;
         cout<<"Ingrese valor a buscar:";
         cin>>valor;
         imprimir(lista);
         R= buscar(lista,valor,pos);
         if(R==true)
         {cout<<"El valor buscado es:"<<valor;
          cout<<"Posicion:"<<pos;
          getch();
          }
          else
          {cout<<"Valor buscado es:"<<valor;
          cout<<"Posicon: Ninguna";
          }
         break;
 case 4: cout<<"***Elementos***";
         eliminarlista(lista);
         getch();
         break;
 case 5: cout<<"Listado"<<endl;
         imprimir(lista);
         getch();
         break;
 }
 clrscr();
 }while(opc!=6);
 }
 void insertar(Tlista &lista, int valor)
 {Tlista nuevo, actual;
  nuevo=new(struct nodo);
  nuevo->nro=valor;
  actual=lista;
  if(lista==NULL)
  {
   lista=nuevo;
   lista->ant=NULL;
   lista->sgte=NULL;
   }
   else
   {
    nuevo->sgte=lista;
    nuevo->ant=lista->ant;
    lista->ant=nuevo;
    lista=nuevo;
    }
  }
  void insertarfinal(Tlista &lista, int valor)
  {Tlista nuevo, actual;
   nuevo=new(struct nodo);
   nuevo->nro=valor;
   actual=lista;
   if(lista==NULL)
   {
    lista=nuevo;
    lista->ant=NULL;
    lista->sgte=NULL;
    }
    else
    {
     while(actual->sgte!=NULL)
     {
     actual=actual->sgte;
     }
     nuevo->sgte=actual->sgte;
     actual->sgte=nuevo;
     nuevo->ant=actual;
     }
   }
   void eliminarlista(Tlista &lista)
   {
   lista=NULL;
   }

  bool buscar(Tlista &lista, int valor, int&pos)
  { Tlista aux=lista;
    pos=0;
    while(aux!=NULL)
    {
     if(aux->nro==valor)
     {
     return true;
    }
    aux=aux->sgte;
    pos++;
    }
    return false;
  }
  void imprimir(Tlista lista)
  {Tlista aux = lista;
   int i = 0;
   while (lista != NULL)
   {
cout<<"N["<<i<<"] = {"<<lista->nro<<"}, ";
      lista = lista->sgte;
      i++;
   }
   if(i==0)
   {
cout<<"nLa lista no tiene datos ... Press Enter";
   }
}

  Continuando con Listas Dobles, les comparto el siguiente post: Insertar, intercalar, unir y sumar listas dobles