#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
/*estabelecendo estrutura para receber um caractere*/
struct lista
{
char caractere;
struct lista *prox;
};
typedef struct lista list;
/*função para inserir uma nova estrutura na lista*/
list *insere(list *L,char c)
{
list*novo=(list*) malloc(sizeof(list));
novo-> caractere = c;
novo-> prox = L;
return novo;
}
/*função para fazer a ordenação de caracteres utilizando um vetor*/
list *ordenar(list *L)
{
list *p;
int cont_dig, cont_caract;
int i=0,j=0;
for(list *p= L; p!=NULL; p= p->prox)
{
if(isdigit(p->caractere))
cont_dig++;
else
cont_caract++;
}
char *vetor=(char*) malloc(cont_dig*sizeof(char)); /*Alocando espaço na memoria para o vetor de digitos*/
char *vetor2=(char*) malloc(cont_caract*sizeof(char)); /*Alocando espaço na memoria para vetor de caracteres*/
for(list *p= L; p!=NULL;p= p->prox)
{
if(isdigit(p->caractere))
{
vetor[i]= p->caractere;
i++;
}
else
{
vetor2[j]= p->caractere;
j++;
}
}
vetor[i] = '';
vetor2[j] = '';
list *organizado;
organizado = NULL;
for(i=j-1;i>=0;i--)
{
organizado=insere(organizado,vetor[i]);
}
for(i=0;i<j;i++)
{
organizado=insere(organizado,vetor2[j]);
}
return organizado;
}
/*função para imprimir*/
void imprime(list *L)
{
list *p = L;
while(p!= NULL)
{
printf("%c",p->caractere);
p= p->prox;
}
}
main()
{
char caractere_user;
int i,numero_caract;
list*L;
L=NULL;
printf("Digite o numero de caracteres que voce deseja ordenar\n");
scanf("%d", &numero_caract);
for(i=0;i<=numero_caract;i++)
{
printf("Digite um caractere\n");
scanf("%c", &caractere_user);
fflush(stdin);
L=insere(L , caractere_user);
fflush(stdin);
}
L= ordenar(L);
imprime(L);
system("pause");
} Vlw! Agora já da pra entrar os caracteres, porém mais a frente o mesmo erro persiste, da a mensagem ''o programa parou de funcionar''..