#include <stdio.h>
#include <stdlib.h>
// Estrutura do nó
typedef struct No {
int id;
struct No* prox;
} No;
// Estrutura da fila
typedef struct {
No* inicio;
No* fim;
} Fila;
// Inicializa fila
void inicializarFila(Fila* f) {
f->inicio = NULL;
f->fim = NULL;
}
// Verifica se fila está vazia
int filaVazia(Fila* f) {
return f->inicio == NULL;
}
// Enfileira elemento no final
void enfileirar(Fila* f, int id) {
No
* novo
= (No
*) malloc(sizeof(No
)); novo->id = id;
novo->prox = NULL;
if (filaVazia(f))
f->inicio = novo;
else
f->fim->prox = novo;
f->fim = novo;
}
// Desenfileira elemento do início
int desenfileirar(Fila* f) {
if (filaVazia(f)) return -1;
No* temp = f->inicio;
int valor = temp->id;
f->inicio = temp->prox;
if (f->inicio == NULL)
f->fim = NULL;
return valor;
}
// Função recursiva para remover um elemento específico da fila
No* removerRecursivo(No* atual, int id) {
if (atual == NULL) return NULL; // Caso base
if (atual->id == id) {
No* prox = atual->prox;
return prox; // Retorna o próximo nó para religar a lista
}
atual->prox = removerRecursivo(atual->prox, id);
return atual;
}
// Função para remover um elemento específico (usando recursão)
void removerElemento(Fila* f, int id) {
f->inicio = removerRecursivo(f->inicio, id);
// Atualiza o ponteiro 'fim'
if (f->inicio == NULL)
f->fim = NULL;
else {
No* aux = f->inicio;
while (aux->prox != NULL)
aux = aux->prox;
f->fim = aux;
}
}
// Exibe os elementos restantes da fila
void imprimirFila(Fila* f) {
No* aux = f->inicio;
while (aux != NULL) {
if (aux
->prox
!= NULL
) printf(" "); aux = aux->prox;
}
}
int main() {
Fila fila;
inicializarFila(&fila);
int N, M, id;
for (int i = 0; i < N; i++) {
enfileirar(&fila, id);
}
int sair;
for (int i = 0; i < M; i++) {
removerElemento(&fila, sair);
}
imprimirFila(&fila);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vIEVzdHJ1dHVyYSBkbyBuw7MKdHlwZWRlZiBzdHJ1Y3QgTm8gewogICAgaW50IGlkOwogICAgc3RydWN0IE5vKiBwcm94Owp9IE5vOwoKLy8gRXN0cnV0dXJhIGRhIGZpbGEKdHlwZWRlZiBzdHJ1Y3QgewogICAgTm8qIGluaWNpbzsKICAgIE5vKiBmaW07Cn0gRmlsYTsKCi8vIEluaWNpYWxpemEgZmlsYQp2b2lkIGluaWNpYWxpemFyRmlsYShGaWxhKiBmKSB7CiAgICBmLT5pbmljaW8gPSBOVUxMOwogICAgZi0+ZmltID0gTlVMTDsKfQoKLy8gVmVyaWZpY2Egc2UgZmlsYSBlc3TDoSB2YXppYQppbnQgZmlsYVZhemlhKEZpbGEqIGYpIHsKICAgIHJldHVybiBmLT5pbmljaW8gPT0gTlVMTDsKfQoKLy8gRW5maWxlaXJhIGVsZW1lbnRvIG5vIGZpbmFsCnZvaWQgZW5maWxlaXJhcihGaWxhKiBmLCBpbnQgaWQpIHsKICAgIE5vKiBub3ZvID0gKE5vKikgbWFsbG9jKHNpemVvZihObykpOwogICAgbm92by0+aWQgPSBpZDsKICAgIG5vdm8tPnByb3ggPSBOVUxMOwoKICAgIGlmIChmaWxhVmF6aWEoZikpCiAgICAgICAgZi0+aW5pY2lvID0gbm92bzsKICAgIGVsc2UKICAgICAgICBmLT5maW0tPnByb3ggPSBub3ZvOwoKICAgIGYtPmZpbSA9IG5vdm87Cn0KCi8vIERlc2VuZmlsZWlyYSBlbGVtZW50byBkbyBpbsOtY2lvCmludCBkZXNlbmZpbGVpcmFyKEZpbGEqIGYpIHsKICAgIGlmIChmaWxhVmF6aWEoZikpIHJldHVybiAtMTsKCiAgICBObyogdGVtcCA9IGYtPmluaWNpbzsKICAgIGludCB2YWxvciA9IHRlbXAtPmlkOwogICAgZi0+aW5pY2lvID0gdGVtcC0+cHJveDsKCiAgICBpZiAoZi0+aW5pY2lvID09IE5VTEwpCiAgICAgICAgZi0+ZmltID0gTlVMTDsKCiAgICBmcmVlKHRlbXApOwogICAgcmV0dXJuIHZhbG9yOwp9CgovLyBGdW7Dp8OjbyByZWN1cnNpdmEgcGFyYSByZW1vdmVyIHVtIGVsZW1lbnRvIGVzcGVjw61maWNvIGRhIGZpbGEKTm8qIHJlbW92ZXJSZWN1cnNpdm8oTm8qIGF0dWFsLCBpbnQgaWQpIHsKICAgIGlmIChhdHVhbCA9PSBOVUxMKSByZXR1cm4gTlVMTDsgIC8vIENhc28gYmFzZQoKICAgIGlmIChhdHVhbC0+aWQgPT0gaWQpIHsKICAgICAgICBObyogcHJveCA9IGF0dWFsLT5wcm94OwogICAgICAgIGZyZWUoYXR1YWwpOwogICAgICAgIHJldHVybiBwcm94OyAgLy8gUmV0b3JuYSBvIHByw7N4aW1vIG7DsyBwYXJhIHJlbGlnYXIgYSBsaXN0YQogICAgfQoKICAgIGF0dWFsLT5wcm94ID0gcmVtb3ZlclJlY3Vyc2l2byhhdHVhbC0+cHJveCwgaWQpOwogICAgcmV0dXJuIGF0dWFsOwp9CgovLyBGdW7Dp8OjbyBwYXJhIHJlbW92ZXIgdW0gZWxlbWVudG8gZXNwZWPDrWZpY28gKHVzYW5kbyByZWN1cnPDo28pCnZvaWQgcmVtb3ZlckVsZW1lbnRvKEZpbGEqIGYsIGludCBpZCkgewogICAgZi0+aW5pY2lvID0gcmVtb3ZlclJlY3Vyc2l2byhmLT5pbmljaW8sIGlkKTsKCiAgICAvLyBBdHVhbGl6YSBvIHBvbnRlaXJvICdmaW0nCiAgICBpZiAoZi0+aW5pY2lvID09IE5VTEwpCiAgICAgICAgZi0+ZmltID0gTlVMTDsKICAgIGVsc2UgewogICAgICAgIE5vKiBhdXggPSBmLT5pbmljaW87CiAgICAgICAgd2hpbGUgKGF1eC0+cHJveCAhPSBOVUxMKQogICAgICAgICAgICBhdXggPSBhdXgtPnByb3g7CiAgICAgICAgZi0+ZmltID0gYXV4OwogICAgfQp9CgovLyBFeGliZSBvcyBlbGVtZW50b3MgcmVzdGFudGVzIGRhIGZpbGEKdm9pZCBpbXByaW1pckZpbGEoRmlsYSogZikgewogICAgTm8qIGF1eCA9IGYtPmluaWNpbzsKICAgIHdoaWxlIChhdXggIT0gTlVMTCkgewogICAgICAgIHByaW50ZigiJWQiLCBhdXgtPmlkKTsKICAgICAgICBpZiAoYXV4LT5wcm94ICE9IE5VTEwpIHByaW50ZigiICIpOwogICAgICAgIGF1eCA9IGF1eC0+cHJveDsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKfQoKaW50IG1haW4oKSB7CiAgICBGaWxhIGZpbGE7CiAgICBpbmljaWFsaXphckZpbGEoJmZpbGEpOwoKICAgIGludCBOLCBNLCBpZDsKICAgIHNjYW5mKCIlZCIsICZOKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIHNjYW5mKCIlZCIsICZpZCk7CiAgICAgICAgZW5maWxlaXJhcigmZmlsYSwgaWQpOwogICAgfQoKICAgIHNjYW5mKCIlZCIsICZNKTsKICAgIGludCBzYWlyOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNOyBpKyspIHsKICAgICAgICBzY2FuZigiJWQiLCAmc2Fpcik7CiAgICAgICAgcmVtb3ZlckVsZW1lbnRvKCZmaWxhLCBzYWlyKTsKICAgIH0KCiAgICBpbXByaW1pckZpbGEoJmZpbGEpOwogICAgcmV0dXJuIDA7Cn0=