Listas Dobles..Urgente

Quien me pudiera ayudar con un ejemplo de listas dobles, explicado,, urgente
Tengo Algo De Listas Simples pero la verdad ando perdido,
Gracias

1 Respuesta

Respuesta
1
#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;      }    }
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas