双向链表的冒泡排序问题

xiaoyaodeyun2008 2009-07-17 03:13:51
void zongfenpaixu(Linklist &L)//按照总分成绩排序(冒泡法)
{
Linklist p;
int n,m,j;
p=L;//头结点存储了内容
n=read1();//读取学生的个数,即存储信息的结点个数
for(m=1;m<n;m++)
{
for(j=1;j<n;j++)
{
if(p->zongfen<p->next->zongfen)
{
p->next=p->next->next;
p->next->prior->next=p;
p->prior->prior=p->prior;
p->prior=p->next->prior;
p->next->prior=p;
}
else
p=p->next;
}
p=L;
}
printf("\n按照总分排序后的结果是:\n\n");
print(L);//自己写的输出函数,没有问题
}
这个排序始终有问题,请大侠指出,谢谢
...全文
560 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyaodeyun2008 2009-07-17
  • 打赏
  • 举报
回复
回复3楼,貌似还是不对呀,是不是别的地方出错了??
回复4楼,我的是成绩管理系统,如果像你那个样,成绩对应的人就变了。
回复5楼,具体怎么操作,说说呀
Nio96 2009-07-17
  • 打赏
  • 举报
回复
if(p->zongfen <p->next->zongfen)
{
p->next=p->next->next;
p->next->prior->next=p;
p->next->prior=p->prior;
p->prior=p->next->prior;
p->next->prior=p; 这一段有问题,把书打开看看吧。双向链表的操作
}
xiao_ke 2009-07-17
  • 打赏
  • 举报
回复
麻烦 ! 直接交换两个元素的关键字不就行了嘛!
指针到处飞也不嫌头晕!
if(p->zongfen <p->next->zongfen)
{
temp = p->zongfen
p->zongfen = p->next->zongfen
p->next->zongfen = temp
}
buyan2009 2009-07-17
  • 打赏
  • 举报
回复
将if的语句体改成如下:
p->next->next->prior=p;
p->next->prior=p-prior;
p->prior->next=p-next;
p->next->next=p;
p->prior=p->next;
p->next=p->next->next;
注意:指针改动的次序


xiaoyaodeyun2008 2009-07-17
  • 打赏
  • 举报
回复
这儿的确是错了,但我改了后还是运行错误。
void zongfenpaixu(Linklist &L)//按照总分成绩排序(冒泡法)
{
Linklist p;
int n,m,j;
p=L;//头结点存储了内容
n=read1();//读取学生的个数,即存储信息的结点个数
for(m=1;m <n;m++)
{
for(j=1;j <n;j++)
{
if(p->zongfen <p->next->zongfen)
{
p->next=p->next->next;
p->next->prior->next=p;
p->next->prior=p->prior;
p->prior=p->next->prior;
p->next->prior=p;
}
else
p=p->next;
}
p=L;
}
printf("\n按照总分排序后的结果是:\n\n");
print(L);//自己写的输出函数,没有问题
}
hai040 2009-07-17
  • 打赏
  • 举报
回复
p->prior->prior=p->prior;
p->prior的prior指向自身

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧