viernes, 13 de enero de 2012

COLA

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>

struct colanodo{
       char miembro;
       struct colanodo *sig;
       };
     
typedef colanodo COLA;
typedef COLA *COLAPTR;

void menu();
int nohaycola(COLAPTR);
void escribelacola(COLAPTR);
void encolar(COLAPTR *, COLAPTR *, char);
char descolar(COLAPTR *, COLAPTR *);




main(){
       COLAPTR principio = NULL;
       COLAPTR final = NULL;
       int opcion;
       char item;
       do{
       menu();
       printf("\n\n\n\tSelecciona una opcion: ");
       scanf("%d", &opcion);
     
     
                          switch(opcion){
                                  case 1:
                                  fflush(stdin);
                                  system("cls");
                                  printf("\n\n\tDame el nombre del miembro: ");
                                  scanf("%c", &item);
                                  encolar(&principio, &final, item);  //enqueue
                                  break;
                                  case 2:
                                       if(principio == NULL && final == NULL){
                                                    system("cls");
                                                    printf("\n\n\n\n\n\n\t\tNo se puede extraer nada, tienes la cola vacia?!");
                                                    getche();
                                                    }
                                       else{
                                            printf("\n\t %c salio de la cola", descolar(&principio, &final));
                                            getche();
                                            }
                                  break;
                                  case 3:
                                  system("cls");    
                                  escribelacola(principio);
                                 
                                  break;
                                  case 4:
                                  system("exit");
                                  break;
                          }
     
               }while(opcion!=4);
       }

char descolar(COLAPTR *adelante, COLAPTR *atras){
     COLAPTR aux;
     char salemiembro;
   
     if(*adelante == *atras){
                  aux = *adelante;
                  salemiembro = aux -> miembro;
                  *adelante = NULL;
                  *atras = NULL;
                  free(aux);
                  }
     else{
          aux = *adelante;
          salemiembro = aux -> miembro;
          (*adelante) = aux -> sig;
          free(aux);
          }
   
     return (salemiembro);
   
     }



void encolar(COLAPTR *adelante, COLAPTR *atras, char valor){
   
     COLAPTR aux = (COLAPTR) malloc(sizeof(COLA));
     aux->sig = NULL;
     aux->miembro = valor;
   
     if (nohaycola(*adelante)){
                               *adelante = aux;
                               *atras = aux;
                               }
     else{
          (*atras) -> sig = aux;
          *atras = aux;
          }
     }



void menu(){
     system("cls");
     printf("\n\n\t\t***OPERACIONES DE LA COLA***");
     printf("\n\t\t1)Insertar un miembro en la cola.");
     printf("\n\t\t2)Sacar un miembro de la cola.");
     printf("\n\t\t3)Imprimir la cola.");
     printf("\n\t\t4)Salir.");
     }

int nohaycola(COLAPTR aux){
    return aux == NULL;
    }

void escribelacola(COLAPTR aux){
   
     if(nohaycola(aux)){
                        printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\tNO HAY COLA!!!!!!");
                        getche();
                        }
     else{
          printf("\n\n\n\t\t***La COLA esta asi***\n\n");
          printf("\nINICIO DE LA COLA -> ");
          while(aux != NULL){
                    printf("%c -> ", aux -> miembro);
                    aux = aux -> sig;
                    }
          printf(" FIN DE LA COLA.");
     getche();
          }
     }








No hay comentarios:

Publicar un comentario