所以这是我的排序函数,我不是从链表中交换信息,只是交换下一个节点的指针。我有一个类似的功能,可以按汽车的价格进行排序,效果很好,当我用来按汽车年份排序时,我得到细分错误 11。
void ordenaCrescenteAno(ELEMCAR *iniLista){
ELEMCAR *aux1 = NULL;
ELEMCAR *aux2 = NULL;
ELEMCAR *maior = NULL;
ELEMCAR *troca = NULL;
if(iniLista == NULL){
printf("Lista Vazian");
return;
}
for(aux1 = iniLista; aux1 != NULL; aux1 = aux1 -> seguinte){
maior = aux1;
for(aux2 = aux1; aux2 != NULL; aux2 = aux2 -> seguinte){
if(aux2->info.ano > maior->info.ano){
maior = aux2;
}
}
if(maior != aux1){
troca->seguinte = aux1->seguinte;
aux1->seguinte = maior->seguinte;
maior->seguinte = troca->seguinte;
}
}
}
我将在这里列出链表的详细信息:
typedef struct carro{
char matricula[7];
char marca[30];
char modelo[30];
int ano;
char classe[30];
float preco;
char combustivel[10];
int dataInspecao;
int dataRevisao;
char observacoes[100];
int estado;
}CARINFO;
typedef struct CarElem{
CARINFO info;
struct CarElem *seguinte;
}ELEMCAR;
我做错了什么?我无法弄清楚,因为我有一个类似的函数可以工作,但我正在按"preco"变量排序。
troca
初始化为空,因此troca->sequinte
会出错
改用这个
struct CarElem *troca; replace troca definition
troca = aux1->sequinte; replace troca->sequinte line with this
maior->sequinte = troca; remove ->sequinte from troca
我意识到上面的代码片段有问题。
在您的交换部件中
if (maior != aux1)
{
CARINFO carswap = aux1->info; // Copy the info into a temporary variable
aux1->info = maior->info; // Move info from maior to aux1
maior->info = carswap; // Move info from temporary variable to maior
}
希望这段代码片段能满足您的要求