我们是否可以将时间复杂度为O(1)的元素排入队列?

时间:2019-10-21 05:33:40

标签: c++

这是我的代码,以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++;
        }
    }

1 个答案:

答案 0 :(得分:-1)

我认为您的else陈述是错误的。

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

  • 商店中有很多顾客(又称排队)
  • 新顾客进入商店
  • 排在最前面的客户被新的 客户并被发送到队列的后面。不是很公平吗?

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

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

希望这会有所帮助