2.栈相关操作

作者: 写代码的向日葵 | 来源:发表于2019-09-24 21:19 被阅读0次

1.通过两个栈来实现一个队列


import java.util.Stack;

/**
 * 通过两个栈来实现一个队列
 */
public class QueueWithStack {
    private Stack stack1=new Stack();
    private Stack stack2=new Stack();

    public void  add(Object obj)
    {
        stack1.push(obj);
    }

    public Object pop()
    {
        if (!stack2.isEmpty())
        {
            return stack2.pop();
        }
        if (stack1.isEmpty())
        {
            throw new RuntimeException("队列为空");
        }
        while (!stack1.isEmpty())
        {
            stack2.push(stack1.pop());
        }
        return stack2.pop();
    }

}

2.设计含有最小函数min()的栈,要求min,push,pop,的时间复杂度都为o(1),min方法的作用是返回栈中的最小值

import java.util.Stack;
/**
 * 设计含有最小函数min()的栈,要求min,push,pop,的时间复杂度都为o(1)
 * min方法的作用是返回栈中的最小值
 */
public class MinStack
{
    private Stack<Integer> stack1=new Stack<Integer>();
    private Stack<Integer> minStak=new Stack<Integer>();
    /**
     * 添加数据,首先是往Stac栈中添加
     * 如果最小栈minStack为空,或者栈顶的元素比新添加的元素要大,则将新元素也添加到最小栈中
     * @param value
     */
    public void push(int value)
    {
        stack1.push(value);
        if (minStak.isEmpty()||(minStak.peek()>value))
        {
            minStak.push(value);
        }
    }
    /**
     * 如果Stack为空,直接返回
     * 如果Stack不为空,得到栈顶元素,同时将栈顶元素弹出
     * 如果最小的栈顶元素与Stack弹出的元素相等,那么最小栈也要弹出
     */
    public void pop()
    {
        if (stack1.isEmpty())
        {
            return ;
        }
        Integer peek = stack1.peek();
        stack1.pop();
        if (minStak.peek()==peek)
        {
            minStak.pop();
        }
    }
    /**
     * 查找栈的最小元素
     * @return
     */
    public int min()
    {
        return minStak.pop();
    }
}

相关文章

  • 2.栈相关操作

    1.通过两个栈来实现一个队列 2.设计含有最小函数min()的栈,要求min,push,pop,的时间复杂度都为o...

  • 数据结构-栈

    栈的特点 先进后出 栈的相关操作都是通过栈顶位置进行相关操作的 栈的接口抽象 栈可以通过线性表直接实现(链表、数组...

  • 5.栈Stack

    目录:1.栈的定义2.栈的图解3.栈定义操作4.栈的实现 1. 栈的定义 2. 栈的图解 3. "栈"定义的操作 ...

  • JVM指令集

    操作数栈(operand stack)相关 本地变量表(local variable table)到操作数栈(op...

  • 数据结构实验1.4:栈和队列

    实验内容 : 1.采用链式存储实现栈的初始化、入栈、出栈操作。2.采用顺序存储实现栈的初始化、入栈、出栈操作。3....

  • 07数据结构之栈

    1.理解栈(什么是栈?) 后进者先出,先进者后出,这就是典型的栈结构。2.从栈的操作特性来看,栈是一种“操作受限”...

  • 3. 栈的操作

    1. 栈的操作-c语言实现2. 栈操作的实现-顺序栈和链栈 3. 栈的实现与遍历4. c语言的函数调用栈5. 两个...

  • Swift 队列&栈 相关操作

    栈 LIFO(后进先出) 队列 FIFO(先进先出) 队列与栈相互的实现 栈 - 队列实现 队列 - 栈实现 相关...

  • 如何用栈实现队列

    1.简知 栈:先入后出,队列:先进先出 2.解题思路 1.使用两个栈,假设为栈A和栈B;2.有入栈操作时,让元素入...

  • 算法-栈(如何实现浏览器的前进后退功能)

    一、什么是栈? 1.后进者先出,先进者后出,这就是典型的“栈”结构。 2.从栈的操作特性来看,是一种“操作受限”的...

网友评论

    本文标题:2.栈相关操作

    本文链接:https://www.haomeiwen.com/subject/jtptyctx.html