LeetCode-225.用队列实现栈

问题描述
简单而言,就是去实现栈,并实现出栈的四种操作:
	1.压栈
	2.移除并返回栈顶元素
	3.返回栈顶元素
	4.判断栈是否为空,为空则返回true,反之则返回false
详细题目
中文版题目:
    225. 用队列实现栈
    请你仅使用两个队列实现一个后入先出(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

    提示:

    1 <= x <= 9
    最多调用100 次 push、pop、top 和 empty
    每次调用 pop 和 top 都保证栈不为空


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



英文版题目:
    225. Implement Stack using Queues
    Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).

    Implement the MyStack class:

    void push(int x) Pushes element x to the top of the stack.
    int pop() Removes the element on the top of the stack and returns it.
    int top() Returns the element on the top of the stack.
    boolean empty() Returns true if the stack is empty, false otherwise.
    Notes:

    You must use only standard operations of a queue, which means that only push to back, peek/pop from front, size and is empty operations are valid.
    Depending on your language, the queue may not be supported natively. You may simulate a queue using a list or deque (double-ended queue) as long as you use only a queue's standard operations.


    Example 1:

    Input
    ["MyStack", "push", "push", "top", "pop", "empty"]
    [[], [1], [2], [], [], []]
    Output
    [null, null, null, 2, 2, false]

    Explanation
    MyStack myStack = new MyStack();
    myStack.push(1);
    myStack.push(2);
    myStack.top(); // return 2
    myStack.pop(); // return 2
    myStack.empty(); // return False


    Constraints:

    1 <= x <= 9
    At most 100 calls will be made to push, pop, top, and empty.
    All the calls to pop and top are valid.


    Follow-up: Can you implement the stack using only one queue?


中文版题目来源,如侵权删

英文版题目来源,如侵权删

解题思路
注意:
本题中的示例只是告知我们需要实现的功能大概是一个什么样的效果,我们不需要去想着接收以及处理输入的数据,再来进行后续的操作

本题不难,主要是要去实现一个栈

实现栈有两种方式:
1.数组
2.链表

以及需要知晓栈/队列的特点:
	栈:先进后出
	队列:先进先出
	
数组实现栈的大概思路:
“进栈”也就是依次像数组存入数据,“出栈”也就是从数组的末尾移除数据,这样也就保证了栈的先进后出的特点

1.void push(int x):
	进栈
	数组直接使用add()即可
	
2.int pop():
	出栈并返回栈顶元素
	先用变量记录栈顶元素,再数组直接使用remove(最后一个元素)即可,其中最后一个元素可以通过数组的size()-1来得到
	
3.int top():
	返回栈顶元素
	通过数组的get(数组.size()-1)来得到
	
4.boolean empty() 
    判断该栈是否为空
    可以直接使用数组的isEmpty()

代码实现
class MyStack {
    ArrayList<Integer> list1 = new ArrayList<>();

    public MyStack() {
       
    }
    
    public void push(int x) {
        list1.add(x);
    }
    
    public int pop() {
        int top =  list1.get(list1.size()-1);
        list1.remove(list1.size()-1);
        return top;
    }
    
    public int top() {
        int top =  list1.get(list1.size()-1);
        return top;
    }
    
    public boolean empty() {
        return list1.isEmpty();

    }
}

/**
 * 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();
 * boolean param_4 = obj.empty();
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值