var stack1=[],stack2=[];function push(node){stack1.push(node);}function pop(){if(stack2.length==0){if(stack1.length==0){return null;}else{var len = stack1.length;for(var i=0;i<len;i++){stack2.push(stack1.pop());}return stack2.pop();}}else{return stack2.pop();}}
这段JavaScript代码实现了一个特殊的栈结构,它使用两个数组(stack1和stack2)来模拟栈的操作。这种实现方式主要是为了实现pop操作的时间复杂度在均摊情况下为O(1)。
push(node)
:
pop()
:
对于push操作,时间复杂度始终为O(1),因为只是简单地将元素推入stack1。
对于pop操作,虽然在某些情况下(当stack2为空且stack1不为空时)需要遍历整个stack1来反转元素顺序,但这个过程不是每次pop都会发生的。实际上,每次从stack1转移到stack2的元素,在后续的pop操作中都可以直接从stack2中O(1)时间复杂度内弹出,直到stack2为空。因此,如果将多次pop操作看作一个整体,均摊下来的时间复杂度仍然是O(1)。
这段代码通过两个栈(实际上是两个数组)的巧妙配合,实现了一个在均摊情况下具有O(1)时间复杂度的栈结构。这种实现方式在处理大量数据时能够显著提高性能。