【LeetCode】21.栈和队列(242)

目录

  • 0.题目描述
  • 1.题目分析
  • 2.补充:在python中实现栈


0.题目描述

使用栈实现队列的下列操作:

push(x) – 将一个元素放入队列的尾部。
pop() – 从队列首部移除元素。
peek() – 返回队列首部的元素。
empty() – 返回队列是否为空。
【LeetCode】21.栈和队列(242)_第1张图片

1.题目分析

首先说明一下栈的常用操作,C++里,如stack s 可以初始化一个栈:


s.empty();         //如果栈为空则返回true, 否则返回false;
s.size();          //返回栈中元素的个数
s.top();           //返回栈顶元素, 但不删除该元素
s.pop();           //弹出栈顶元素, 但不返回其值
s.push();          //将元素压入栈顶

注意队列的pop()是弹出元素且返回元素的值,但栈的不返回。
思路是用两个栈实现一个队列,将元素都push进栈1,然后把栈1的元素都从上到下push到栈2,这样栈2的元素顺序调了个个,就可以实现“先进先出了”。
代码如下:

class MyQueue {
public:
    /** Initialize your data structure here. */
    MyQueue() {
        
    }
    
    /** Push element x to the back of queue. */
    void push(int x) {
        stack1.push(x);
    }
    
    /** Removes the element from in front of queue and returns that element. */
    int pop() {
        if (stack2.empty())
        {
            while (!stack1.empty())
            {
                stack2.push(stack1.top());
                stack1.pop();
            }
        }
        int temp=stack2.top();
        stack2.pop();
        return temp;
    }
    
    /** Get the front element. */
    int peek() {
        if (stack2.empty())
        {
            while (!stack1.empty())
            {
                stack2.push(stack1.top());
                stack1.pop();
            }
        }
        int temp=stack2.top();
        return temp;
        
    }
    
    /** Returns whether the queue is empty. */
    bool empty() {
        if(stack1.empty() && stack2.empty())
            return true;
        else
            return false;
            
        
    }
private:
    stack<int> stack1;
    stack<int> stack2;
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */

2.补充:在python中实现栈

class Stack(object):
    # 初始化栈为空列表
    def __init__(self):
        self.items = []

    # 判断栈是否为空,返回布尔值
    def is_empty(self):
		return  len(self.items)==0
		
    # 返回栈顶元素
    def peek(self):
		return self.items[-1]
    # 返回栈的大小
    def size(self):
		return len(self.items)
    # 把新的元素堆进栈里面
    def push(self, item):
		self.items.append(item)
    # 把栈顶元素丢出去
    def pop(self, item):
		return	self.items.pop()


你可能感兴趣的:(C++,python,LeetCode)