Insert priority calls into a queue using nested struct

Asked

Viewed 287 times

0

Talk people!!! All beauty?

I made another code that is showing the result and I can also de-rank and insert the values removed from this main row into a secondary structure according to the priority. Oops, I went a little bit. hehehe.

But while trying to show this secondary structure is shown memory junk.

Calling the secondary function, Prioritity1_queue(&P1, value1, value2); in the main() priopria, I can print the secondary structure.

Follow the code of this new implementation.

    /****** arquivo.h ************/

    #define TAM 5
    typedef struct fila {
        int id[TAM];
        int priori[TAM];
        int nChamadas;
    }Fila;

    typedef struct prioridade1{
        int id1[TAM];
        int priori1[TAM];
        int nPriori1;
        struct prioridade1 * Fila;
    }Prioridade1;



    //***************************************

    int fila_vazia (Fila * );

    int fila_cheia (Fila * );

    void fila_inicializar (Fila * );

    void enfileirar (Fila * f, int , int );

    void desenfileirar (Fila * f );

    void fila_mostrar (Fila * f);

    //****************************************

    int Prioridade1_vazia (Prioridade1 * );

    int Prioridade1_cheia (Prioridade1 * );

    void Prioridade1_inicializar (Prioridade1 * );

    void Prioridade1_enfileirar (Prioridade1 * , int , int );

    void Prioridade1_mostrar (Prioridade1 * );

    /**** Prioridade 2 ***********/

    /**** Prioridade 3 ***********/

    /****** arquivo.c ************/

    #include <stdio.h>
    #include <stdlib.h>
    #include "filaPriori.h"


    int fila_vazia (Fila * f){
        return f->nChamadas <= 0;
    }

    int fila_cheia (Fila * f){
        return f->nChamadas >= TAM;
    }

    void fila_inicializar (Fila * f){
        f->nChamadas = 0;
    }

    void enfileirar (Fila * f, int id, int pr){
        if (!fila_cheia(f)){
            f->id[(f->nChamadas)] = id;
            f->priori[(f->nChamadas)++] = pr;
        }
    }

    void desenfileirar (Fila * f){
        Prioridade1 p1;
        int i;
        int aux1 = f->id[0];
        int aux2 = f->priori[0];
        switch(aux2){
            case 1:
                Prioridade1_enfileirar( &p1, aux1, aux2 );
            break;
        }
        //int i;
        for (i = 1; i < f->nChamadas; i++){
            f->id[i - 1] = f->id[i];
            f->priori[i - 1] = f->priori[i];
        }
        f->nChamadas = f->nChamadas - 1;
    }

    void fila_mostrar (Fila * f){
        int i;
        printf ("*************** Mostrar Fila ************\n");
        for (i = 0; i < f->nChamadas; i++){
            printf ("qtde: %d\t", i+1);
            printf ("id:%d\t", f->id[i]);
            printf ("priori: %d\n\n", f->priori[i]);
        }
    }

    //**************Prioridade1*******************

    int Prioridade1_vazia (Prioridade1 * p1){
        return p1->nPriori1 <= 0;
    }

    int Prioridade1_cheia (Prioridade1 * p1){
        return p1->nPriori1 >= TAM;
    }

    void Prioridade1_inicializar (Prioridade1 * p1){
        p1->nPriori1 = 0;
    }

    void Prioridade1_enfileirar (Prioridade1 * p1, int id1, int pr1){
        p1->id1[p1->nPriori1] = id1;
        p1->priori1[p1->nPriori1] = pr1;
    }

    void Prioridade1_mostrar (Prioridade1 * p1){
        int i;
        printf ("/*************Prioridade 1 *****************/\n");
        printf ("p1->nPriori1: %d\n", p1->nPriori1);
        for (i = 0; i < 5; i++){
            printf ("id1: %d\n", p1->id1[i]);
            printf ("priori1: %d\n\n", p1->priori1[i]);
        }
    }


    /****** main.c ************/

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "filaPriori.h"


    int main (){

        Fila f;
        Prioridade1 p1;
        fila_inicializar(&f);
        Prioridade1_inicializar(&p1);

        int i, chamada, prioridade, tmp;

        srand( (unsigned)time(NULL) );

        for(i = 0; i < TAM; i++)
        {
            tmp = rand () % 20;
            chamada  = rand () % 20 + tmp;
            prioridade  = rand () % 3 + 1;
            tmp = prioridade;
            enfileirar(&f, chamada, prioridade);
        }

        fila_mostrar(&f);
        desenfileirar(&f);
        fila_mostrar(&f);
        //Prioridade1_enfileirar(&p1, 13, 1);
        Prioridade1_mostrar(&p1);

        return 0;
    }
  • Fabio, post the code on the page, if by chance one day this link no longer work any answer below would be in vain.

  • Good evening!!! I made the changes as requested. Thank you

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.