C++ 此priorityQueue析构函数的时间复杂度是多少?
我不确定时间复杂度是O(n)还是O(n^2)。有人能澄清一下吗?我想说它是O(n^2),因为析构函数中的遍历和findMin()中的遍历 findMin基本上只是遍历双链表,查找并返回最小值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(); } }
~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。我一定会查出来的。谢谢你!