小白教程

 找回密码
 立即注册
查看: 6045|回复: 2

冒泡排序对链表排序,为什么只执行了一次?

[复制链接]

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2021-3-18 17:49:25 | 显示全部楼层 |阅读模式
  1. void g(struct t *head)
  2. {
  3.   struct t *p,*q,*k;
  4.   int x,y;
  5.   for(x=0;x<N-1;++x)
  6.    { p=head;printf("%.2f %.2f %.2f\n",head->next->money,head->next->next->money,head->next->next->next->money);
  7.    for(y=0;y<N-x-1;++y)
  8.   {if(p->next->money<p->next->next->money)
  9.      {q=p->next;
  10.       k=p->next->next->next;
  11.       p->next=p->next->next;
  12.       p->next->next=q;
  13.       p->next->next->next=k;}
  14.       printf("%.2f %.2f %.2f\n",p->next->money,p->next->next->money,p->next->next->next->money);
  15.       p=p->next;
  16.    }
  17.    }
  18. }
复制代码

运行结果只有一次交换

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-3-25 10:24:27 | 显示全部楼层
这个写法容易出错,例如p和p的next在还没确定是不是空的情况下就去访问其属性,程序会出现无法预知错误
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-3-27 12:31:08 | 显示全部楼层
代码没细看,但既然是链表,那就最好不要用for(x=0;x<N-1;++x)之类的来作为循环条件,这样的容易访问空指针,导致程序异常
正确的做法是
while(p)
{
......
p = p->next;
}
这样的代码,阅读性也好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 12:24 , Processed in 0.044913 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表