Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 此priorityQueue析构函数的时间复杂度是多少?_C++_Priority Queue_Doubly Linked List - Fatal编程技术网

C++ 此priorityQueue析构函数的时间复杂度是多少?

C++ 此priorityQueue析构函数的时间复杂度是多少?,c++,priority-queue,doubly-linked-list,C++,Priority Queue,Doubly Linked List,我不确定时间复杂度是O(n)还是O(n^2)。有人能澄清一下吗?我想说它是O(n^2),因为析构函数中的遍历和findMin()中的遍历 findMin基本上只是遍历双链表,查找并返回最小值 ~priorityQueue() { for(temp = head; temp->next != NULL; temp = temp->next) { extractMin(); } }

我不确定时间复杂度是O(n)还是O(n^2)。有人能澄清一下吗?我想说它是O(n^2),因为析构函数中的遍历和findMin()中的遍历

findMin基本上只是遍历双链表,查找并返回最小值

    ~priorityQueue()
    {
        for(temp = head; temp->next != NULL; temp = temp->next)
        {
            extractMin();
        }
    }

    double extractMin()
    {
        if (head == NULL)
            //do nothing
        min = findMin(head);
        else if(min == head)
        {
            head = head->next;
            head ->prev = NULL;
            double output = min->data;
            delete min;
            return output;
        }
        else if (min == tail)
        {
            double output = min->data;
            tail = tail->prev;
            tail->next = NULL;
            delete min;
            return output;
        }
        else if(min == head && min == tail)
        {
            return min->data;
            tail = NULL;
            head = NULL;
        }
        else
        {
            double output = min->data;
            min->prev->next = min->next;
            min->next->prev = min->prev;
            delete min;
            return output;
        }
    }

这类问题可能属于codereview网站,但并非如此。乍一看,它看起来像O(N^2)。为什么要搜索最小值?把东西从一端删除到另一端。此外,您最好将双链接列表分离到一个单独的类中。更好的办法是将整个过程废弃,使用
std::priority\u queue
。使用
nullptr
,而不是
NULL
。无论你在哪里发布,你都需要一个两者都不需要,因为它不可靠
temp
在析构函数中使用时可能指向已删除的对象。从未听说过codereview。我一定会查出来的。谢谢你!