listasdobles

LISTAS DOBLES
  1.  #include<stdio.h>
    #include<conio.h>
    #include<iostream.h>
    #include<stdlib.h>
    #include<graphics.h>
    char *Titulos[]={ " Insertar Datos",
              " Mostrar Lista",
              " Mostrar Lista Inversa",
              " Penultimo Elemento",
              " Mostrar Doble",
              " Invertir Lista",
              " Mayor Elemento",
              " Intercambiar Nodos",
              " Intercalar Disminuyendo",
              " Intercalar Duplicando",
              " Intercalar Incrementando",
              " Vaciar(Lista)",
              " Salir "};

    struct nodo_lista
        {
          int dato;
          nodo_lista *sgte;
          nodo_lista *ant;
        };

    typedef nodo_lista *nodo;

    nodo Ejecuta_aux(int,nodo);
    nodo ReservarMemoria();
    nodo CrearNodo(int);
    nodo InsertarInicio(nodo, int);
    nodo InsertarPosicion(nodo, int,int);
    nodo InsertarFinal(nodo, int);
    nodo Insertar(nodo);
    int Longitud(nodo);
    void Mostrar(nodo);
    void MostrarDoble(nodo Lista);
    void MostrarFinal(nodo);
    void Penultimo(nodo);
    void ElementoMayor(nodo);
    nodo IntercambiarNodo(nodo,int);
    nodo Invertir(nodo);
    nodo Intercalar_Disminuye(nodo);
    nodo Intercalar_Duplica(nodo);
    nodo Intercalar_Incrementa(nodo);
    nodo Vaciar(nodo);
    void cmarco(int,int,int,int);
    void cmarco_aux(int,int,int,int);
    nodo lista=NULL;
    mainaux();


    void cmarco(int x1,int x2,int y1,int y2)
    {
        int CONT1,CONT2;
        for (CONT1=x1; CONT1<x2; CONT1++)
        {
            gotoxy(CONT1,y1); cout<<"Í";
            gotoxy(CONT1,y2); cout<<"Í";
        }
        for (CONT2=y1; CONT2<y2; CONT2++)
        {
            gotoxy(x1,CONT2); cout<<"º";
            gotoxy(x2,CONT2); cout<<"º";
        }
        gotoxy(x1,y1); cout<<"É";
        gotoxy(x2,y1); cout<<"»";
        gotoxy(x1,y2); cout<<"È";
        gotoxy(x2,y2); cout<<"¼";
    }
    void cmarco_aux(int x1,int x2,int y1,int y2)
    {
        int CONT1,CONT2;
        for (CONT1=x1; CONT1<x2; CONT1++)
        {
            gotoxy(CONT1,y1); cout<<"Ä";
            gotoxy(CONT1,y2); cout<<"Ä";
        }
        for (CONT2=y1; CONT2<y2; CONT2++)
        {
            gotoxy(x1,CONT2); cout<<"³";
            gotoxy(x2,CONT2); cout<<"³";
        }
        gotoxy(x1,y1); cout<<"Ú";
        gotoxy(x2,y1); cout<<"¿";
        gotoxy(x1,y2); cout<<"À";
        gotoxy(x2,y2); cout<<"Ù";
    }





    void Resalta(int Y)
    {
      textcolor(RED);
      textbackground(7);
      gotoxy(3,3+Y); cprintf("%s",Titulos[Y-1]);
      textcolor(BLUE);
      textbackground(BLACK);
    }
    void Ejecuta(int Opc)
    {
      int elem;
      switch(Opc)
      {

        case 1:lista=Insertar(lista);getch();break;
        case 2:Mostrar(lista);getch();break;
        case 3:MostrarFinal(lista);getch();break;
        case 4:Penultimo(lista);getch();break;
        case 5:MostrarDoble(lista);getch();break;
        case 6:lista=Invertir(lista);getch();break;
        case 7:ElementoMayor(lista);getch();break;
        case 8:gotoxy(32,2);printf("Ingrese numero para Intercambiar :_");
               scanf("%d",&elem);
              lista=IntercambiarNodo(lista,elem);break;
    //--------------Examen------------------
           case 9:lista=Intercalar_Disminuye(lista);break;
           case 10:lista=Intercalar_Duplica(lista);break;
           case 11:lista=Intercalar_Incrementa(lista);break;
           case 12:lista=Vaciar(lista);break;
           case 13:lista=Vaciar(lista); free(lista);
            cmarco(44,63,9,11);
            gotoxy(51,13);printf("F I N");
           
              getch();
              exit(0);
              break;
        }
    // getch();
    }

    main(){
    mainaux();
    return 0;
    }

    int mainaux()
    {
      char Opc;
      int Y=1;
      textmode(C80);
      do
       {
         textcolor(WHITE);
         textbackground(1);
         clrscr();
         cmarco(2,29,1,25);
         cmarco(30,79,1,25);
         gotoxy(10,2); cprintf("LISTAS DOBLES");
         for(int f=0; f<13; f++)
         {
           gotoxy(3,4+f);  cout <<Titulos[f];
         }

         Resalta(Y);
         Opc=getch();
         switch(Opc)  //claves: 72=>flecha arriba 80=>flecha abajo 13=>Enter.
          {
        case 72: if(Y==1) Y=13; else Y--; break;
        case 80: if(Y==13) Y=1; else Y++; break;
        case 13: Ejecuta(Y);
          }
       }while(1);
    }

    nodo ReservarMemoria()
    {
     nodo nuevo;
     nuevo=(nodo)malloc (sizeof(struct nodo_lista));
     return (nuevo);
    }

    nodo CrearNodo(int elem)
    {
     nodo nuevo;
     nuevo=ReservarMemoria();
     nuevo->dato=elem;
     nuevo->sgte=NULL;
     nuevo->ant=NULL;
    return nuevo;
    }

    nodo InsertarInicio(nodo Lista, int elem)
    {
     nodo nuevo;
     nuevo=CrearNodo(elem);
     if(Lista==NULL)
       Lista=nuevo;
     else
     { nuevo->sgte=Lista;
      Lista->ant=nuevo;
      Lista=nuevo;
     }
    return Lista;
    }

    nodo InsertarPosicion(nodo Lista, int elem,int pos)
    { int i=2;
     nodo nuevo,aux;
     nuevo=CrearNodo(elem);
     if(pos==1)
       Lista=InsertarInicio(Lista,elem);
     else if(pos==Longitud(Lista)+1)
       Lista=InsertarFinal(Lista,elem);
     else
      { aux=Lista;
       while(i!=pos)
        { aux=aux->sgte;
         i++;
        }
       aux->sgte->ant=nuevo;
       nuevo->sgte=aux->sgte;
       aux->sgte=nuevo;
       nuevo->ant=aux;
      }
    return Lista;
    }

    nodo InsertarFinal(nodo Lista, int elem)
    {  nodo nuevo,aux;
     nuevo=CrearNodo(elem);
     if(Lista==NULL)
         Lista=nuevo;
      else
       { aux=Lista;
        while(aux->sgte!=NULL)
           aux=aux->sgte;
        aux->sgte=nuevo;
        nuevo->ant=aux;
       }
     return Lista;
    }
    nodo Insertar(nodo Lista)
    { int opcion,elem,pos;
      textbackground(2);
     do
      { clrscr();
      printf ("\n         --------- Como quieres Insertar los datos ---------\n\
                                      \n\
          ÉÍ[þ]ÍÍÍÍÍÍÍÍ»     ÉÍ[þ]ÍÍÍÍÍÍÍÍÍÍ»      ÉÍ[þ]ÍÍÍÍÍÍÍÍ» \n\
          º [1] Inicio º     º [2] Posicion º      º [3] Final  º \n\
          ÈÍÍÍÍÍÍÍÍÍÍÍͼ     ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ      ÈÍÍÍÍÍÍÍÍÍÍÍͼ \n\n");

      printf ("\n  --:  Teclea tu opcion:_");
      scanf ("%d", &    opcion);
      } while(opcion>3 || opcion<=0);

      printf ("  --:  Dame el elemento a insertar:_");
      scanf("%d", &elem);

      if(opcion==1){
         Lista=InsertarInicio(Lista,elem);
         gotoxy(15,13);printf("! Ya se Insert¢ ­");}
      if(opcion==2)
        { printf("\n  --:  Ingrese la Posicion para Insertar :_");
         scanf("%d",&pos);
         if(pos>=1 && pos<=Longitud(Lista)+1){
        Lista=InsertarPosicion(Lista,elem,pos);
        gotoxy(15,15);printf("! Ya se Insert¢ ­");}
         else
        printf("\n  ....  Posicion fuera de Rango  ....");
         }
      if(opcion==3){
         Lista=InsertarFinal(Lista, elem);
         gotoxy(15,13);printf("! Ya se Insert¢ ­");}
    return Lista;
    }




    int Longitud(nodo Lista)
    { int i;
     if(Lista==NULL)
       return 0;
     else
      { i=1;
       while(Lista->sgte!=NULL)
        { i++;
         Lista=Lista->sgte;
        }
         return i;
      }
    }
    void Mostrar(nodo Lista)
    { int i=0,j=0;
     if(Lista==NULL){
       gotoxy(32,2);printf ("La lista esta vacia"); }
     else
       {
        while(Lista!=NULL)
          {  if(Longitud(Lista)>=9 && Longitud(Lista)%9==0)
           {i=0; j=j+3;}
        i=i+5;
           cmarco_aux(26+i,28+i,2+j,4+j);
           gotoxy(27+i,3+j);
           printf("%d", Lista->dato);
           gotoxy(29+i,3+j);printf("Ä ");
           Lista=Lista->sgte;
          }
       }
     }


    void MostrarFinal(nodo Lista)
    { int i=0;
     nodo aux;
     if(Lista==NULL){
      gotoxy(32,2); printf ("La lista esta vacia");}
     else
       { aux=Lista;
        while(aux->sgte!= NULL)
          aux=aux->sgte;
        while(aux!= NULL)
          {  i=i+5;
           cmarco_aux(26+i,28+i,2,4);
           gotoxy(27+i,3);
           printf("%d", aux->dato);
           gotoxy(29+i,3);printf("Ä ");
           aux=aux->ant;
          }
        }
    }

    void MostrarDoble(nodo Lista)
    { int i=0;
      nodo aux;
     if(Lista==NULL){
       gotoxy(32,2);printf ("La lista esta vacia"); }
     else
       { aux=Lista;
        while(aux->sgte!=NULL)
         {  i=i+5;
           cmarco_aux(26+i,28+i,2,4);
           gotoxy(27+i,3);
           printf("%d",aux->dato);
           gotoxy(29+i,3);printf("Ä ");
         aux=aux->sgte;
         }
        while(aux!=NULL)
         {   i=i+5;
           cmarco_aux(26+i,28+i,2,4);
           gotoxy(27+i,3);
           printf("%d",aux->dato);
           gotoxy(29+i,3);printf("Ä ");
         aux=aux->ant;
         }
       }
    }

    void Penultimo(nodo Lista)
    {  nodo aux;
     if(Lista==NULL){
       gotoxy(32,2); printf ("La lista esta vacia");}
     else
      { aux=Lista;
       while(aux->sgte!= NULL)
         aux=aux->sgte;
       aux=aux->ant;
      gotoxy(32,2); printf("El penultimo Elemento es :_%d", aux->dato);
      }
    }

    nodo Invertir(nodo Lista)
    { int x;
     nodo aux=Lista,nuevo=NULL;
     if(Lista==NULL){
       gotoxy(32,2); printf("Lista Vacia");}
     else
      {
       while(aux!=NULL)
         { x=aux->dato;
          nuevo=InsertarInicio(nuevo,x);
          aux=aux->sgte;
         }
       }
    return nuevo;
    }

    void ElementoMayor(nodo Lista)
    { int mayor;
      nodo aux;
      if(Lista==NULL){
        gotoxy(32,2); printf("No hay Mayor");}
      else
       { mayor=Lista->dato;
         aux=Lista;
        while(aux!=NULL)
         {
          if(aux->dato>mayor)
        { mayor=aux->dato;
         aux=aux->sgte;
        }
          else
         aux=aux->sgte;
         }
       gotoxy(32,2); printf("El mayor Elemento es :_%d",mayor);
       }
    }


    nodo IntercambiarNodo(nodo Lista,int num)
       {
        int temp;
        nodo aux;
        if(Lista==NULL){
         gotoxy(32,2);printf("Lista vacia");}
        else
         { aux=Lista;
         while(aux!=NULL)
           {
        if(aux->dato==num)
         {
         temp=aux->dato;
         aux->dato=aux->ant->dato;
         aux->ant->dato=temp;
         aux=NULL;
         }
        else
         aux=aux->sgte;
           }
         }
    return Lista;
    }
    nodo Vaciar(nodo Lista)
    { nodo aux;
     aux=Lista;
     while(aux!=NULL)
      { Lista=Lista->sgte;
        free(aux);
        aux=Lista;
      }
    return aux;
    }
    //----------------Examen-----------------------------------

    nodo Intercalar_Disminuye(nodo Lista)
    { int i,pos=1;
     nodo aux;
     aux=Lista;
     while(aux!=NULL)
       { i=aux->dato-1;
        Lista=InsertarPosicion(Lista,i,pos);
        aux=aux->sgte;
        pos=pos+2;
       }
     return Lista;
    }
    nodo Intercalar_Duplica(nodo Lista)
    { int i,pos=1;
     nodo aux;
     aux=Lista;
     while(aux!=NULL)
       { i=aux->dato;
        Lista=InsertarPosicion(Lista,i,pos);
        aux=aux->sgte;
        pos=pos+2;
       }
     return Lista;
    }
    nodo Intercalar_Incrementa(nodo Lista)
    { int i,pos=2;
     nodo aux;
     aux=Lista;
     while(aux!=NULL)
       { i=aux->dato+1;
        Lista=InsertarPosicion(Lista,i,pos);
        aux=aux->sgte->sgte;
        pos=pos+2;
       }
     return Lista;
    }

No hay comentarios:

Publicar un comentario