[英]Selection Sort with Linked List C
我試圖通過選擇排序來排序我的鏈表,但是我在指針atual和next(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
請注意我對這個問題的評論,但排序功能的主要問題似乎是您從未執行任何實際交換。 我想這段代碼是為了進行交換...
tmp = aux;
aux = minimo;
minimo = tmp;
...但是它只是交換跟蹤變量的值,而不交換列表中指向節點的位置。 您需要調整struct Candidato
對象的proximo
指針以交換列表元素。 這有點棘手,尤其是對於像您這樣的單鏈接列表。
此外,用鏈表,你並不真的需要換本身 。 在每一步中,只需從其在子列表中的當前位置中刪除最小元素,然后將其重新插入子列表的開頭即可。 實際上,這將比真正的互換要容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.