来年做哪个网站能致富网络基础知识
来年做哪个网站能致富,网络基础知识,wordpress游客评论,网站建设卩金手指科杰题目描述
请你仅使用两个队列实现一个后入先出#xff08;LIFO#xff09;的栈#xff0c;并支持普通栈的全部四种操作#xff08;push、top、pop 和 empty#xff09;。实现 MyStack 类#xff1a;
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素…题目描述
请你仅使用两个队列实现一个后入先出LIFO的栈并支持普通栈的全部四种操作push、top、pop 和 empty。实现 MyStack 类
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的返回 true 否则返回 false 。注意
你只能使用队列的标准操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
你所使用的语言也许不支持队列。 你可以使用 list 列表或者 deque双端队列来模拟一个队列 , 只要是标准的队列操作即可。示例输入
[MyStack, push, push, top, pop, empty]
[[], [1], [2], [], [], []]
输出
[null, null, null, 2, 2, false]解释
MyStack myStack new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False思路
用单个队列实现了栈的行为。栈是一种后入先出LIFO的数据结构通常支持 push、pop、top 和 empty 操作。在这个实现中通过对队列的操作模拟了栈的行为。
类定义和构造函数
class MyStack {
public:std::queueint que;MyStack() {}MyStack 类中定义了一个公有成员 que类型为 std::queue用于存储栈中的元素。 构造函数 MyStack() 是一个空构造函数不进行任何操作。队列 que 的初始化由其默认构造函数处理。
push() void push(int x) {que.push(x);}push(int x) 方法直接将元素 x 加入队列的尾部。在栈的行为中这将是最后一个被弹出的元素符合后入先出的特性。
pop() int pop() {for(int i 0; i que.size() - 1; i){que.push(que.front());que.pop();}int result que.front();que.pop();return result;}pop() 方法移除并返回栈顶元素。为了达到这个目的首先将队列前面的元素除最后一个元素外依次出队并重新入队到队列尾部。这样原本的最后一个元素栈顶元素就移到了队列的前端可以通过 que.pop() 直接移除并返回。 循环 for(int i 0; i que.size() - 1; i) 确保除了最后一个元素其他所有元素都被重新排列。
top() int top() {return que.back();}top() 方法返回栈顶元素的值但不移除它。由于队列的 back() 方法可以直接访问队尾元素这里的队尾元素正是最后入栈的元素因此可以直接返回。
empty() bool empty() {return que.empty();}empty() 方法检查栈队列是否为空。如果队列为空则栈也为空返回 true否则返回 false。
完整代码
#includestack
#includequeue
#includeiostreamclass MyStack {
public:std::queueint que;MyStack() {}void push(int x) {que.push(x);}int pop() {for(int i 0; i que.size() - 1; i){que.push(que.front());que.pop();}int result que.front();que.pop();return result;}int top() {return que.back();}bool empty() {return que.empty();}
};int main() {MyStack myStack;myStack.push(1);myStack.push(2);std::cout Top: myStack.top() std::endl; // 返回 2std::cout Pop: myStack.pop() std::endl; // 返回 2std::cout Empty: (myStack.empty() ? true : false) std::endl; // 返回 falsereturn 0;
}时间复杂度: pop为O(n)其他为O(1) 空间复杂度: O(n)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88550.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!