我们可以在队列前面以 O(1) 时间复杂度排队一个元素吗?



这是我的代码,将一个元素排在队列前面,时间复杂度为 O(1(,但是使用 QUEUES 的概念就这样迷失了??

/////////////////ENQUEUE FRONT//////////////
void enqueue_front(T val){
if(cur_idx==0){
data[cur_idx]=val;
cur_idx++;
}
else{
data[cur_idx]=data[0];
data[0]=val;
cur_idx++;
}
}

我认为你的其他陈述是错误的。

您将队列的第一个元素发送到末尾,以便将元素添加到开头。 用类比来解释这一点:

  • 商店里有一排顾客(又名队列(
  • 新客户进入商店
  • 排在队列前面的客户被新的 客户并被发送到队列的后面。不太公平是吗?

您必须将每个客户(队列的每个元素(后退一步,然后在前面添加一个新元素,如果您使用数组实现它,则不会给您 O(1(。

如果你使用链表,在 O(1( 中是可能的,但你会牺牲数组附带的随机访问。

希望这有帮助

最新更新