Escolar Documentos
Profissional Documentos
Cultura Documentos
R: Esta função começa verificando se a lista está vazia ou não inicializada. Em seguida, ela
percorre a lista até encontrar o nó com a matrícula desejada. A função então verifica se o nó
é o primeiro, o último ou um nó do meio para ajustar os ponteiros ant e prox
adequadamente antes de liberar o nó.
2) Faça uma função que insira um novo elemento na lista de forma ordenada, lembrando
que essa inserção pode acontecer para o novo elemento no início, no fim e no meio da lista
dependendo da ordem da mesma. Utilize a função insere_lista_ordenada da lista
encadeada como base para criar essa função.
no->dados = al;
Esta função começa verificando se a lista existe e se a alocação de memória para o novo
elemento foi bem-sucedida. Em seguida, ela verifica se a lista está vazia. Se estiver, o novo
elemento é simplesmente inserido. Se não estiver, a função percorre a lista até encontrar a
posição correta para o novo elemento, atualizando os ponteiros ant e prox conforme
necessário.
3) Faça um função que conte quantos alunos tem uma nota qualquer n1 igual, com o
seguinte protótipo int conta_lista_nota(Lista* li, int n1). A função deve utilizar apenas o
ponteiro li passado como parâmetro, não pode ser criado nenhum outro ponteiro auxiliar. Ao
final além de informar a quantidade alunos com a mesma nota, o ponteiro li deve estar
apontado para a primeira célula “cabeça” da lista.
do {
if (atual->dados.n1 == nota) {
4) Refaça as funções de inserir e remover no início e fim para que a lista comporte-se de
forma circular. No fim, faça uma função que para percorrer a lista inteira utilizando o
comportamento circular da mesma.
if (li == NULL)
return 0;
Elem* no = (Elem*)malloc(sizeof(Elem));
if (no == NULL)
return 0;
no->dados = al;
no->prox = no;
if ((*li) == NULL) {
no->ant = no;
*li = no;
} else {
aux = aux->prox;
aux->prox = no;
no->ant = aux;
(*li)->ant = no;
no->prox = (*li);
}
return 1;
if (li == NULL)
return 0;
Elem* no = (Elem*)malloc(sizeof(Elem));
if (no == NULL)
return 0;
no->dados = al;
no->prox = no;
no->ant = no;
if (*li != NULL) {
if ((*li)->prox == *li) {
(*li)->ant = no;
(*li)->prox = no;
no->ant = *li;
no->prox = *li;
} else {
(*li)->ant = no;
auxF = auxF->prox;
}
auxF->prox = no;
no->prox = (*li);
no->ant = auxF;
*li = no;
return 1;
if (li == NULL)
return;
Elem* no = *li;
do {
printf("-------------------------------\n");
no = no->prox;
if (li == NULL)
return 0;
if ((*li) == NULL)
return 0;
Elem* no = *li;
auxF = auxF->prox;
*li = NULL;
} else {
*li = no->prox;
(*li)->ant = auxF;
auxF->prox = *li;
free(no);
return 1;
if (li == NULL)
return 0;
if ((*li) == NULL)
return 0;
Elem* no = *li;
no = no->prox;
*li = NULL;
else {
no->ant->prox = *li;
(*li)->ant = no->ant;
free(no);
return 1;
int main() {
insere_lista_final_circ(&lista, aluno1);
insere_lista_inicio_circ(&lista, aluno2);
imprime_lista_circ(&lista);
remove_lista_inicio_circ(&lista);
remove_lista_final_circ(&lista);
imprime_lista_circ(&lista);
return 0;
novo->info = elem;
novo->prox = NULL;
novo->ant = no->fim;
Desenfileirar
A função desenfileirar remove um elemento do início da fila:
no->ini = temp->prox;
if(no->ini != NULL) {
no->ini->ant = NULL;
} else {
no->fim = NULL;
}
free(temp);
return 1;
}
Neste código, a função enfileirar insere um novo elemento no final da fila, atualizando o nó
descritor conforme necessário. A função desenfileirar remove um elemento do início da fila
e também atualiza o nó descritor.