gpt4 book ai didi

C:列表排序代码不起作用

转载 作者:行者123 更新时间:2023-11-30 16:59:28 25 4
gpt4 key购买 nike

我不明白为什么我的对列表元素进行排序的代码不起作用,它对列表的前 5 个元素进行排序,然后停止。我知道这可能是一个愚蠢的问题,但我检查了循环很多次,无法理解为什么它在列表末尾之前到达导出。

typedef enum { NOTORD=0, TIME=1, POSITION=2  } ord_t;


typedef struct elem {
double position;
double time;
flag_t flag;
struct elem * next;
} elem_t;

typedef struct {
elem_t * head;
int nelem;
ord_t ord;
} lista_t;


void set_ordinata_time (lista_t * l)
{
if (l->ord!=TIME) {
elem_t * aux, *corr, *succ;
int scambio;
corr=l->head;
succ=l->head->next;
aux=malloc(sizeof(elem_t));
scambio=1;
while(scambio==1)
{
corr=l->head;
succ=l->head->next;
scambio=0;
while(succ != NULL)
{
if (corr->time > succ->time)
{
aux=corr;
aux->next=succ->next;
corr=succ;
succ=aux;
corr->next=succ;
scambio=1;
}
corr=succ; succ=succ->next;
}
}
l->ord=TIME;
}

}

最佳答案

交换时,如果corrl->head,则需要将l->head重置为succ 。如果不这样做,那么下次循环时,排序将从第一次遍历后 l->head 结束的位置开始。

此外,您将丢失(并泄漏)列表的一部分。

编辑:更多评论

一般适用于corr的前一个元素(交换时需要重置为succ)

关于C:列表排序代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38103032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com