Ir para conteúdo

Arquivado

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

YagoMaia

Lista Sequencial Ordernar

Recommended Posts

Boa tarde galera

Estou cursando Ciências da Computação, e estou na matéria de lista sequencial

Estou com dificuldade em um exercício, na parte em que eu preciso ordernar os alunos pelas matrículas e retira-los também pelas matrículas.

Quando eu insiro, se o meu primeiro aluno não tiver a maior matrícula, acaba que um aluno recebe um lixo de memória.

E na hora de retirar pela matrícula, não acontece, parece que está retirando apenas pela posição no vetor.

Aqui o cód simplificado(apenas as funções que estou apanhando e o main na hora que eu chamo as funções)

 

void Ordena(struct ListaSequencial *P, struct Aluno Inf)
{
int aux=0;
int i=0;
if (ListaVazia(P))
{
P->VetorAluno[P->Cabeca]=Inf;
P->Cabeca++;
}
else
{
while (Inf.Matricula > P->VetorAluno.Matricula)
{
i++;
}
aux=P->Cabeca;
for (; aux >= i; aux--)
{
P->VetorAluno[aux+1]=P->VetorAluno[aux];
}
P->VetorAluno=Inf;
P->Cabeca++;
}
}
int Retira (struct ListaSequencial *P, float Mat)
{
int i=0;
if (ListaVazia(P) || P->VetorAluno[P->Cabeca-1].Matricula <= Mat)
{
printf("Lista vazia, insira um aluno primeiro.");
return 0;
}
else
{
while (P->VetorAluno.Matricula != Mat)
{
i++;
}
for (i; i < P->Cabeca-1; i++)
{
P->VetorAluno=P->VetorAluno[i+1];
}
P->Cabeca--;
return 1;
}
}
Main()
{
case 1: //Insere Aluno
if (!ListaCheia(&DA))
{
system("cls");
printf("Digite o nome do aluno: ");
fflush(stdin);
gets(Dados.Nome);
printf("Digite a matricula de %s: ",Dados.Nome);
scanf("%f",&Dados.Matricula);
Ordena(&DA,Dados);
printf("\n\nPressione qualquer tecla para voltar ao menu: ");
fflush(stdin);
getchar();
system("cls");
}
else
{
system("cls");
printf("\n\nLista cheia!");
printf("\n\nPressione qualquer tecla para voltar ao menu: ");
fflush(stdin);
getchar();
system("cls");
}
break;
case 2: //Remove aluno pela matricula
system("cls");
if (!ListaVazia(&DA))
{
Matricula=0;
ImprimeLista(&DA);
printf("\n\nQual aluno gostaria de remover da lista?");
printf("\nMatricula: ");
scanf("%f",&Matricula);
int resultado = Retira(&DA,Matricula);
if(resultado == 1){
//system("cls");
printf("\n\nAluno removido");
}
else
{
printf("\n\nErro!");
}
}
}

 

Galera, boa noite, obrigado!

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.