易妖游戏网
您的当前位置:首页堆和栈的相互实现

堆和栈的相互实现

来源:易妖游戏网

堆实现栈:堆是一种先进先出的结构而栈是一种后进先出的结构,在构造的过程中使用两个堆。一个堆用来存放数据,另外一个堆在取出数据的时候用来存放数据。

package lianxi03;

import java.util.LinkedList;
import java.util.Queue;

public class Code04_QueueToStack {
    public static void main(String[] args){
        QueueToStack s=new QueueToStack();
        s.add(1);
        s.add(2);
        System.out.println(s.peek());
        System.out.println(s.pop());
        System.out.println(s.pop());

    }
    public static class QueueToStack{
        private Queue<Integer> queue1;
        private Queue<Integer> queue2;
        public QueueToStack(){
            queue1=new LinkedList<>();
            queue2=new LinkedList<>();
        }
        public void add(int num){
            queue1.add(num);
        }
        public int pop(){
            if(queue1.isEmpty())
                throw new RuntimeException("The stack is empty");
            while(queue1.size()!=1)
                queue2.add(queue1.remove());
            int res=queue1.remove();
            swap();
            return res;
        }
        public int peek(){
            if(queue1.isEmpty())
                throw new RuntimeException("The stack is empty");
            while(queue1.size()!=1)
                queue2.add(queue1.remove());
            int res=queue1.remove();
            queue2.add(res);
            swap();
            return res;
        }
       public void swap(){
            Queue<Integer> tmp=queue1;
            queue1=queue2;
            queue2=tmp;
        }


    }
}
 

用两个栈来实现堆

package lianxi03;

import java.util.Stack;

public class Code05_StackToQueue {
    public static void main(String[] args) {
        StackToQueue s=new StackToQueue();
        s.add(1);
        s.add(2);
        s.add(3);
        System.out.println(s.peek());
        System.out.println(s.pop());

    }
    public static class StackToQueue{
        private Stack<Integer> stack;
        private Stack<Integer> help;
        public StackToQueue(){
            stack=new Stack<>();
            help=new Stack<>();
        }
        public void add(int num){
            stack.add(num);
        }
        public int pop(){
            if(help.isEmpty()&&stack.isEmpty())
                throw new RuntimeException("The queue is empty");
            if(help.isEmpty()){
                while (!stack.isEmpty()){
                    help.add(stack.pop());
                }
            }
            return help.pop();
        }//在进行弹出的时候判断一下help栈里面是否有元素,如果没有的话就将另一个栈中的元素给传递过去
        public int peek(){
            if(help.isEmpty()&&stack.isEmpty())
                throw new RuntimeException("The queue is empty");
            if(help.isEmpty()){
                while (!stack.isEmpty()){
                    help.add(stack.pop());
                }
            }
            return help.peek();
        }
    }
}

因篇幅问题不能全部显示,请点此查看更多更全内容