Java 数组/堆栈/队列的大O表示法

Java 数组/堆栈/队列的大O表示法,java,arrays,stack,queue,big-o,Java,Arrays,Stack,Queue,Big O,我想知道,在我们插入和删除一个元素的情况下,为什么在平均值中数组/堆栈/队列的大O表示法是O(1) 在我的理解中,这是O(1),因为无论集合中的数据量如何,交织和删除元素都需要恒定的时间,但我仍然有点困惑。如果您能帮我消除困惑,我们将不胜感激。O(1)-表示法意味着操作是在固定时间内执行的 O(n)-表示法表示操作在线性时间内执行,例如遍历列表 排列 我们从最明显的一个开始。数组A有一个固定的长度n,它的元素可以通过寻址内存中的适当位置(即 A[i]=10; 堆栈 堆栈是后进先出的数据结构。我

我想知道,在我们插入和删除一个元素的情况下,为什么在平均值中数组/堆栈/队列的大O表示法是O(1)

在我的理解中,这是O(1),因为无论集合中的数据量如何,交织和删除元素都需要恒定的时间,但我仍然有点困惑。如果您能帮我消除困惑,我们将不胜感激。

O(1)-表示法意味着操作是在固定时间内执行的

O(n)-表示法表示操作在线性时间内执行,例如遍历列表

排列 我们从最明显的一个开始。数组A有一个固定的长度n,它的元素可以通过寻址内存中的适当位置(即

A[i]=10;
堆栈 堆栈是后进先出的数据结构。我们总是有一个指向顶部元素的指针/引用。因此,即使堆栈被实现为一个列表,其中我们不能在恒定时间内处理其中的特定元素(我们必须在O(n)中遍历列表),我们也在使用pop/peak访问最顶层的元素,我们有一个指针/引用,因此可以在恒定时间O(1)中访问该元素

队列
队列是先进先出的数据结构。与堆栈一样,访问队列的特定元素可以在线性时间O(n)内完成,因为我们需要遍历它。但是我们通常有一个指向队列的第一个和最后一个元素的指针/引用。因此,排队和出列都可以在恒定时间O(1)内执行。

对于基于数组的堆栈,所有操作都是O(1),因为您只能删除堆栈顶部的项(不必循环或迭代或执行任何其他操作)。插入是一样的。 对于基于链接的堆栈,除析构函数外,它们都是O(1),因为必须循环遍历节点并删除每个节点。 对于基于数组的ques,我只确定deque是O(N),因为您返回第一个项目,然后将向前移动


我建议看一看,他在那里对所有这些进行了深入的解释。祝你好运

你搞混了什么?@kennytm当我们在avg情况下插入和删除数组/堆栈/队列中的元素时,为什么大O表示法是O(1)为什么不是O(n)?这有帮助吗?至少还不清楚这个问题的作者所说的“插入”是什么意思(特别是同时提及3种不同的数据结构),如果不是的话,这也是多个其他问题的重复。不幸的是,他们似乎不再注册。我认为出于所有这些原因,这应该是关闭的。根据我的理解,在平均情况下,数组/堆栈/队列中的大O表示法是O(1)。因为插入和删除元素需要一个步骤,而不管数组的大小。对于搜索元素,big-o表示法是o(n),因为有时我们搜索的元素是数组的第一个元素、中间元素或最后一个元素。如果我的理解是错误的,请告诉我。我正在浏览这个()备忘单,我的问题是为什么这里没有数组/堆栈/队列、链接列表、双链接列表、哈希表和二进制搜索树的最佳情况?为什么他们只指定了平均情况和最坏情况?为什么不是最好的案例?
Stack.pop(); //or peak() perhaps