【发布时间】:2010-04-28 00:44:18
【问题描述】:
我在一个包含 10,000 个整数的文件的双链接列表(从最高到最低)中实现了插入排序,并以相反的顺序输出到文件。
据我所知,我已经实现了这样一个程序,但是我注意到在输出文件中,一个数字不合适。其他所有数字都按正确顺序排列。
错位的数字是重复的数字,但该数字的其他重复顺序正确。奇怪的是这个数字是如何被错误地放置的。此外,未排序的数字只有 6 个位置不同步。
我已经查看了我的程序好几天了,不知道问题出在哪里,所以我向你寻求帮助。
下面是有问题的代码,
(旁注:我的问题可以自己删除吗?而是我的大学不会盗用我的代码,如果不是,如何删除?)
void DLLIntStorage::insertBefore(int inValue, node *nodeB)
{
node *newNode;
newNode = new node();
newNode->prev = nodeB->prev;
newNode->next = nodeB;
newNode->value = inValue;
if(nodeB->prev==NULL)
{
this->front = newNode;
}
else
{
nodeB->prev->next = newNode;
}
nodeB->prev = newNode;
}
void DLLIntStorage::insertAfter(int inValue, node *nodeB)
{
node *newNode;
newNode = new node();
newNode->next = nodeB->next;
newNode->prev = nodeB;
newNode->value = inValue;
if(nodeB->next == NULL)
{
this->back = newNode;
}
else
{
nodeB->next->prev = newNode;
}
nodeB->next = newNode;
}
void DLLIntStorage::insertFront(int inValue)
{
node *newNode;
if(this->front == NULL)
{
newNode = new node();
this->front = newNode;
this->back = newNode;
newNode->prev = NULL;
newNode->next = NULL;
newNode->value = inValue;
}
else
{
insertBefore(inValue, this->front);
}
}
void DLLIntStorage::insertBack(int inValue)
{
if(this->back == NULL)
{
insertFront(inValue);
}
else
{
insertAfter(inValue, this->back);
}
}
ifstream& operator>> (ifstream &in, DLLIntStorage &obj)
{
int readInt, counter = 0;
while(!in.eof())
{
if(counter==dataLength) //stops at 10,000
{
break;
}
in >> readInt;
if(obj.front != NULL )
{
obj.insertion(readInt);
}
else
{
obj.insertBack(readInt);
}
counter++;
}
return in;
}
void DLLIntStorage::insertion(int inValue)
{
node* temp;
temp = this->front;
if(temp->value >= inValue)
{
insertFront(inValue);
return;
}
else
{
while(temp->next!=NULL && temp!=this->back)
{
if(temp->value >= inValue)
{
insertBefore(inValue, temp);
return;
}
temp = temp->next;
}
}
if(temp == this->back)
{
insertBack(inValue);
}
}
感谢您的宝贵时间。
【问题讨论】:
-
您不能删除您的问题。完全常用的数据结构并不经常被盗。
-
好的,谢谢,我想我对我的代码相当防御。
-
为什么不用标准模板库,很好用。
-
如果您希望人们为您调试代码,请发布可编译的内容以及演示所需的任何输入数据。您发布的代码无法编译。 DLLIntStorage 未定义。
-
我认为从我发布的代码中足以让您了解发生了什么以及它在哪里出错了。正如我所说,数据输入是 10,000 个整数,只有一个节点不合适。
标签: c++ linked-list insertion-sort