É a primeira vez que estou trabalhando com o C. Eu sei python. To fazendo um código que organize uma lista de numeros usando lista encadeada. O metodo de organização é pelo digito mais significativo( primeiro pelas unidades, depois pelas dezenas...), parecido com o radix. O programa copila sem erro mas ele trava após eu digitar o primeiro valor e apertar enter. Acredito que o programa esteja com bastante erro por ser o meu primeiro. Eu to usando liguagem C e o codeblocks. logica do programa: insiro um numero e aloco ele na lista inicial. Apos todos os numeros requeridos digita-se -1 para o programa começar a rodar. O programa pega os numeros da lista inicial e transfere para a lista do ultimo digito. apos concatena todas as listas de digitos e começa de novo o processo mas dessa vez com o digito das dezenas. assim até acabar os digitos.
#include<stdio.h>
#include<stdlib.h>
typedef struct celula{
int numero;
struct celula *prox;
}celula;
typedef struct lista{
struct celula *ini;
}lista;
void insere (int x,lista c){
celula *p;
p=c.ini;
while(p->prox!=NULL)
p = p-> prox;
celula *nova;
nova = malloc (sizeof (celula));
nova->numero = x;
nova->prox = NULL;
p->prox = nova;
}
void novalista(lista c){
c.ini=malloc(sizeof (celula));
c.ini->prox=NULL;
}
void transfere(lista c, int potencia,lista d,lista e,lista f,lista g,lista h,lista i,lista j,lista k,lista l,lista m){
celula *q;
int cont, res;
q=c.ini->prox;
while(q!=NULL){
cont=q->numero;
res=cont%potencia;
res=res/(potencia/10);
if(res==0)
insere(cont,d);
if(res==1)
insere(cont,e);
if(res==2)
insere(cont,f);
if(res==3)
insere(cont,g);
if(res==4)
insere(cont,h);
if(res==5)
insere(cont,i);
if(res==6)
insere(cont,j);
if(res==7)
insere(cont,k);
if(res==8)
insere(cont,l);
if(res==9)
insere(cont,m);
q=q->prox;
}
}
void apagar(lista c) {
celula *morta;
morta = c.ini->prox;
while (c.ini->prox!=NULL){
if (morta->prox == NULL)
c.ini->prox = NULL;
else
c.ini->prox = morta->prox;
free (morta);
}
}
void concatena(lista c,lista d){
celula *p=c.ini;
while(p->prox!=NULL)
p = p-> prox;
p->prox=d.ini->prox;
}
int algarismos(lista c){
celula *q;
int cont, res, fim = 1, potencia=10;
q=c.ini->prox;
while(fim!=0){
fim=0;
while(q!=NULL){
cont=q->numero;
res=cont/potencia;
if(res!=0)
fim=1;
potencia=potencia*10;
break;
return potencia;
}
}
}
void prin(lista c) {
celula *q;
for (q = c.ini->prox; q != NULL; q = q->prox)
printf ("%d\n", q->numero);
}
int main (){
int fim, a = 0, potencia=10 ;
printf("Digite os numeros que deseja organizar, em seguida digite '-1':\n");
lista inicial,ini0,ini1,ini2,ini3,ini4,ini5,ini6,ini7,ini8,ini9;
novalista(inicial);
novalista(ini0);
novalista(ini1);
novalista(ini2);
novalista(ini3);
novalista(ini4);
novalista(ini5);
novalista(ini6);
novalista(ini7);
novalista(ini8);
novalista(ini9);
while(a!=-1){
scanf("%d", &a);
if (a!=-1)
insere(a,inicial);
}
fim=algarismos(inicial);
while (potencia<fim){
transfere(inicial,potencia,ini0,ini1,ini2,ini3,ini4,ini5,ini6,ini7,ini8,ini9);
apagar(inicial);
concatena(inicial,ini0);
concatena(inicial,ini1);
concatena(inicial,ini2);
concatena(inicial,ini3);
concatena(inicial,ini4);
concatena(inicial,ini5);
concatena(inicial,ini6);
concatena(inicial,ini7);
concatena(inicial,ini8);
concatena(inicial,ini9);
apagar(ini0);
apagar(ini1);
apagar(ini2);
apagar(ini3);
apagar(ini4);
apagar(ini5);
apagar(ini6);
apagar(ini7);
apagar(ini8);
apagar(ini9);
potencia=potencia*10;
}
prin(inicial);
}
Untitled1.txt