首页 > 其他分享 >用队列结构,实现栈结构。(有图)

用队列结构,实现栈结构。(有图)

时间:2022-11-04 00:11:52浏览次数:43  
标签:twoQueueStack queue2 有图 队列 元素 queue1 test public 结构

package class03;

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

/**
 * 用队列结构,实现栈结构
 */
public class Code07_TwoQueuesImplementStack {
    /**
     * 两个队列实现栈
     *
     * @param <T>
     */
    public static class TwoQueueStack<T> {
        public Queue<T> queue1;
        public Queue<T> queue2;

        public TwoQueueStack() {
            queue1 = new LinkedList<>();
            queue2 = new LinkedList<>();
        }

        //添加元素
        public void push(T value) {
            queue1.offer(value);//直接往queue1中添加元素
        }

        //弹出一个元素
        public T poll() {
            //保留queue1中最后一个元素,其余的元素全部弹出,放进queue2。
            while (queue1.size() > 1) {
                queue2.offer(queue1.poll());
            }
            T ans = queue1.poll();//将queue1中最后一个元素弹出
            Queue<T> temp = queue1;//queue1中的所有元素和queue2中的所有元素交换
            queue1 = queue2;
            queue2 = temp;
            return ans;//返回queue1中最后一个元素
        }

        //获取栈顶的值
        public T peek() {
            //保留queue1中最后一个元素,其余的元素全部弹出,放进queue2。
            while (queue1.size() > 1) {
                queue2.offer(queue1.poll());
            }
            T ans = queue1.poll();//将queue1中最后一个元素弹出
            queue2.offer(ans);//再将这个元素,放进queue2中
            //从queue1中弹出,再放进queue2中,就是为了不打乱"队形"。
            //"队形"就是:每次取值时,保留queue1中最后一个元素,其余的元素全部弹出,放进queue2。queue1和queue2交换。
            Queue<T> temp;//queue1中的所有元素和queue2中的所有元素交换
            temp = queue1;
            queue1 = queue2;
            queue2 = temp;
            return ans;//返回queue1中最后一个元素
        }

        public boolean isEmpty() {
            return queue1.isEmpty();
        }
    }

    public static void main(String[] args) {
        TwoQueueStack<Integer> twoQueueStack = new TwoQueueStack<>();
        Stack<Integer> test = new Stack<>();
        int testTimes = 1000;
        int maxValue = 100;
        System.out.println("test start!");
        for (int i = 0; i < testTimes; i++) {
            if (twoQueueStack.isEmpty()) {
                if (!test.isEmpty()) {
                    System.out.println("oops0!");
                    break;
                }
                int num = (int) (Math.random() * maxValue);
                twoQueueStack.push(num);
                test.push(num);
            } else {
                if (Math.random() < 0.25) {//四分之一概率比push方法
                    int num = (int) (Math.random() * maxValue);
                    twoQueueStack.push(num);
                    test.push(num);
                } else if (Math.random() < 0.5) {//四分之一概率比peek方法
                    if (!twoQueueStack.peek().equals(test.peek())) {
                        System.out.println("oops1!");
                    }
                } else if (Math.random() < 0.75) {//四分之一概率比poll方法
                    if (!twoQueueStack.poll().equals(test.pop())) {
                        System.out.println("oops2!");
                    }
                } else {//四分之一概率比isEmpty方法
                    if (twoQueueStack.isEmpty() != test.isEmpty()) {
                        System.out.println("oops4!");
                    }
                }
            }
        }
        System.out.println("test end!");
    }

}

 

标签:twoQueueStack,queue2,有图,队列,元素,queue1,test,public,结构
From: https://www.cnblogs.com/TheFloorIsNotTooHot/p/16856339.html

相关文章

  • 数据结构(一):(顺序表)设计算法删除所有数字字符
    好家伙,写作业 什么是顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性......
  • 数据结构专题总结
    打了一天的数据结构,感觉码力上升的很快,而且也学会了许多方法,但总体来说今天大部分的题很多都是看完题解以后才会的,无论怎么想也想不出来,还是要提高一下想题的能力,不要走神,......
  • 数据结构之线性表的顺序表示和实现1
    #defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintStatus;typedefcharElemType;//一些数据......
  • 数据结构 玩转数据结构 6-4 深入理解递归终止条件
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13456 1重点关注1.1代码草图   1.2二分搜索树添加元素代码简化......
  • 循环结构
    顺序结构1.java的基本结构就是顺序结构,除非特别指明,否则按照顺序一句一句执行2.顺序结构是最简单的算法结构3.语句与语句之间,框与框之间是按从上到下的顺序进行的,它是......
  • 【C语言数据结构】EP1顺序表
    1.什么是顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为静态表与动......
  • 【数据结构与算法】有向图的拓扑排序
    前言在现实生活中,我们经常会同一时间接到很多任务去完成,但是这些任务的完成是有先后次序的。以我们学习java学科为例,我们需要学习很多知识,但是这些知识在学习的过程中是需要......
  • 设计模式之结构型模式
    目录一、适配器模式二、装饰器模式三、代理模式四、外观模式五、享元模式六、桥接模式七、组合模式创建型模式(5个)工厂方法模式、抽象工厂模式、单例模式、建造者模式、原......
  • 软件设计__ 数据库逻辑结构设计
    难度:★★☆案例引入YourTour系统(旅游线路预定系统)YourTour是一个为旅行社和其目标顾客提供服务的系统。它能够将多个景点组成一条旅游线路,而且能够为所有参加线路的游......
  • C语言 结构体、联合、位段
    例如,有一些寄存器,寄存器有一些位,每个位都控制不同的设置,要是想单独设置某一个位的值,用位段就是一个比较好的方法,寄存器例子:  第一种方法:如果内存小的话可能造成堆栈......