美文网首页
栈(使用场景及 2 个栈实现队列)

栈(使用场景及 2 个栈实现队列)

作者: Cloud_9527 | 来源:发表于2019-05-20 16:08 被阅读0次

    栈的定义

    说起栈可以先想象一下手枪的弹夹,最后一个填入的子弹,第一个射出去,这就是一个典型的栈。


    image.png

    栈是一种后进先出的数据结构,它是限定仅在表尾进行插入和删除操作的线性表
    我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。
    栈的插入操作,叫做进栈,也称压栈、入栈。就像子弹填入弹夹。
    栈的删除操作,叫做出栈,也有叫做弹栈。就像弹夹中的子弹出夹。

    栈的使用场景

    在Android中一个众所周知的使用场景就是Activity任务栈,每当我们打一个Activity的时候就会往Activity栈中压入一个Activity,每当我们销毁一个Activity的时候会从Activity的任务栈中弹出一个Activity。具体见下图


    image.png

    两个栈实现一个队列

    public class StackTest {
    
        static Stack<Integer> s1 = new Stack<>();
        static Stack<Integer> s2 = new Stack<>();
    
        public void push(int node) {
            s1.push(node);
        }
    
        public int pop() throws Exception {
            if (s2.size() <= 0) {
                while (s1.size() > 0) {
                    s2.push(s1.pop());
                }
            }
            if (s2.isEmpty()) {
                throw new Exception("stack is empty!");
            }
            return s2.pop();
        }
        
        public static void main(String[] args) {
            StackTest stackTest = new StackTest();
            stackTest.push(1);
            stackTest.push(2);
            stackTest.push(3);
            
            for (Integer integer : s1) {
                System.out.println(integer);
            }
            
            try {
                System.out.println(stackTest.pop()+"");
                stackTest.push(4);
                System.out.println(stackTest.pop()+"");
                stackTest.push(5);
                System.out.println(stackTest.pop()+"");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    

    相关文章

      网友评论

          本文标题:栈(使用场景及 2 个栈实现队列)

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