#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>
struct nodo
{
int dato;
nodo *sig;
nodo *ant;
} ;
void crear(nodo **, int);
void imprimir(nodo*);
void buscar(nodo *,int);
void borrar(nodo **, int);
//void moverse(nodo *lista, int n);
void main()
{
int n,x,num1,x1;
nodo *lista=NULL;
cout<<"****lista***\n";
crear(&lista,10);
crear(&lista,5);
crear(&lista,2);
crear(&lista,3);
crear(&lista,8);
imprimir(lista);
cout<<"\n***buscar***\n";
buscar(lista,10);
buscar(lista,15);
cout<<"\n***borrar****";
//borrar(&lista,3);
//borrar(&lista,10);
borrar(&lista,5);
imprimir(lista);
}
void crear(nodo **lista, int n)
{
nodo *nuevo, *cab, *aux;
nuevo=new nodo;
nuevo->sig=NULL;
nuevo->ant=NULL;
nuevo->dato=n;
cab=*lista;
if (cab==NULL)
*lista=nuevo;
else
{
if (nuevo->dato<cab->dato)
{
nuevo->sig=cab;
cab->ant=nuevo;
*lista=nuevo;
}
else
{
while((cab->sig->dato<nuevo->dato)&&cab->sig)
cab=cab->sig;
nuevo->sig=cab->sig;
cab->sig=nuevo;
nuevo->ant=cab;
nuevo->sig->ant=nuevo;
}
}
}
void imprimir(nodo* lista)
{
nodo *cab=lista;
if(!lista)
{
cout<<"/nLista vacia";
cab=lista;
}
while(cab)
{
cout<<"\n"<<cab->dato;
cab=cab->sig;
}
}
void buscar(nodo * lista, int v)
{
nodo *cab=lista;
while(cab && cab->dato!=v)
cab=cab->sig;
if (cab->dato==v)
cout<<"\nexiste:"<<cab->dato;
else
cout<<"\nno existe"<<v;
}
void borrar(nodo **lista, int v)
{
nodo *cab=*lista,*fin,*auxi;
while(cab->sig)
cab=cab->sig;
fin=cab;
cab=*lista;
getch();
if (cab->dato==v)
{
auxi=cab;
cab=cab->sig;
free(auxi);
*lista=cab;
}
if (fin->dato==v)
{
auxi=fin;
fin=fin->ant;
fin->sig=NULL;
free(auxi);
}
else
while(cab||fin)
{
if (cab->sig->dato==v||fin->sig->dato==v)
{
auxi=cab->sig;
cab->sig=auxi->sig;
auxi->sig->ant=cab;
}
else
{
cab=cab->sig;
fin=fin->ant;
}
}
}
#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<iostream.h>
struct nodo{ int dato; nodo *sig; nodo *ant;} ;
void crear(nodo **, int);void imprimir(nodo*);void buscar(nodo *,int);void borrar(nodo **, int);//void moverse(nodo *lista, int n);
void main(){ int n,x,num1,x1; nodo *lista=NULL; cout<<"****lista***\n"; crear(&lista,10); crear(&lista,5); crear(&lista,2); crear(&lista,3); crear(&lista,8);
imprimir(lista); cout<<"\n***buscar***\n"; buscar(lista,10); buscar(lista,15); cout<<"\n***borrar****"; //borrar(&lista,3); //borrar(&lista,10); borrar(&lista,5); imprimir(lista);}
void crear(nodo **lista, int n){
nodo *nuevo, *cab, *aux; nuevo=new nodo; nuevo->sig=NULL; nuevo->ant=NULL; nuevo->dato=n; cab=*lista; if (cab==NULL) *lista=nuevo; else { if (nuevo->dato<cab->dato){ nuevo->sig=cab; cab->ant=nuevo; *lista=nuevo;} else{ while((cab->sig->dato<nuevo->dato)&&cab->sig) cab=cab->sig; nuevo->sig=cab->sig; cab->sig=nuevo; nuevo->ant=cab; nuevo->sig->ant=nuevo; } }}
void imprimir(nodo* lista){ nodo *cab=lista; if(!lista) { cout<<"/nLista vacia"; cab=lista; } while(cab) { cout<<"\n"<<cab->dato; cab=cab->sig; }}
void buscar(nodo * lista, int v){ nodo *cab=lista; while(cab && cab->dato!=v) cab=cab->sig; if (cab->dato==v) cout<<"\nexiste:"<<cab->dato; else cout<<"\nno existe"<<v;
}void borrar(nodo **lista, int v){
nodo *cab=*lista,*fin,*auxi; while(cab->sig) cab=cab->sig; fin=cab; cab=*lista; getch(); if (cab->dato==v) { auxi=cab; cab=cab->sig; free(auxi); *lista=cab; } if (fin->dato==v) { auxi=fin; fin=fin->ant; fin->sig=NULL; free(auxi); } else while(cab||fin) { if (cab->sig->dato==v||fin->sig->dato==v) {auxi=cab->sig;cab->sig=auxi->sig; auxi->sig->ant=cab; } else { cab=cab->sig; fin=fin->ant; } }
}