Lista: função Inserir nomes em ordem crescente em uma lista
Tenho que inserir elementos na ordem crescente, fiz uma função usando strcmp, fiz só um teste pra testar mas n está dando certo, o programa para de responder. Alguém me ajuda? #include <stdio.h>#include <stdlib.h>typedef struct{ char nome. char sobrenome[50]. char data_nasc[15]. char id[15]. char ---o[20]. int idade. }TipoItem. typedef struct celula{ TipoItem item. struct celula prox. }Celula. typedef struct{ Celula prim. Celula ult. }Lista. void FLVazia(Lista lista){ lista->prim=(Celula)malloc(sizeof(Celula)). lista->prim->prox=NULL. lista->ult=lista->prim. }int Vazia(Lista lista){ if(lista.prim==lista.ult) return 0. else return 1. }void Insere(Lista lista, TipoItem x){//tipoitem x é valor pois não precisa altera-lo lista->ult->prox=(Celula)malloc(sizeof(Celula)). //aloca memoria para o prox do ultimo lista->ult->prox->item=x. //acessa o campoitem e coloca x dentro dele lista->ult=lista->ult->prox. //o ultimo avança para a primeira lista->ult->prox=NULL. //aterra}void Imprime(Lista lista){ Celula aux. aux = (Celula)malloc(sizeof(Celula)). aux = lista.prim->prox. while(aux!=NULL){ printf("Nome: %s ", aux->item.nome). printf("Sobrenome: %s ", aux->item.sobrenome). printf("Idade: %d",aux->item.idade). printf("Identidade: %s",aux->item.id). printf("Data de nascimento: %s ", aux->item.data_nasc). printf("---o: %s ", aux->item.---o). aux = aux->prox. }}//Celula Pesquisa(TipoItem x, Lista lista)//{// if(!Vazia(lista)){// Celula aux =lista.prim. // while(aux->prox!= NULL){// if(aux->prox->item.cod==x.cod){// return aux. // }// aux=aux->prox. // }// printf("Posicao nao existente!")// }else// printf("Posicao nao existente!")//}void Retira(Celula p, Lista lista, TipoItem x){ if(p==NULL || p->prox==NULL || Vazia(lista)){ printf("\nNão [e possivel retirar!"). return. } Celula aux. aux=p->prox. p->prox=aux->prox. x=aux->item. free(aux). if(p->prox==NULL){ lista->ult=p. }}void ordenaNome(Lista lista, TipoItem x){ Celula aux. Celula aux2. aux2 = (Celula*)malloc(sizeof(Celula)). aux2->item.nome = x.nome. //aux2 é a celula que vai armazenar o nome digitado aux = lista->prim->prox.. //aux vai apontar pro prox da cabeça //se o nome digitado for maior que o que está no prox da aux, e menor que o prox do prox da aux if(strcmp(x.nome, aux->item.nome) == 1 && strcmp(x.nome, aux->prox->item.nome) == -1){ aux2 = aux->prox. //aux de prox passa a apontar para aux2 aux2->prox = aux->prox. //aux2 passa a apontar para a celula que aux apontava }}int main(){ TipoItem item. Lista lista. FLVazia(&lista). int qtd, i. printf("Informe a quantidade de pessoas que deseja cadastrar: "). scanf("%d",&qtd). for(i = 0. i < qtd. i++){ printf("Informe o nome: "). scanf("%s",&item.nome). Insere(&lista,item). printf("Informe o sobrenome: "). scanf("%s",&item.sobrenome). Insere(&lista,item). printf("Informe a idade: "). scanf("%d",&item.idade). Insere(&lista,item). printf("Informe a data de nascimento no formato dd/mm/aa: "). scanf("%s",&item.data_nasc). Insere(&lista,item). printf("Informe a identidade: "). scanf("%s",&item.id). Insere(&lista,item). printf("Informe o ---o: "). scanf("%s",&item.---o). Insere(&lista,item). } Imprime(lista). ordenaNome(&lista,item). } Estava tentando imprimir a lista normal primeiro, mas fui testar e o programa n responde dps q digito os dados. Oq pode ser? Minha função imprime nao funciona em nenhum exercicio, n consigo nem ver se meus codigos estao certos D: sempre para de responder na hora q chamo a função...
Discussão (2)
Carregando comentários...