永发信息网

这是单链表实现冒泡排序的算法,为什么1没有参加排序?哪错了?

答案:2  悬赏:0  手机版
解决时间 2021-04-26 03:35

上面是运行结果,帮忙看看哪里出现了逻辑错误

#include "stdio.h"
typedef int ElemType;
typedef struct node
{ElemType data;
struct node *next;
}slink;
slink *creslink(int n)
{ slink *head,*p,*s;
int i;
if(n<1)return NULL;
p=head=(slink *)malloc(sizeof(slink));
for(i=1;i<=n;i++)
{s=(slink *)malloc(sizeof(slink));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=NULL;
return head;
}
void sort(slink *L)
{slink *p,*q,*end;
ElemType r;
end=L->next;
while(end->next!=NULL)end=end->next;
p=L->next;
while(L->next->next!=end)
{p=L->next;q=p->next;
while(q!=end)
{if(p->data>q->data)
{r=p->data;p->data=q->data;q->data=r;}
p=q;q=q->next;
}
end=p;
}
}
void list(slink *head)
{slink *p;
p=head->next;
while(p!=NULL)
{ printf("%4d",p->data);
p=p->next;
}
printf("\n");
}
main()
{slink *L;
L=creslink(7);
list(L);
sort(L);
list(L);
getch();
}

最佳答案

由于end指向了内容为1的节点.而后面的循环判断都是当指针不等于end的时候.所以end就不会被循环判断到. 那么很明显1就不会参与到冒泡中..



void sort(slink *L)
{
slink *p,*q,*end;
ElemType r;
end=L->next;
while(end!=NULL)end=end->next; //这里.
p=L->next;
while(L->next->next!=end)
{
p=L->next;q=p->next;
while(q!=end)
{
if(p->data>q->data)
{
r=p->data;p->data=q->data;q->data=r;
}
p=q;q=q->next;
}
end=p;
}
}


全部回答

边界判断错误。

直接把sort函数中的

end=L->next; while(end->next!=NULL)end=end->next;

去掉。

改为end = NULL;就行了。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
90的我们应该做些什么呢
急急我到底该怎么办
wow裁缝魔火试炼任务怎么做的
我14岁刚满身高172CM 18以后可以张多高?
高一历史练习册(第一分册)第11课《奥斯曼帝
介绍几部好看的校园鬼故事电影 要情节好的
请问苗泰牌产妇安颗粒一盒多少钱?急
宝的草书怎么写好看,爱字草体怎么写
掉头发怎么办?请问有没有什么特效药?
谁能告诉我丶为什么今年安徽省换英语书了
没法进空间怎么办
看一起看流星雨的人都是Bb吗.
为什么打不开爱奇艺,为什么iphone上爱奇艺打
森林灭火时为什么常使用大功率的风力灭火机?
怎么泡泡堂的进不了呢?
推荐资讯
怎么样才能做个好兵,做个合格的兵
我媳妇过生 我只有50块钱,我该买什么礼物给
qq三国在哪里卖装备图纸啊??
创业!什么都是开始难!没钱更难!有没有不用
高明邮政合水支局在什么地方啊,我要过去处理
为什么进不到书城??
吃多了西瓜真的会制早产吗?
请看看我收藏的人民币价值如何?[钱币]
为什么我的问问老是负分啊?
哪里能看到“少女奸杀尸检”的图.最近比较流
现在赚钱有什么好的项目或工作?
如何修改Q..Q密.码?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?