我已經從10000個文件的雙向鏈接列表(從最高到最低)實施插入排序,並以相反的順序輸出到文件。雙重鏈接列表插入排序錯誤
據我所知,我已經實現了這樣一個程序,但我注意到在輸出文件中,單個數字是不合適的。每個其他號碼的順序都是正確的。
不合格的數字是一個重複的數字,但這個數字的其他重複是正確的順序。奇怪的是這個數字是不正確的。未分類號碼也只有6個地方不同步。
我已經瀏覽了我的程序幾天,不知道問題出在哪裏,所以我轉向你尋求幫助。
下面是有問題的代碼,
(邊注:?可我的問題由我自己被刪除,而我的大學不thieve我的代碼,如果沒有它如何被刪除)
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);
}
}
謝謝你的時間。
您不能刪除您的問題。完全通常的數據結構並不經常被盜用。 – Potatoswatter 2010-04-28 00:47:48
好的,謝謝,我想我的代碼很防守。 – House 2010-04-28 00:56:28
爲什麼不使用標準模板庫,這是非常好的。 – martsbradley 2010-04-28 19:32:19