主题:【VC++问题】如何用冒泡法实现单向链表的排列?
glife
[专家分:0] 发布于 2006-12-21 11:14:00
最近在研究这个问题,但一直弄不好。
就是先输入一些数字,用单向链表保存起来,然后利用冒泡法算法实现数字从小到大的重新排列。(虽然有其他方法可以实现,但我想知道冒泡法怎么实现)
有大虾帮忙吗?谢谢啊~
回复列表 (共8个回复)
沙发
glife [专家分:0] 发布于 2006-12-21 11:15:00
顺便问问,双向链表可以用来做什么?我发现单向链表就可以实现很多功能了
板凳
glife [专家分:0] 发布于 2006-12-21 11:37:00
啊,冒泡法的单向链表已经做成功啦,不过还是想请问双向链表的作用,谢谢告知。
3 楼
forjane [专家分:5670] 发布于 2006-12-21 23:16:00
双向链表多一个遍历方向,什么时候你发觉算法需要往头节点移动指针的时候就用它吧
4 楼
pbdwadr [专家分:0] 发布于 2006-12-24 21:48:00
冒泡法实现单向链表的排列:
void SortList(List *pList)
{
for(List *p1=pList; p1!=NULL; p1=p1->next)
{
for(List *p2=p1; p2!=NULL; p2=p2->next)
{
if(*p1 > *p2)
{
ElemType temp=*p1;
*p1=*p2;
*p2=temp;
}
}
}
}
5 楼
glife [专家分:0] 发布于 2006-12-25 12:22:00
4楼朋友,那个ElemType temp里的temp是指针吗?
你那样写,对指针进行换位以后,没有重新定义链接,可以吗?
6 楼
雪光风剑 [专家分:27190] 发布于 2006-12-26 07:37:00
4楼的做法只是把数组排序用指针重写了一遍,完全不对的
因为只是改了那两个名字所对的指针,数据没有变动
真正要改的是和前趋节点的链接关系
7 楼
雪光风剑 [专家分:27190] 发布于 2006-12-26 07:38:00
双链比单链的优势在于可以更方便的找到前趋
8 楼
glife [专家分:0] 发布于 2006-12-26 21:53:00
其实我是用改变指针所指的数据实现的,确实可行,不过不知道有无其他更好的途径。另外通过改变node实现重新排列的我一直做不好,哪位大虾是否愿意帮忙写一下(最好一个单向和一个双向链表的)
我来回复