美文网首页
栈和队列的相互转化

栈和队列的相互转化

作者: Frank_8942 | 来源:发表于2019-01-24 13:16 被阅读12次
//队列转栈
import java.util.LinkedList;
import java.util.Queue;
 
public class Queue_To_Stack {
    private static Queue<Integer> data ;  //原本的数据队列
    private static Queue<Integer> help ;    // 辅助队列
    
    public static void setStack(){  //定义一个栈
        data = new LinkedList<>();
        help = new LinkedList<>();
    }
    public static void push(int num){   //压入栈
        data.add(num);    
    }
    public static Integer pop(){    //出栈
        if(data.isEmpty()){
            throw new IllegalArgumentException("栈为空!") ;
        }
        while(data.size() > 1){   //全部出队列,直到最后一个
            help.add(data.poll()) ;
        }
        int res = data.poll();  //得到最后一个
        swpe();  // help  和   data交换
        return res ;
    }
    
    public static Integer peek(){   //栈顶元素
        if(data.isEmpty()){
            throw new IllegalArgumentException("栈为空!") ;
        }
        while(data.size() > 1){
            help.add(data.poll()) ;
        }
        int res = data.poll();
        data.add(res) ;
        swpe();
        return res ;
    }
    
    public static void swpe(){
        Queue<Integer> tmp = help;
        help = data;
        data = tmp;
    }
    public static void main(String[] args) {
        setStack();
        push(2);
        push(44);
        push(11);
        push(266);
        push(277);
        push(200);
        System.out.println(pop());
        System.out.println(peek());
    }
 
}


//栈转队列
import java.util.Stack;
 
public class Stack_To_Queue {
    private static  Stack<Integer> data;
    private static Stack<Integer> help ;
    
    public static void setQueue(){
        data = new Stack<>();
        help = new Stack<>();
    }
    public static void add(int num){
        data.push(num) ;
    }
    public static Integer poll(){
        if(data.isEmpty() && help.isEmpty()){
            throw new RuntimeException("队列为空!") ;
        }else{
            while(data.size()>0){
                help.push(data.pop()) ;
            }
            int res = help.pop();
            while(!help.isEmpty()){
                data.push(help.pop()) ;
            }
            return res ;
        }
    }
    public static Integer peek(){
        if(data.isEmpty() && help.isEmpty()){
            throw new RuntimeException("队列为空!") ;
        }else{
            while(data.size()>0){
                help.push(data.pop()) ;
            }
            int res = help.peek();
            while(!help.isEmpty()){
                data.push(help.pop()) ;
            }
            return res ;
        }
    }
    public static void main(String[] args) {
        setQueue();
        add(1);
        add(2);
        add(3);
        add(4);
        add(5);
        System.out.println(poll());
        System.out.println(poll());
        System.out.println(poll());
        System.out.println(poll());
        System.out.println(poll());
    }
}

相关文章

  • 队列和栈的相互转化

    1. 用两个栈实现一个队列 实现代码: 2. 用两个队列实现一个栈 因为push的时候是往任意一个不为空的栈里添加...

  • 栈和队列的相互转化

  • Swift 队列&栈 相关操作

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

  • 栈和队列也是可以相互转化的

    今天刷 leetcode 刷到 题号:232 用栈实现队列 Implement Queue using Stac...

  • 队列、栈转化

    [TOC] 232. 用栈实现队列[https://leetcode-cn.com/problems/implem...

  • 栈和队列的相互实现

    前言 栈和队列作为两种典型的线性表,有着非常鲜明甚至可以说是相互对立的特点;栈先进后出(后进先出),队列先进先出(...

  • 栈和队列的相互实现

    两个栈实现队列: 一个栈用来入,一个栈用来出 两个队列实现栈: 入栈的时候正常存入一个队列,出栈的时候用另一个队列...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 栈和队列

    用栈定义队列(出入栈) 用队列定义栈(数据队列和辅助队列)

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

网友评论

      本文标题:栈和队列的相互转化

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