【发布时间】:2016-01-01 05:37:35
【问题描述】:
我一直在尝试使用交换函数对双向链表进行冒泡排序。我的问题是交换函数是否交换指针,而不仅仅是数据?我的代码显示它只交换数据而不交换指针。有没有办法有效地交换链表上的指针?请给我看代码,因为我在编码方面非常缺乏经验,而且我不理解其他答案中的其他代码。
void sortPoly(PolyNode* a)
{
PolyNode* head =a;
PolyNode* current = head;
PolyNode* current_next = current->next;
int len =Polylength(current);
if(len ==1 || len ==0)
{
return;
}
for(int i =0; i < len; i++)
{
for (int j =0; j< len -i; j++)
{
int sum = current->expx + current->expy;
cout << "sum=" << sum << endl;
int next_sum = current_next->expx + current_next->expy;
cout << "\t nextsum=" << next_sum << endl;
if( sum < next_sum)
{
cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
std:: swap(current, current_next);
cout << endl;
cout << "swapped" << endl;
cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
current = current->next;
current_next = current->next->next;
cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
}
}
}
这是我的结构:
struct PolyNode
{
int coef;
int expx;
int expy;
PolyNode* prev;
PolyNode* next;
};
【问题讨论】:
-
所以你有自己的列表实现?尝试以更小的步骤解决问题,您需要以某种方式比较 2 个节点并实现一个函数以正确交换 2 个节点(您可以决定交换什么:数据或指针,由于缓存效应,它可能更有效地交换数据,但你可以决定那个细节)最终结果将是一个迭代给出排序元素的列表。直到你不确定你有一个正确的“SWAP”和一个正确的“COMPARE”,甚至不要尝试进行排序
标签: c++ bubble-sort doubly-linked-list