回 帖 发 新 帖 刷新版面

主题:【VC++问题】如何用冒泡法实现单向链表的排列?

最近在研究这个问题,但一直弄不好。
就是先输入一些数字,用单向链表保存起来,然后利用冒泡法算法实现数字从小到大的重新排列。(虽然有其他方法可以实现,但我想知道冒泡法怎么实现)

有大虾帮忙吗?谢谢啊~

回复列表 (共8个回复)

沙发

顺便问问,双向链表可以用来做什么?我发现单向链表就可以实现很多功能了

板凳

啊,冒泡法的单向链表已经做成功啦,不过还是想请问双向链表的作用,谢谢告知。

3 楼

双向链表多一个遍历方向,什么时候你发觉算法需要往头节点移动指针的时候就用它吧

4 楼

冒泡法实现单向链表的排列:
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 楼

4楼朋友,那个ElemType temp里的temp是指针吗?
你那样写,对指针进行换位以后,没有重新定义链接,可以吗?

6 楼

4楼的做法只是把数组排序用指针重写了一遍,完全不对的
因为只是改了那两个名字所对的指针,数据没有变动
真正要改的是和前趋节点的链接关系

7 楼

双链比单链的优势在于可以更方便的找到前趋

8 楼

其实我是用改变指针所指的数据实现的,确实可行,不过不知道有无其他更好的途径。另外通过改变node实现重新排列的我一直做不好,哪位大虾是否愿意帮忙写一下(最好一个单向和一个双向链表的)

我来回复

您尚未登录,请登录后再回复。点此登录或注册