码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构:循环队列及其基本操作的实现

时间:2020-01-10 12:31:58      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:数据   switch   队列   als   private   printf   com   row   circle   



/**
* 循环队列
* 队列设置first指针直接指向队列头部元素,tail尾指针指向队列最后一个元素的后一个,即队列中总是预留一个空位
*/ class CircleQueue implements Queue<Integer>{ private Integer[] queueArray = null; private int first; private int tail; private int maxSize; public CircleQueue(int max){ this.maxSize=max+1; this.queueArray = new Integer[maxSize]; } @Override public int size() { return (tail-first+maxSize)%maxSize; } @Override public boolean isEmpty() { return tail==first; } @Override public boolean contains(Object o) { Integer integer = (Integer)o; for (int i = first; i!=tail; i++) { if (i==queueArray.length){ i=0; } if (integer.equals(queueArray[i])){ return true; } } return false; } @Override public Iterator<Integer> iterator() { return new Iterator<Integer>() { int temFirst = first; @Override public boolean hasNext() { return tail!=temFirst; } @Override public Integer next() { int num = queueArray[temFirst]; temFirst = (temFirst+1)%maxSize; return num; } }; } @Override public boolean add(Integer integer) { if ((tail+1)%maxSize==first){ System.out.println("队列已满,无法添加"); return false; } queueArray[tail]=integer; tail = (tail+1)%maxSize; return true; } @Override public Integer poll() { if(isEmpty()){ throw new RuntimeException("队列为空"); } int result = queueArray[first]; first = (first+1)%maxSize; return first; } @Override public Integer peek() { return queueArray[first]; } }


    public static void main(String[] args) {
        CircleQueue circleQueue = new CircleQueue(5);

        Scanner scanner = new Scanner(System.in);

        while (true){
            System.out.println("1:添加元素");
            System.out.println("2:取出元素");
            System.out.println("3:查看头元素");
            System.out.println("4:遍历队列");
            System.out.println("5:查看元素数量");
            System.out.println("6:是否为空");
            int commend = scanner.nextInt();
            switch (commend){
                case 1:{
                    System.out.println("请输出一个元素");
                    int num = scanner.nextInt();
                    circleQueue.add(num);
                    break;
                }
                case 2:{
                    System.out.println(circleQueue.poll());
                    break;
                }
                case 3:{
                    System.out.println(circleQueue.peek());break;

                }
                case 4:{
                    for (Integer integer : circleQueue) {
                        System.out.printf("%d\t",integer);
                    }
                    System.out.println();
                    break;
                }
                case 5:{
                    System.out.println(circleQueue.size());break;

                }
                case 6:{
                    System.out.println(circleQueue.isEmpty());
                    break;
                }
            }
        }

    }

 

 
 

数据结构:循环队列及其基本操作的实现

标签:数据   switch   队列   als   private   printf   com   row   circle   

原文地址:https://www.cnblogs.com/xxfxxf/p/12175416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!