Prazo de entrega recomendado:
Você deverá realizar operações em uma fila, implementada como lista ligada.
Um grupo de sociológos está investigando a fila de entrada na boate mais badalada da cidade. O objetivo é demonstrar que a fila de entrada de espaços prestigiados no Brasil não funciona exatamente como esperaríamos: nem sempre quem chega primeiro, entra primeiro.
Nessa boate em particular, cada pessoa na fila é identificada pelo número de seu documento. A primeira pessoa a chegar recebe uma lanterna para facilitar que outras pessoas vejam a fila nas noites mais escuras. Assim, para entrar na fila, você deve procurar a pessoa que está segurado a lanterna, entrar atrás dela e tomar a lanterna para você. Se três pessoas chegarem em sequência, a fila deveria ficar como a na figura abaixo.

Até então não há nada diferente de qualquer outra fila, mas os sociólogos descobriram três fenômenos muito recorrentes, como se fossem regrinhas não escritas.
-
Se quem estiver entrando na fila for filho de algum político, ex-BBB, youtuber de finanças, coach ou herdeiro de um fortuna, ela toma a lanterna para si, mas ao invés entrar atrás de quem entregou a lanterna, entra no início da fila. Ninguém reclama. Veja na figura abaixo o que acontece com a fila quando o herdeiro 3 chega, seguidos de seus amigos 4 e 5, esses pessoas comuns.
-
Um dos benefícios do contrato de trabalho na boate é que funcionários não pagam pela entrada. O que os sociólogos descobriram, no entanto, é que quando um funcionário entra na fila, ele deve se dirigir ao final, independentemente de onde está a lanterna. Na figura seguinte, quando o funcionário 5 recebe a lanterna da pessoa 4, ela vai direto pro final da fila.
-
Em tempos de pandemia, para entrar na boate todos deveriam estar vacinados, mas nem sempre isso é respeitado. O que acontece de fato é que, quando um fiscal entra na fila, quem ficar logo atrás do fiscal e não estiver vacinado sai da fila para não ser multado. Na figura abaixo, o fiscal 8 acabou de entrar na fila e as pessoas 1, 2 e 4 não estão vacinadas. Assim, a pessoa 1 fica logo atrás do fiscal e sai. Em seguida, a pessoa 2 fica logo atrás do fiscal e também sai. Depois disso, a pessoa 3 fica logo atrás do fiscal, mas não faz nada porque está vacinada. A pessoa 4 não está vacinada, mas como está longe do fiscal, ela não se preocupa. Se alguém não vacinado chegar na fila atrás de um fiscal, ele nem entra na fila e a lanterna continua com o fiscal.
Sua tarefa é colaborar com o estudo e implementar um programa
boate.c
que simula a fila dessa boate.
Entrada
Cada linha da entrada corresponde a uma pessoa que está entrando na fila, na ordem de chegada. Uma linha tem três campos: número do documento (inteiro), nome da profissão (string sem espaços com no máximo 25 caracteres) e o estado de vacinação da pessoa (vacinado ou nao-vacinado).
As profissões que entram no começo da fila são identificadas pelas
strings coach
, ex-bbb
, filho-politico
, herdeiro
,
youtuber-financas
e um funcionário é identificado pela string
funcionario
.
Dica: para ler as linhas até o final do arquivo, utilize o fato de
que scanf
devolve um número constante EOF
representando o final de
arquivo (end of file), como no exemplo seguinte:
while (scanf(...) != EOF) { ... }
Exemplo de entrada
97615 funcionario vacinado
97666 funcionario nao-vacinado
13704 funcionario vacinado
55033 youtuber-financas nao-vacinado
58366 funcionario vacinado
45619 herdeiro nao-vacinado
52213 funcionario nao-vacinado
75608 youtuber-financas vacinado
36149 herdeiro nao-vacinado
45161 ex-bbb nao-vacinado
88657 coach nao-vacinado
82684 youtuber-financas nao-vacinado
27754 funcionario nao-vacinado
13700 funcionario nao-vacinado
61881 youtuber-financas vacinado
93203 funcionario vacinado
86628 coach vacinado
70393 funcionario nao-vacinado
57012 funcionario vacinado
35228 funcionario vacinado
Saída
A saída deve conter a configuração final da fila de acordo com as regras explicadas.
Exemplo de saída
86628 coach vacinado
61881 youtuber-financas vacinado
82684 youtuber-financas nao-vacinado
88657 coach nao-vacinado
45161 ex-bbb nao-vacinado
36149 herdeiro nao-vacinado
75608 youtuber-financas vacinado
45619 herdeiro nao-vacinado
55033 youtuber-financas nao-vacinado
97615 funcionario vacinado
97666 funcionario nao-vacinado
13704 funcionario vacinado
58366 funcionario vacinado
52213 funcionario nao-vacinado
27754 funcionario nao-vacinado
13700 funcionario nao-vacinado
93203 funcionario vacinado
70393 funcionario nao-vacinado
57012 funcionario vacinado
35228 funcionario vacinado
Critérios
É obrigatório utilizar listas ligadas nessa tarefa. Se desejar, separe sua
implementação de fila utilizando arquivos fila.h
e fila.c
, neste caso
atualize seu Makefile. Para passar na tarefa é necessário implementar pelo
menos a primeira regra identificada pelos sociólogos. Lembre-se de liberar toda
a memória alocada dinamicamente, utilize o valgrind para garantir que nada
ficou alocado.
Correção
Esta tarefa será corrigida automaticamente sempre que você realizar um
git push
. Depois de terminada a tarefa, deve-se utilizar o botão na
interface de notas para solicitar a correção de um monitor.
Turma AB: O peso desta tarefa será 3.