domingo







INTRODUCCIÓN


DEFINICIÓN


Enlaces de Interes:

CARACTERÍSTICAS


TIPOS DE LISTAS


Enlaces para revisar

http://www.youtube.com/watch?v=KDU2Jjuc56k
http://www.youtube.com/watch?v=QWkY2YByeIY
http://www.youtube.com/watch?v=6C8_tKeGp6I
http://es.scribd.com/doc/38237649/Tipos-de-Datos-Abstractos-LISTAS

UN CASO PRACTICO APLICANDO LISTAS CIRCULARES DOBLEMENTE ENLAZADAS


SOLUCIÓN


#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#define n 20
typedef struct tiponodo{
   int x;
   struct tiponodo *adelante;
   struct tiponodo *atras;
}nodo;
/*Declaracion de los sinonimos para referirnos al tipo de dato*/
typedef nodo *tlista;
typedef nodo *tposicion;
/*Declaraci¢n de las funciones que utilizaremos*/
void insertarprim (tlista cabeza, int entrada),chao(),espera();
tlista crearnodo();
nodo *ptr;

int entrada,cont=0,cont2=0;
char cadena[n],cadena1[n],ma[13];
void hola(),lanzari(),lanzarl(),inicio(),quitar_caracter(),forward(),backward();
int op=0,modo,cs;
tposicion cabeza;
tlista crear_cabeza(),L;
nodo *eliminar_lista(nodo *cabeza);

main(){


   clrscr();
   modo=-1;

   do{

      hola();
      textattr(49);
      gotoxy(10,3); cout<<"JUEGO: ** DEMOS LA VUELTA AL RELOJ Versi¢n 2.0 ( Apuntadores ) **\n\n";
      gotoxy(10,5); cout<<"Modo Activo: "<<ma;
      gotoxy(10,7); cout<<"N§ Juegos Efectuados: "<<cont;
      gotoxy(10,9);  cout<<"1. Activar Modo: ==> Interactivo ¢ Por Lote\n\n";
      gotoxy(10,11); cout<<"2. Jugar: =========> Lanzamientos de la Moneda\n\n";
      gotoxy(10,13); cout<<"3. Salida al Sistema Operativo\n\n";
      gotoxy(10,17); cout<<"Ingrese su Opcion: ";
      cin>>op;
      switch(op){
             case 1:
                          clrscr();

                          do{
                            gotoxy(10,3); cout<<"Ingrese Modo [ 0=Interactivo  1=Lote ]==> ";
                            cin>>modo;
                          }while( modo<0 || modo>1 );
                          if (modo==0){
                             inicio();
                             gotoxy(10,5);cout<<"Modo Seleccionado: Interactivo";
                            strcpy(ma,"Interactivo");
                          }
                          if (modo==1){
                             inicio();
                             gotoxy(10,5);cout<<"Modo Seleccionado: Por Lote";
                             strcpy(ma,"Por Lote");
                          }
                          clrscr();
                          break;
             case 2:
                   clrscr();
                   if (modo<0){
                          gotoxy(10,5);
                          cout<<"DEBE INGRESAR EL MODO\n\n";
                          getch();
                   }

                   if (modo==0) lanzari();
                   if (modo==1) lanzarl();
                   clrscr();
                  break;
             case 3: chao();op=4;
      }
   }while ( op !=4 );
   return 0;
}

tlista crearnodo(){
/*creamos un nuevo nodo, el cual sera la "cabeza" de la lista*/
  // tlista L;
   L=(tlista)malloc(sizeof(nodo));
   L->adelante=L->atras=L;
return L;
}


/*definici¢n de las funciones*/
void insertarprim(tposicion cabeza, int entrada)
{
   tposicion nuevo;
/*creamos un nuevo nodo y le asignamos la direccion de memoria*/
   nuevo=(tposicion)malloc(sizeof(nodo));
   if(nuevo==NULL) printf("ERROR\n");
   nuevo->x=entrada;
/*la parte de adelante del nuevo nodo, apunta al primer nodo*/
   nuevo->adelante=cabeza;
   nuevo->atras=cabeza->atras;
   cabeza->atras->adelante=nuevo;
   cabeza->atras=nuevo;

}


void inicio(){
   cont=0;
   cont2=0;
   cabeza=crearnodo();
   insertarprim(cabeza,1);
   insertarprim(cabeza,2);
   insertarprim(cabeza,3);
   insertarprim(cabeza,4);
   insertarprim(cabeza,5);
   insertarprim(cabeza,6);
   insertarprim(cabeza,7);
   insertarprim(cabeza,8);
   insertarprim(cabeza,9);
   insertarprim(cabeza,10);
   insertarprim(cabeza,11);
   insertarprim(cabeza,12);
   cabeza->x=12;
}


void lanzari(){
   clrscr();
   cont=cont+1;
   gotoxy(20,3); cout<<"N§ Juegos Efectuados : "<<cont;
   gotoxy(20,5);cout<<"Hora Actual del Usuario: "<<cabeza->x;
   cs=random(2);
   switch(cs){
      case 0:gotoxy(20,7);cout<<" Lanzamiento = CARA  "; forward(); break;//cara
      case 1:gotoxy(20,7);cout<<" Lanzamiento = SELLO ";backward(); break; //sello
   }
   gotoxy(20,9);cout<<"Nueva Hora del Usuario: "<<cabeza->x;
   getch();

}

void espera(float temp)
{
time_t t1;
t1=clock();
while((float)(clock()-t1)<temp);
}
void hola(){
int fil=22,col,i;
   //clrscr();
   textattr(62);
   for(col=0;col<40;col++){
      gotoxy(col,fil);cputs("                              ");
      gotoxy(col-1,fil); cputs(" ");
      espera(0.1);

   }

}

void forward(){
   int k=0;

   while(k<cont){
            cabeza=cabeza->adelante;
            if (cabeza==L) cabeza=cabeza->adelante;
            if (cabeza->x>9){
               gotoxy(20,9);cout<<"Hora del Usuario: "<<cabeza->x;
               espera(3.5);
            }
            if (cabeza->x<10){
               gotoxy(20,9);cout<<"Hora del Usuario: "<<"  "<<cabeza->x;
               espera(3.5);
            }
            k=k+1;
   }
}
void backward(){
   int k=0;
   while(k<cont){
            cabeza=cabeza->atras;
            if (cabeza==L) cabeza=cabeza->atras;
            if (cabeza->x>9){
            gotoxy(20,9);cout<<"Hora del Usuario: "<<cabeza->x;
            espera(3.5);
            }
            if (cabeza->x<10){
            gotoxy(20,9);cout<<"Hora del Usuario: "<<"  "<<cabeza->x;
            espera(3.5);
            }
            k=k+1;
   }
}

void lanzarl(){
   int i,k;
   char x;
   clrscr();
   cont2=cont2+1;
   gotoxy(20,3); cout<<"N§ Juegos Efectuados : "<<cont2;
   gotoxy(5,5);cout<<"Hora Actual del Usuario: "<<cabeza->x;
   gotoxy(5,7); cout<<"Lanzamientos [ C=CARA S=SELLO  <Intro=Finalizar> ]: ";
   gets(cadena);
   cont=0;
   quitar_caracter();
   k=cont;
   int pasos=0;
   for(i=0;i<k;i++){
      x=toupper(cadena1[i]);
      pasos=pasos+1;
      cont=pasos;
      switch(x){
             case 'C': forward();break;
             case 'S': backward();break;
      }

   }
   gotoxy(20,9);cout<<"Nueva Hora del Usuario: "<<cabeza->x;
   getch();

}


void quitar_caracter(){
   int i,j;

   for(i=0,j=0;i<n;i++){

      if (cadena[i] != ' '){
             if(toupper(cadena[i])=='S'){
               cadena1[j]=cadena[i];
               j++;
               cont=cont+1;
             }
             if(toupper(cadena[i])=='C'){
               cadena1[j]=cadena[i];
               j++;
               cont=cont+1;
             }
      }
   }

}

nodo *eliminar_lista(nodo *cabeza)
   {
   nodo *temp,*siguiente;
   if(cabeza!=NULL)//hay elementos en la lista?
      {

      temp=cabeza;
      do{
             siguiente=temp->adelante;
             free(temp);
             temp=siguiente;
      }while(temp!=NULL);
      }
   return(NULL);
   }

void chao(){
   int fil,col,i;
    for(fil=17;fil>2;){
      for(col=79;col>0;col--){
             textattr(65);
             gotoxy(col,fil);cputs("Hasta la Vista Baby... Bye... ");
             gotoxy(col+30,fil);cputs("                           ");
             espera(0.01);

      }
      fil=fil-1;

   }

}