赞
踩
使用栈实现队列的下列操作:
push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false
这种题可以采用双栈的方式完成。分别命名为inStack,用于存储该队列的元素(顺序栈),outStack用于还原元素在队列中的位置(逆序栈)。
所以对于队列中各函数的实现:
void cheak():首先判断outStack是否为空,若不为空直接弹出该栈栈顶元素,若为空,先把inStack所有元素逐一弹出,push到outStack,最后弹出outStack的栈顶元素,这样即可实现逆向存储
void push(x)(入队):直接将队列元素存入inStack中。若存入队列的元素为1,2,3,所以在inStack中的元素为3,2,1(3在最前面),outStack为空。
int pop()(删除首部元素并返回该值):首先进行cheak()操作,得到outStack中的元素为1,2,3(1在最前面),inStack由于pop后目前为空。随后将outStack的首元素取出来作为队列中的首元素,并将其删除。此时返回1,outStack中的元素为2,3。
int peak()(返回队列首部元素):同样先进行cheak()操作,随后直接返回outStack首部元素即可。
bool empty()(判空):此时需要判断inStack和outStack均为空才可以。原理很简单,一个队列的元素若判断它里面为空,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。