我刚创建了入队,出队和偷看方法,但我不知道他们是否处于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;
}
}
答案 0 :(得分:2)
好吧,在恒定的时间内排队和出队,并且在线性时间内查看。
分析复杂性的想法仅仅是计算操作次数。我们所要做的就是假设创建一个节点,赋值并评估if语句在O(1)中运行。
对于入队和出队,无论代码在何处运行,都会有一定数量的操作。所以最后,代码只进行了一定数量的O(1)操作,这给了O(1)复杂性。
对于peek方法,代码进入wile的次数与队列中的节点一样多。因此,如果有 n 节点,则代码会在循环中输入 n :它执行 n O(1)操作。 最后:peek具有线性复杂性。
让方法打印队列中运行线性时间的所有值真的没什么大不了的,因为它涉及遍历结构。
答案 1 :(得分:0)
它们处于O(1)或恒定时间,因为操作所需的时间不受集合大小的影响。