2.栈相关操作

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();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、栈 1.1 栈的实现 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。java没有栈这样的数据结...
    yjaal阅读 1,476评论 0 1
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 3,394评论 0 19
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 栈与列队 栈是限定仅在表尾进行插入和删除操作的线性表 队列是只允许在一端进行插入操作、而在另一端进行删除操作的线性...
    Longshihua阅读 1,168评论 0 3
  • 国内的电影«我不是药神»很火爆,无独有偶,最近浙江华海药业制造的一款降压药,在芬兰也很火,它主要成分是缬沙坦(va...
    Inni钱阅读 386评论 0 0