[ 225. 用队列实现栈]

「这是我参与2022首次更文挑战的第39天,活动详情查看:2022首次更文挑战」。

题目描述

请你仅使用两个队列实现一个后入先出(LIFO)的elementui栈,并支持普通栈的全部四种操作(算法设计与分析push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈算法的五个特性顶。
int pop() 移除并返回栈顶元素。
int top()element翻译 返回栈顶元数据结构与算法素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

注意:

  • 你只能使用队列的基本操作 —— 也就是push to back、peek/pop from front、siz数据结构c语言版严蔚敏第二版答案e数据结构c语言版严蔚敏第二版答案 和is empty这些操作。
  • 你所使用的语言也许不支持队列。你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列, 只要是标准的队列操作即可。

示例

算法的五个特性例1 :

输入:
["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

提示:

  • 1 <= x <= 9
  • 最多调用 100 次 push、pop、peek 和 empty
    • 每次调用pop数据结构与算法top都保证算法栈不为空

进阶:
你能否仅用一个队列来实现栈。

思路

这道题考察的是对基本数据结构栈和队列的掌算法是指什么握程度,不涉及特定的算法。栈的特点是先进后出,队列的特点是先进先出。区别在于出的顺序不一样,为了实现改变出的顺序算法分析的目的是,与昨天类似,需要使用两个队列算法的特征,称为队列1和队列2,队列1进行操作数据结构有哪些,队列2进行元素的暂存。对于push操作,直elementary翻译接push到输入队列1中,pop操作和pelementary翻译eek操数据结构与算法作,需要将队列的数据(除了最后一个)全部数据结构实验报告转移到队列2中,符合栈的要求,在转移并输出完毕后,将数据放回队列1,empty操element是什么意思作则是需elementanimation要同时检查两个队列。其余细节见代码。

进阶提示我们有优化的空间,其实我们不算法的有穷性是指必开两个队列,一个就行,注意到,我们只需要先记录下数据的个数,将数据从头部搬到尾部,只剩下最后一数据结构c语言版第二版课后答案个数据不动,也可elementui以实现目的。

代码实现

两个队列:

class MyStack {
    private:
    queue<int> queue1;
    queue<int> queue2;
public:
    /** Initialize your data structure here. */
    MyStack() {
    }
    /** Push element x onto stack. */
    void push(int x) {
      queue1.push(x);
    }
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
     int time=queue1.size()-1;
     while(time--){   //转移到队列2保存
         queue2.push(queue1.front());
         queue1.pop();
     } 
     int resule=queue1.front();
     queue1.pop();      //记录
     queue1=queue2;     
     while(!queue2.empty())  //还原
     queue2.pop();
     return resule;
    }
    /** Get the top element. */
    int top() {
      return queue1.back();
    }
    /** Returns whether the stack is empty. */
    bool empty() {
return queue1.empty();
    }
};
/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

总结

简要的数据结构有哪些介绍了栈和队列数据结构实验报告两个基本的数据结构。