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;
}
}