gpt4 book ai didi

C:通过交换元素数据对链表进行排序

转载 作者:行者123 更新时间:2023-11-30 17:27:06 25 4
gpt4 key购买 nike

给定国际象棋中的一系列 Action ,我想对列表进行排序,使得所有吃子 Action 都位于列表的第一位,非吃子 Action 位于列表的末尾。

我在运行此代码时遇到无限循环,但不知道为什么。我查看了 4 个不同的案例 - 我以看似合乎逻辑的方式迭代了列表。如果有更有经验的人可以看一下,我将不胜感激。谢谢!

void sort(move_t* head, game_t game) {
move_t* move, *next;
int x1,y1,x2,y2;
char s;
move = head;

while(move != NULL)
{
next = move->next;
while(next != NULL)
{
if((isCapture(game,move) == 0) && (isCapture(game,next)== 1))
{
x1 = move->x1;
y1 = move->y1;
x2 = move->x2;
y2 = move->y2;
s = move->s;
move->x1 = next->x1;
move->y1 = next->y1;
move->x2 = next->x2;
move->y2 = next->y2;
move->s = next->s;
next->x1 = x1;
next->y1 = y1;
next->x2 = x2;
next->y2 = y2;
next->s = s;
move = next;
next = next->next;
}
else if((isCapture(game,move) == 1) && (isCapture(game,next)== 0))
{
move = move-> next;
next = move-> next;
}
else if((isCapture(game,move) == 0) && (isCapture(game,next)== 0))
{
next = next->next;
}
else if((isCapture(game,move) == 1) && (isCapture(game,next)== 1))
{
move = move -> next;
next = move -> next;
}

}
}
}

最佳答案

您会遇到无限循环,因为您仅在内部循环中修改move。当列表排序后,您将在最后看到所有未获胜的 Action 。一旦 move 到达第一个未获胜的移动,内部循环就会停止修改 move (这是您的第三个测试用例,其中两个 isCapture 函数都返回 0 ),它只执行 next = next->next

外循环永远不会满足其条件,因为 move 永远不会到达列表的末尾。

关于C:通过交换元素数据对链表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516354/

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