摘要:
栈的操作主要有:入栈,出栈,返回栈顶元素,返回栈长度以及判断栈是否为空。 若用两个queue实现(可以定义成queue的数组queue q[2]),可以增加一个currentIndex来指向当前选中的queue。入栈操作可以直接把元素加到queue里,即 queue[currentIndex].push(element),时间复杂度为O(1),出栈操作要复杂一些,还是因为栈和队列元素的出入顺序不 同,处理方法是将size()-1个元素从q[currentIndex]转移到空闲队列q[(currentIndex + 1)%2]中,q[currentIndex]最后一个剩下的元素恰对应栈顶元素,. 阅读全文
2012年8月16日
摘要:
队列的操作主要有:入队,出队,返回队列长度,返回队首元素,判断队列是否为空。 若用两个栈来实现,可以另其中一个栈inStack专门处理入队工作,另一个栈outStack专门处理出队工作。对于入队而言,可以直接把元素加入到inStack中,复杂度为O(1);而对于出队需要做些处理,因为队列是先入先出的,而栈是先入后出,所以输出应该反序。比如inStack接收到的元素顺序为1, 2, 3,栈顶元素是3,但出队希望让1先出。解决方法是把inStack里的元素放到outStack中,这样outStack接收到的元素顺序就是3, 2, 1了,栈顶元素就是我们想要的1,时间复杂度为O(N)。更具体地,入. 阅读全文