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...