Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- //FILA DUPLAMENTE ENCADEADA NO ESTILO LISTA ~DIMAS~DARK~
- typedef struct no
- {
- int valor;
- struct no *proximo;
- } No;
- typedef struct lista
- {
- No* inicio;
- No* fim;
- } Impressora;
- Impressora* inicializa()
- {
- Impressora* l = new Impressora();
- l ->inicio = l->fim = NULL;
- return l;
- }
- int isVazia(Impressora* l)
- {
- return (l->inicio == NULL);
- }
- //Insere no fim
- No* insereFim(No* n, int v)
- {
- No* novo = new No();
- novo ->valor = v;
- novo ->proximo = NULL;
- if (n != NULL)
- n->proximo = novo;
- return novo;
- }
- //Retira do inicio
- No* retiraIni(No* n)
- {
- No* p = n->proximo;
- delete(n);
- return p;
- }
- //Função para inserir
- void inserirDocumento(Impressora* l, int v)
- {
- l->fim = insereFim(l->fim, v);
- if (l->inicio == NULL)
- l->inicio = l->fim;
- }
- int imprima(Impressora* l) //Remove do inicio e retorna o valor que removeu
- {
- int v;
- v = l->inicio->valor;
- l->inicio = retiraIni(l->inicio);
- if (l->inicio == NULL)
- l->fim = NULL;
- return v;
- }
- void valorDocumentos(Impressora* l)
- {
- No* p;
- for (p = l->inicio; p != NULL; p = p->proximo)
- {
- if (p->proximo == NULL)
- printf("%d", p->valor);
- else
- printf("%d ", p->valor);
- }
- }
- void exclui(Impressora* l)
- {
- No* p = l->inicio;
- while (p != NULL)
- {
- No* aux = p->proximo; /* guarda referência para o próximo elemento
- */
- delete(p); /* libera a memória apontada por p */
- p = aux; /* faz p apontar para o próximo */
- }
- }
- int main()
- {
- // freopen("L1Q3.in", "r", stdin);
- // freopen("L1Q3.out", "w", stdout);
- int casos;
- int i;
- int T;
- int cmd_linha;
- int cmd;
- char prioridade;
- int numComandos;
- char linha[30];
- freopen("L1Q3.in", "r", stdin);
- freopen("L1Q3.out", "w", stdout);
- scanf("%d", &casos); //SCANEIA O NUMERO DE CASOS
- int k = 1;
- while (casos > 0) //PRA PODER IMPRIMIR O CASO A PARTIR DE 1
- {
- Impressora* prioridadeA;
- Impressora* prioridadeB;
- Impressora* prioridadeC;
- prioridadeA = inicializa();
- prioridadeB = inicializa();
- prioridadeC = inicializa();
- scanf("%d", &numComandos); //NÚMERO DE COMANDOS, ELE LÊ CERTO NUMERO DE COMANDOS A CADA CASO
- getchar();
- printf("Caso %d:\n", k); //IMPRIME O NÚMERO DO CASO
- while (numComandos > 0) //FAZ O NÚMERO DE COMANDOS
- {
- //SE A LINHA FOR 1 T 'C' ADICIONA OS DOCUMENTOS 1 ATÉ T NA FILA 'C' = A, B OU C
- fgets(linha, 30, stdin);
- cmd_linha = sscanf(linha, "%d %d %c", &cmd, &T, &prioridade);
- if (cmd_linha == 3)
- {
- if (prioridade == 'A')
- {
- for (i = 1; i < T+1; i++)
- {
- inserirDocumento(prioridadeA, i);
- }
- }
- else if (prioridade == 'B')
- {
- for (i = 1; i < T+1; i++)
- {
- inserirDocumento(prioridadeB, i);
- }
- }
- else
- {
- for (i = 1; i < T+1; i++)
- {
- inserirDocumento(prioridadeC, i);
- }
- }
- }
- else //SE FOR 2 IMPRIME OS DOCUMENTOS QUE ESTÃO EM A (ELES SAEM DA FILA)
- {
- if (isVazia(prioridadeA) != 1) //SE 'A' NAO FOR VAZIA IMPRIME 'A' E PASSA OS ELEMENTOS DE B PARA 'A' E OS DE 'C' PARA 'B'
- {
- while (isVazia(prioridadeA) != 1)
- {
- if (prioridadeA->inicio->proximo != NULL)
- printf("%d ", imprima(prioridadeA));
- else
- printf("%d\n", imprima(prioridadeA));
- }
- while (isVazia(prioridadeB) != 1)
- {
- inserirDocumento(prioridadeA, imprima(prioridadeB));
- }
- while (isVazia(prioridadeC) != 1)
- {
- inserirDocumento(prioridadeB, imprima(prioridadeC));
- }
- }
- else //SE A FOR VAZIA, IMPRIME OS DE B, E JOGA OS DOCUMENTOS DE C PARA B
- {
- if (isVazia(prioridadeB) != 1) //B NAO É VAZIO
- {
- while (isVazia(prioridadeB) != 1)
- {
- if (prioridadeB->inicio->proximo != NULL)
- printf("%d ", imprima(prioridadeB));
- else
- printf("%d\n", imprima(prioridadeB));
- }
- while (isVazia(prioridadeC) != 1)
- {
- inserirDocumento(prioridadeB, imprima(prioridadeC));
- }
- }
- else //CASO B FOR VAZIA, IMPRIMA C
- {
- while (isVazia(prioridadeC) != 1)
- {
- if (prioridadeC->inicio->proximo != NULL)
- printf("%d ", imprima(prioridadeC));
- else
- printf("%d\n", imprima(prioridadeC));
- }
- }
- }
- }
- numComandos--;
- }
- casos--;
- k++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement