Cola Prioritaria - Listas Enlazadas C++


Programa efectuado con estructura de datos tipo lista enlazada simples, este programa simula la atencion de personas segun su orden de llegada pero se atienden segun la prioridad de su nivel(mientras su nivel sea mas alto este se atendera primero).

# include < conio.h >
#include < iostream.h >
#include < stdio.h >
#include < stdlib.h >
class nodo
{
     public:
         nodo *sig;
         char inf[10];
         int nivel;
    public:
         nodo *inserta_f(nodo *p);
         nodo *elimina_i(nodo *p);
         void recorre(nodo *p);

};
void main()
{
char op;
nodo *p=NULL;
    do
    {
        clrscr();
        gotoxy(25,10);cout<<"SISTEMA DE ATENCION - COLAS PRIORITARIAS";
        gotoxy(25,11);cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ";
        gotoxy(28,13);cout<<"1.- INGRESAR USUARIOS";
        gotoxy(28,15);cout<<"2.- Reporte de atencion";
        gotoxy(38,20);cout<<"presione 'ESC' para salir";
        op=getch();
        switch(op)
        {
            case '1':p=p->inserta_f(p);
                    break;
            case '2':p->recorre(p);
                    break;
        }
    }while(op!=27);
}

nodo *nodo::inserta_f(nodo *p)
{
nodo *q,*r,*ref;
char op;
int n, cen;
    do
    {
        clrscr();
        q=new(nodo);
        cout<<"ingrese dato: ";
        cin>>q->inf;
        n=random(11);
        if(n==0)
        {
             q->nivel=1;
        }
        else
        {
            q->nivel=n;
        }
        cen=0;
        if(p!=NULL)
        {
            ref=p;
            cen=0;
            while(ref->nivel>=q->nivel &&(cen==0))
            {
                if(ref->sig!=NULL)
                {
                    r=ref;
                    ref=ref->sig;
                }
                else
                cen=1;
           }
           if(cen!=0)
           {
               ref->sig=q;
               q->sig=NULL;
           }
           else
           {
               q->sig=ref;
               if(p==ref)
               p=q;
               else
               r->sig=q;
           }
        }
        else
        {
            q->sig=NULL;
            p=q;
        }
        cout<<"mas datos (S/N)?: ";
        cin>>op;
    }while(op=='s' || op=='S');
return(p);
}

void nodo::recorre(nodo *p)
{
     clrscr();
     if(p!=NULL)
     {
         nodo *q=p;
         while(q!=NULL)
         {
                cout<< q->inf <<"------ "<< q->nivel<< endl;
                q=q->sig;
         }
          getch();
     }
     else
     {
         clrscr();
         gotoxy(30,10);cout<<"LA COLA ESTA VACIA";
         getch();
     }
}

0 comentarios:

Publicar un comentario en la entrada