Ir para conteúdo
Fórum Script Brasil
  • 0

ERRO NA ORDENAÇÃO DA LISTA LIGADA


Bruno Rafael

Pergunta

Programa está inserindo normalmente, mais não está ordenando e nem mostrando os itens ordenados. 

 

obs1: Usando bubblesort

obs2: ordenando primeiro por nome e depois por idade

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct lista
{
	int qtd;
	struct Aluno * inicio;
}lista;

typedef struct Aluno
{
	char nome[30];
	int idade;
	struct Aluno * prox;
}Aluno;

lista * aloca_lista();
Aluno * aloca_aluno();
int inserir(lista *l, char * nome, int idade);
void  mostrar(lista *l);

int main()
{
	char aux[30];
	int i,aux2,aux3,aux4,tam=3,pass,trocou;
	Aluno * aluno[3];
	lista * l1;
	l1 = aloca_lista();
	aux4 = l1->inicio;
	
	int idade;
	char nome[30];
	
	for(i=0; i<3; i++)
	{
		printf("\nDigite o nome do aluno[%d]: ",i+1);
		fflush(stdin);
		gets(nome);
		printf("\nDigite o numero: ");
		fflush(stdin);
		scanf("%d",&idade);
		inserir(l1,nome,idade);
	}
	
	trocou = 1;
	
	for(pass=0; pass<tam-1 && trocou==1; pass++)
	{
		trocou = 0;
		
		for(i=0; i<tam-pass-1; i++)
		{
			if(strcmp(aluno[i]->nome,aluno[i+1]->nome) == 0)
			{
				if(aluno[i]->idade > aluno[i+1]->idade)
				{
					aux2 = aluno[i]->idade;
					aluno[i]->idade = aluno[i]->prox->idade;
					aluno[i]->prox->idade = aux2;
				
					strcpy(aux,aluno[i]->nome);
					strcpy(aluno[i]->nome,aluno[i+1]->nome);
					strcpy(aluno[i+1]->nome,aux);
					trocou = 1;
				}
			}
			else if(strcmp(aluno[i]->nome,aluno[i+1]->nome)>0)
			{
				aux3 = aluno[i]->idade;
				aluno[i]->idade = aluno[i+1]->idade;
				aluno[i+1]->idade = aux3;
				
				strcpy(aux,aluno[i]->nome);
				strcpy(aluno[i]->nome,aluno[i+1]->nome);
				strcpy(aluno[i+1]->nome,aux);
				trocou = 1;
			}
		}
	}
	

	printf("\nmostrando:\n\n");
	
	mostrar(l1);
	
	return 0;
}

lista * aloca_lista()
{
	lista * novo;
	novo = (lista*)malloc(sizeof(lista));
	novo->qtd = 0;
	novo->inicio = NULL;
	return novo;	
}

Aluno * aloca_aluno()
{
	Aluno * novo;
	novo = (Aluno*)malloc(sizeof(Aluno));
	novo->idade = 0;
	strcpy(novo->nome," ");
	novo->prox = NULL;
	return novo;
}

int inserir(lista *l,char * nome, int idade)
{
	Aluno * novo, * aux;
	novo = aloca_aluno();
	novo->idade = idade;
	strcpy(novo->nome,nome);
	
	if(l->inicio == NULL)
	{
		l->inicio = novo;
	}
	else
	{
		aux = l->inicio;
		while(aux->prox != NULL)
		{
			aux = aux->prox;
		}
		aux->prox = novo;
	}
	l->qtd++;
	return 1;
}

void mostrar(lista *l)
{
	Aluno * aux;
	aux = l->inicio;
	while (aux != NULL)
	{
		printf("\nNome: %s",aux->nome);
		printf("\nIdade: %d",aux->idade);
		aux = aux->prox;
	}
}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...