我试图通过选择排序来排序我的链接列表,但是我在指针交换和下一个(Proximo)之间有一个问题,我的函数ordena不工作。我是怎么做到的?
#include <stdio.h>
#include <stdlib.h>
struct Candidato{
int nota;
char nome[200];
char cpf[11];
struct Candidato *proximo;
};
struct TipoListaCandidato{
Candidato *inicio = NULL;
Candidato *fim = NULL;
};
void iniciaCandidato(TipoListaCandidato *pLista){
pLista->inicio = NULL;
pLista->fim = NULL;
}
TipoListaCandidato lista;
void inserirCandidato(TipoListaCandidato *pLista){
int nota;
char nome[200],cpf[11];
Candidato *aux = pLista->inicio;
Candidato *novoNodo = new Candidato;
printf("Digite nome: ");
fflush(stdin);
gets(nome);
printf("Digite cpf: ");
fflush(stdin);
gets(cpf);
printf("Digite nota: ");
scanf("%d",&novoNodo->nota);
strcpy(novoNodo->cpf,cpf);
strcpy(novoNodo->nome,nome);
novoNodo->proximo = NULL;
if(aux == NULL){
pLista->inicio = novoNodo;
pLista->fim = novoNodo;
}else{
aux = pLista->fim;
pLista->fim = novoNodo;
aux->proximo = pLista->fim;
}
}
TipoListaCandidato ordenado;
void ordena(TipoListaCandidato *pLista){
Candidato *aux = pLista->inicio,*seguinte,*tmp;
for(;aux != NULL;aux = aux->proximo){
Candidato *minimo = aux;
for(seguinte = aux->proximo;seguinte !=NULL; seguinte = seguinte->proximo){
if(seguinte->nota > minimo->nota){
minimo = seguinte;
}
}
tmp = aux;
aux = minimo;
minimo = tmp;
//tmp->proximo = aux->proximo;
//minimo->proximo = tmp;
}
}我想我如何在指针之间进行交换,请帮助我。
Att
发布于 2015-11-19 15:15:25
请注意我对这个问题的评论,但是排序函数的主要问题似乎是您从来没有执行过任何实际的交换。我想这段代码是用来交换的..。
tmp = aux;
aux = minimo;
minimo = tmp;..。但它只是交换跟踪变量的值,而不是列表中指向节点的位置。您需要调整proximo对象的struct Candidato指针以交换列表元素。这有点棘手,特别是像您这样的单链接列表。
此外,使用链接列表,您实际上不需要交换其本身。在每个步骤中,只需从子列表中的当前位置移除最小元素,然后在子列表的开头重新插入它。这实际上比真正的交换要容易得多。
https://stackoverflow.com/questions/33806638
复制相似问题