簡體   English   中英

雙向鏈表冒泡排序

[英]Doubly Linked List Bubble Sort

我的項目是一個雙向鏈表的冒泡排序系統。 我正在嘗試按日期對雙向鏈表(即對象)的元素進行排序。 我使用基於指針的排序,因為我不想更改指針的數據。 問題是我的代碼可以(我認為有效)對鏈表進行排序。 但是最后,當我嘗試打印鏈表的對象時,我的頭不在它應該在的位置。 你可以幫幫我嗎?

struct DoubleNode *DoubleDynamic::swap( DoubleNode *pointer1,  DoubleNode *pointer2) {
    DoubleNode* temp=pointer2->next;
    pointer2->next=pointer1;
    pointer2->prev=pointer1->prev;
    pointer1->next=temp;
    pointer1->prev=pointer2;
    return pointer2;
}

void DoubleDynamic::sort(int size)
{
    DoubleNode* temp;
    DoubleNode* current;
    bool sorting;
    if (head==NULL)
    {
        return;
    }else
    {
        for (int i = 0; i <= size; ++i)
        {
            sorting= false;
            temp=head;
            for (int j = 0; j < size-1-i; ++j)
            {
                DoubleNode *employee1=temp;
                DoubleNode *employee2=employee1->next;
                if (employee2!=NULL)
                {
                    if (employee1->data->getAppointment().operator>(employee2->data->getAppointment()))
                    {
                        temp = swap(employee1,employee2);
                        sorting= true;
                    }
                    temp= temp->next;
                }
            }
            if (!sorting)
            {
                break;
            }
        }
    }
    current=head;
    while (current->prev!=NULL)
    {
        current=current->prev;
    }
    head=current;
}

void DoubleDynamic::display()
{

    struct DoubleNode *trav;
    trav=head;
    if (trav==NULL)
    {
        cout<<"Liste boş yaa"<<endl;
    }
    while (trav != NULL)
    {
        cout<<*(trav->data)<<endl;
        trav=trav->next;
    }
    cout<<endl;
}

問題是當你交換頭指針時,你並沒有更新head引用新的頭節點。

解決此問題的一種方法是在進行交換之后,您應該檢查是否應該更新頭指針。

temp = swap(employee1,employee2);
if (employee1 == head)
    head = temp;

或者,在swap中,如果在pointer2->prev=pointer1->prev;中分配的新prev指針; 是 NULL 然后更新頭部(因為頭部節點沒有前一個節點)。

if ((pointer2->prev=pointer1->prev) == nullptr)
    head = pointer2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM