省西省建设厅网站,html和php做网站哪个好,发布友情链接,注册域名后怎么做网站题目描述#xff1a;
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作#xff08;push、pop、peek、empty#xff09;#xff1a;
实现 MyQueue 类#xff1a;
void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素i…题目描述
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作push、pop、peek、empty
实现 MyQueue 类
void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空返回 true 否则返回 false
说明
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你所使用的语言也许不支持栈。你可以使用 list 或者 deque双端队列来模拟一个栈只要是标准的栈操作即可。 解题思路
设置两个栈s1和s2s1用来存储入队的元素s2用来实现出队方法
1.入队方法的实现将待入队的元素通过s1的压栈操作尾插到s1中。 2.出队方法的实现pop
出队之前判断两个栈s1和s2是否都为空为空返回-1
如果s2为空将s1中的所有元素通过出栈操作压入s2中循环条件为s1不为空待全部压入完后通过poll出栈操作返回s2的栈顶元素
3.获取队头元素peek
跟出队操作类似但唯一不同的是最后返回的是栈的peek方法。 实现步骤
1.通过压栈将x压入栈s1中实现入队操作。 class ArrayQueue{//声明两个栈public ArrayDequeInteger stack1;public ArrayDequeInteger stack2;public ArrayQueue(){//对栈进行初始化stack1 new ArrayDeque();stack2 new ArrayDeque();}
2。出队方法的实现 public int pop(){//出队列操作if(empty()){return -1;}while(stack2.isEmpty()){ //若stack2为空将stack1中的元素全部为尾插到stack2中while(!stack1.isEmpty()){stack2.push(stack1.pop());}return stack2.pop();}}
3.peek方法的实现
和出队列类似 具体代码如下
public int peek() {if (empty()) {return -1;}while (stack2.isEmpty()) {while (!stack1.isEmpty()) {stack2.push(stack1.pop());}}return stack2.peek(); //和pop类似但要将stack返回的值改为peek。}
最后empty方法 public boolean empty(){return stack1.isEmpty() stack2.isEmpty(); //s1与s2均不为空} 结语 今天的题目讲解结束喜欢的朋友可以点个赞