[英]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.