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