Olá gente, quando eu insiro um elemento, aparentemente da tudo certo. Porém quando eu insiro mais de um elemento, a função impressao_listaFREQ não imprime o resto dos elementos. Alguem poderia me ajudar?
<#include <stdio.h>
#include <stdlib.h>
typedef int elem;
typedef struct no {
struct no *prox;
struct no *ant;
int info;
} No_LFREQ;
typedef struct {
No_LFREQ *ini;
No_LFREQ *fim;
} ListaFREQ;
void cria_listaFREQ(ListaFREQ *l);
void destroi_listaFREQ(ListaFREQ *l);
int esta_vazia_listaFREQ(ListaFREQ l);
void insere_listaFREQ(ListaFREQ *l, elem x);
int esta_na_listaFREQ(ListaFREQ *l, elem x);
void impressao_listaFREQ(ListaFREQ l);
int remover_listaFREQ(ListaFREQ *l, elem x);
int main() {
ListaFREQ l;
cria_listaFREQ(&l);
insere_listaFREQ(&l, 22);
insere_listaFREQ(&l, 10);
insere_listaFREQ(&l, 8);
insere_listaFREQ(&l, 33);
impressao_listaFREQ(l);
return 0;
}
void cria_listaFREQ(ListaFREQ *l) {
l->ini = NULL;
l->fim = NULL;
}
void destroi_listaFREQ(ListaFREQ *l) {
No_LFREQ *p;
while (l->ini != l->fim) {
p = l->ini;
l->ini = l->ini->prox;
free(p);
}
l->fim = NULL;
}
int esta_vazia_listaFREQ(ListaFREQ l) {
return !l.ini ? 1 : 0;
}
void insere_listaFREQ(ListaFREQ *l, elem x) {
No_LFREQ *p = malloc(sizeof(No_LFREQ));
p->info = x;
p->prox = p->ant = p;
if (l->ini == NULL)
l->ini = l->fim = p;
else {
p->prox = l->ini;
p->ant = l->ini->ant;
l->ini->ant = p;
}
}
int esta_na_listaFREQ(ListaFREQ *l, elem x) {
No_LFREQ *aux_inicio = l->ini;
No_LFREQ *aux = l->ini;
No_LFREQ *aux2;
do {
if (l->ini->info == x) {
if (aux_inicio->info != x) {
aux2->info = aux->info;
aux->info = aux->prox->info;
aux->prox->info = aux2->info;
}
return 1;
}
aux = aux->prox;
} while (l->ini != aux_inicio);
return 0;
}
void impressao_listaFREQ(ListaFREQ l) {
No_LFREQ *aux = l.ini;
if(aux == NULL)
return;
printf("%d ", aux->info);
aux = aux->prox;
while (aux != l.ini) {
printf("%d ", aux->info);
aux = aux->prox;
}
printf("\n");
}
int remover_listaFREQ(ListaFREQ *l, elem x) {
No_LFREQ *p;
No_LFREQ *aux;
aux = l->ini;
p = l->ini;
if (l->ini->info == x)
return 0;
while (p != aux) {
if (p->info == x) {
p->prox = p->ant;
p->ant = p->prox;
free(p);
return 0;
}
p = p->prox;
}
return 1;
}>