我的双向链表冒泡排序功能有问题。
当我以单链接方式对节点进行排序时(仅使用 ->next),它可以工作,但我无法使其与 ->prev 指针一起使用。
这是我正在使用的代码:
void sort(int count)
{
struct data *tmp,*current,*nextone;
int i,j;
for(i=0;i<count;i++)
{
current = first;
for(j=0;j<count-1-i;j++ )
{
if(current->number > current->next->number)
{
nextone = current->next;
current->next = nextone->next;
nextone->next = current;
if(current == first)
{
first = nextone;
current = nextone;
}
else
{
current = nextone;
tmp->next = nextone;
}
}
tmp = current;
current = current->next;
}
}
}
这是我正在使用的结构(带有列表的第一个和最后一个元素的全局变量):
struct data
{
int id;
char name[20];
int number;
struct data *next;
struct data *prev;
};
struct data *first = NULL;
struct data *last = NULL;
下面的逻辑是可行的。
我会遵循类似的算法...如果你想移动整个节点...
struct data *before, *after;
if(current->number > current->next->number)
{
before = current->prev;
after = current->next;
if(before != NULL){
before->next = after;
}
current->next = after->next;
current->prev = after;
after->next = current;
after->previous = before;
}
或者,如果数据排序是目的,您可以简单地交换节点中的数字,而无需移动整个节点。您可以扩展以下逻辑以包括 char 数组和 id 的交换。
if(current->number > current->next->number)
{
int tempNum = current->number;
current->number = current->next->number;
current->next->number = tempNum;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)