繁体   English   中英

气泡式排序一个指针的链表

[英]Bubble sort a linked list with one pointer

我试图用一个指针p_previous冒泡排序一个链表。 该指针应该向前看一个节点,也向前看两个节点,并且如果第一个大于第二个节点,则将使用一个临时变量来切换它们,而p_previous保持在交换之外。 p_previous还应该检查两个节点以查看列表预告片是否存在,从而停止排序。 老实说,我不知道在气泡排序方面我在做什么,而且链表的实现也无济于事。

这是一些代码:

int sort_list(ID_NUMBER *p_list, int list_count)
{
    ID_NUMBER *p_previous = p_list; /* Previous node, use to swap next */
    ID_NUMBER *p_temp;              /* Temporary variable              */
    int count;                      /* Counts number of nodes passed   */

    for(count = 0; count < list_count; count++)
    {
        while(p_previous->p_next_student->p_next_student != NULL)
        {
        if(p_previous->p_next_student->student_id >
                p_previous->p_next_student->p_next_student->student_id)
        {
            p_temp = p_previous->p_next_student->p_next_student;
            p_previous->p_next_student = p_temp->p_next_student;
            p_temp = p_previous->p_next_student;
            p_previous->p_next_student = p_temp;
        }
        p_previous = p_previous->p_next_student;
        }

    }
    return 0;
}

这就是我所知道的。

如果这是我输入的清单。

H-> 1-> 3-> 2-> 4-> T

1和3已经按顺序排列,向下移动p_previous

3和2乱序,使temp变量指向2。

使3指向数字4。

使2指向数字3。

将1指向数字2。

我认为这就是我应该怎么做,我只是不知道如何将其放入代码中。 我非常确定for循环内部的while循环是必需的。

如果有人可以帮助,那就太好了。

另外,如果您需要更多信息,请询问。

这里有几个基本问​​题(例如您不能更改列表中的第一项),但是最基本的问题是交换:

        p_temp = p_previous->p_next_student->p_next_student;
        p_previous->p_next_student = p_temp->p_next_student;
        p_temp = p_previous->p_next_student;
        p_previous->p_next_student = p_temp;

假设我们有三个项目,我们将其称为ABC。我们想要ACB。现在您开始做:

p_previous = A
p_temp = A->next->next = C

这是走错路了。 我们将A-> next指向C。问题是,这样做时我们将丢失B。p_temp应该存储B。

p_temp = A->next = B
p_previous->next= p_previous->next->next = C
p_temp->next= p_previous->next->next = {whatever came after}
p_previous->next->next= p_temp = B

然后,您只需要处理其他问题,例如当列表中只有一项时崩溃。

另外,您可能需要执行以下操作:

for(count = 0; count < list_count; count++)
{
  p_previous = p_list;

这样您就可以遍历列表冒泡值N次,而不是一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM