一颗旋转的螺丝钉

楠竹三年只培根 一朝飞跃莫等闲

栈和队列

栈和队列算法总结

1. 求栈中最小元素,要求o(1)时间复杂度

package yanyingnan.baodian.stack_queue;

import java.util.Stack;
/*o(1)时间复杂度  求栈中最小元素*/
public class Mystack {  
    Stack<Integer> elem;
    Stack<Integer> min;//用两个栈存储,第一个栈正常存元素,第二个栈存当前元素最小值
    public Mystack(){
        elem = new Stack<Integer>();
        min = new Stack<Integer>();
    }
    public void push(int data){
        elem.push(data);
        if(min.isEmpty())
            min.push(data);
        else{
            if(data<min.peek())
                min.push(data);
        }
    }
    public int pop(){
        int top = elem.pop();
        //elem.pop();
        if(top == this.min())
            min.pop();
        return top;
    }
    public int min(){
        if(min.isEmpty())
            return Integer.MAX_VALUE;
        else
            return min.peek();
    }
}

2. 两个栈模拟队列

package yanyingnan.baodian.stack_queue;

import java.util.Stack;

/*两个栈模拟队列*/
public class StackToQueue {
    Stack<Integer> s1 = new Stack<Integer>();
    Stack<Integer> s2 = new Stack<Integer>();

    public void push(int node) {//模拟进队列
        s1.push(node);
    }

    public int pop() {          //模拟出队列
        while(!s2.empty()){     //这个算法的精髓实际上就在这个while  stack继承vector isEmpty()是vector中的方法  也可以用
            return s2.pop();
        }
        while(!s1.empty()){
            s2.push(s1.pop());
        }
        return s2.pop();
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yanyingnan1357/article/details/80336702
文章标签: 数据结构 队列
想对作者说点什么? 我来说一句

数据结构系列之栈和队列

2008年10月22日 649KB 下载

没有更多推荐了,返回首页

不良信息举报

栈和队列

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭