domingo, 31 de mayo de 2015

COLAS EN C++


COLAS EN C++


Es una estructura lineal de datos. Una cola es un  ordenado de elementos homogéneos en el que los nuevos elementos se añaden por un extremo (el final) y se quitan por el otro extremo (el frente). En las colas el elemento que entró primero, sale también primero.






CÓDIGO DE COLAS EN C++

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

struct nodo
{
       int numero;    // en este caso es un numero entero
       
       struct nodo *siguiente;
};

struct cola
{
    nodo *delante;   //punteros que apuntan nodos de atras y adelante
    nodo *atras  ;
};


//Funciones con cola
  void Encolar( struct cola &q, int valor );
  int Desencolar( struct cola &q );
  void Mostrarcola( struct cola q );
  void Vaciacola( struct cola &q);
 
//*****************************

int main()
{
    struct cola q;
   
    q.delante = NULL;
    q.atras   = NULL;
   
    int dato;  // numero a encolar
    int op;    // opcion del menu
    int x ;    // numero que devuelve la funcon pop
    do
    {
 system("cls");
      printf("***MENU***\n\n");
      printf("1. Encolar\n");
      printf("2. Desencolar\n");
      printf("3. Mostrar cola\n");
      printf("4. Vaciar cols\n");
      printf("5. Salir\n\n");
      printf("Digite la opcion: ");
      scanf("%d",&op);

switch(op)
{
case 1:
    do 
            {
    system("cls");
    printf("Digite  Cero (0) para salir\n");
    printf("Digite el dato que desea agregar:");
    scanf("%d",&dato);
                if (dato!=0)
            Encolar(q,dato); //le  enviamos a la cola el dato
            }while (dato!=0);
            system("pause");
break;

       case 2:
            x = Desencolar(q);
            printf("El numero desencolado es %d ",x);
            system("pause");
  break;

case 3:
       printf("Mostrando la cola\n");
            if(q.delante!=NULL) Mostrarcola( q );
            else   printf("Cola vacia ... \n");
            system("pause");
break;

case 4:
             Vaciacola( q );
             printf("la cola ha sido vaciada ...\n");
             system("pause");
break;

case 5:
          printf("Ha salido del programa\n");
break;

default:
   printf("Opcion no valida!\n");
   getch();
   }


} while(op!=5);

    system("pause");
    return 0;
}

/*                        Encolar elemento      
------------------------------------------------------------------------*/

void Encolar( struct cola &q, int valor )
{
     struct nodo *aux = new(struct nodo);
     
     aux->numero = valor;
     aux->siguiente = NULL;
     
     if( q.delante == NULL)
         q.delante = aux;   // encola el primero elemento
     else
         (q.atras)->siguiente = aux;
         
     q.atras = aux;        // puntero que siempre apunta al ultimo elemento
}

/*                        Desencolar elemento      
------------------------------------------------------------------------*/
int Desencolar( struct cola &q )
{
     int num ;
     struct nodo *aux ;
     
     aux = q.delante;      // aux apunta al inicio de la cola
     num = aux->numero;
     q.delante = (q.delante)->siguiente;
     delete(aux);          // libera memoria a donde apuntaba aux
     
     return num;
}

/*                        Mostrar Cola      
------------------------------------------------------------------------*/
void Mostrarcola( struct cola q )
{
     struct nodo *aux;
     
     aux = q.delante;
         
     while( aux != NULL )
     {
            printf(" %d ",aux->numero);
            aux = aux->siguiente;
     }    
}

/*              Eliminar todos los elementos de la Cola      
------------------------------------------------------------------------*/
void Vaciacola( struct cola &q)
{
     struct nodo *aux;
     
     while( q.delante != NULL)
     {
            aux = q.delante;
            q.delante = aux->siguiente;
            delete(aux);
     }
     q.delante = NULL;
     q.atras   = NULL;
     
}

No hay comentarios.:

Publicar un comentario