Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Denis Mattos

Problema com "Lista Ligada"

Recommended Posts

Ae galera quem souber me deem uma ajuda...

 

O exercício é para fazer uma lista ligada de alunos.

 

tenho que criar:

 

-void cria: que cria uma lista vazia. Isto está ok.

-int vazia: verificando se a lista está vazia.Ok também

-int insere_ord (ALUNO aluno, LISTA *lista): insere um aluno na lista. A inserção deve ser feita por ordem de ID do aluno. ESTE QUE ESTÁ O PROBLEMA...

-int destroi (LISTA *lista): Libera todo espaço alocado para a lista. Este eu fiz, mas não tenho certeza se vai funcionar.

-void imprime(LISTA): Percorre a lista imprimindo os dados de cada aluno. Este está OK.

 

ae vai o que já consegui fazer...

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

 

typedef struct aluno_tag *PONT;

 

typedef struct aluno_tag

{

int id;

int* notas;

PONT proximo;

}ALUNO;

 

typedef struct

{

PONT primeiro;

PONT ultimo;

}LISTA;

 

void cria (LISTA* lista);

int vazia (LISTA lista);

int insere_ord (ALUNO aluno, LISTA* lista);

int destroi (LISTA* lista);

void imprimir (LISTA lista);

 

 

int main()

{

}

 

void cria (LISTA* lista)

{

lista -> primeiro = lista -> ultimo = NULL;

}

 

int vazia (LISTA lista)

{

if (lista.primeiro == NULL)

return 0;

else

return 1;

}

 

int insere_ord (ALUNO aluno, LISTA *lista)

{

LISTA *p;

p = (LISTA*) malloc (sizeof(LISTA));

//*p = lista;

p->proximo = NULL;

if (vazia(*aluno))

{

lista.primeiro = temp;

lista.ultimo = temp;

}

else

{

LISTA *ant = NULL, *atual = lista->primeiro;

while (p.chave > atual.chave)

{

ant = atual;

atual = atual->proximo;

if (atual == NULL) break;

}

if (atual == lista->primeiro) //inserção no inicio

{

p->proximo = lista->primeiro;

lista->primeiro = p;

}

else if (atual == NULL) // inserção no final

{

lista->ultimo->proximo = p;

lista->ultimo = p;

}

else

{

ant->proximo = p;

p->proximo = atual;

}

}

 

}

 

 

int destroi (LISTA* lista)

{

 

// percorre a lista e da FREE em cada celula mas para isso ele "copia" a celula em uma celula temporaria

 

if (lista != NULL)

free(lista);

 

return 0;

}

 

 

void imprimir (LISTA lista)

{

if (vazia(lista)) return;

else

{

int i;

ALUNO* aluno;

aluno = lista.primeiro;

while(aluno != NULL)

{

// imprime a ID

printf("Aluno ID: %d", &aluno->id);

 

// imprime as notas

for (i = 0; i < 4; i++)

printf("Nota %d: %d", i + 1, &aluno->notas);

 

aluno = aluno->proximo;

}

}

}

Da uma ajuda que ja to desesperado...

Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom.

 

Se tiver 1 ou mais na lista...

 

Enquanto o proximo != NULL

{

se o id do aluno que esta sendo inserido < id do aluno na lista

{

o anterior . proximo = aluno adicionado agora;

o aluno adicionado agora .proximo = aluno da lista;

}

}

 

Bom, foi isso que entendi.

 

Abraço amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.