队列<t> O(1)时间

时间:2016-05-15 05:25:29

标签: java queue

我刚创建了入队,出队和偷看方法,但我不知道他们是否处于O(1)时间。如果不是,我该怎么办,你能解释一下如何在O(1)时间内完成吗?

Node<T> start;

public void enqueue(T val) 
{
    Node<T> n = new Node<T>(val);

    if (start == null) 
    {
        start = n;
    } else 
    {
        n.next = start;
        start = n;
    }       
}   
public T dequeue() 
{
    if (start != null) 
    {
        T item = start.nodeValue;
        start = start.next;

        return item;
    }
    return null;
}


public void peek () 
{
    Node<T> curr = start;
    while (curr != null) 
    {
        System.out.print(curr.nodeValue + " ");
        curr = curr.next;
    }
}

2 个答案:

答案 0 :(得分:2)

好吧,在恒定的时间内排队和出队,并且在线性时间内查看。

分析复杂性的想法仅仅是计算操作次数。我们所要做的就是假设创建一个节点,赋值并评估if语句在O(1)中运行。

对于入队和出队,无论代码在何处运行,都会有一定数量的操作。所以最后,代码只进行了一定数量的O(1)操作,这给了O(1)复杂性。

对于peek方法,代码进入wile的次数与队列中的节点一样多。因此,如果有 n 节点,则代码会在循环中输入 n :它执行 n O(1)操作。 最后:peek具有线性复杂性。

让方法打印队列中运行线性时间的所有值真的没什么大不了的,因为它涉及遍历结构。

答案 1 :(得分:0)

它们处于O(1)或恒定时间,因为操作所需的时间不受集合大小的影响。