网站怎么做站内美化,电子商务网站开发设计报告,企业手机网站程序是什么,wordpress 点图片链接题目
用两个栈实现一个队列。队列的声明如下#xff0c;请实现它的两个函数 appendTail 和 deleteHead #xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素#xff0c;deleteHead 操作返回 -1 ) 示例 1#xff1a; 输入#xff1a; [请实现它的两个函数 appendTail 和 deleteHead 分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素deleteHead 操作返回 -1 ) 示例 1 输入 [CQueue,appendTail,deleteHead,deleteHead,deleteHead] [[],[3],[],[],[]]输出[null,null,3,-1,-1] 示例 2 输入 [CQueue,deleteHead,appendTail,appendTail,deleteHead,deleteHead] [[],[],[5],[2],[],[]]输出[null,-1,null,null,5,2] 提示
1 values 10000 最多会对 appendTail、deleteHead 进行 10000 次调用 解题思路 1.题目要求我们用两个栈实现队列但是给出的示例看起来不太明白那就让我们换成图片的形式来理解一下吧 举个例子假设我们所要进行的操作如下 我们先新建两个栈 stack1 和 stack2再建立一个queue队列帮助理解 接下来我们开始执行操作 入栈的元素我们都先放入 Stack1 中同时也给队列入队来做对比。 此时下一步是出队如果我们直接从Stack1出那就不满足我们队列先进先出的性质所以这个时候我们就要用到我们的 Stack2在执行出队操作时我们要先判断 Stack2 是否有元素若有则直接从 Stack2 出栈若没有我们就需要将 Stack1 中的所有元素出栈再将元素入栈到 Stack2 中。 这时我们可以看到 Stack2 出栈的顺序就与队列一致了我们就可以将最先入队的 1 让它出队 下一操作还是入队我们依旧要将入队的元素先放入 Stack1 中 然后开始出队Stack2 中有元素就让 Stack2 出栈若 Stack2 为空 就将 Stack1 中的元素入栈到 Stack2 中直到 两个栈都为空则说明队列中所有元素已经出队了。 2.代码的实现我们需要先设置两个栈然后将两个栈进行初始化在appendTail入队操作时我们只需将元素入栈到Stack1即可在deleteHead出队操作时我们需要先判断 Stack2 是否为空若不为空则直接从 Stack2 出栈若为空我们就需要将 Stack1 中的所有元素出栈再将元素入栈到 Stack2 中。然后从Stack2出栈即可。当两个栈都为空时就代表队列已经为空返回 -1。 代码实现
class CQueue {StackInteger stack1;StackInteger stack2;public CQueue() {stack1 new Stack();stack2 new Stack();}public void appendTail(int value) {stack1.push(value);}public int deleteHead() {if(!stack2.isEmpty()){return stack2.pop();}if(!stack1.isEmpty()){while(!stack1.isEmpty()){stack2.push(stack1.pop());}return stack2.pop();}return -1;
}
}
测试结果