zoukankan      html  css  js  c++  java
  • 数据结构与算法(Java版)_03_队列

    队列

    队列是一个有序列表,可以用数组或者链表来实现。

    队列遵循先进先出的原则,即先存入队列的数据先被取出。

    代码实现:

    package dataStructureAtShangGuiGu;
    
    import java.util.Scanner;
    
    public class QueueDemo {
        public static void main(String[] args) {
            QueueTest queue = new QueueTest(3);
            Scanner scanner = new Scanner(System.in);
            boolean loop = true;
            while(loop) {
                sopInfo();
                char ch = scanner.next().charAt(0);
                switch(ch){
                    case 'a':
                        System.out.println("请输入:");
                        queue.add(scanner.nextInt());
                        break;
                    case 'g':
                        queue.get();
                        break;
                    case 'h':
                        queue.showHead();
                        break;
                    case 's':
                        queue.show();
                        break;
                    case 'e':
                        loop = false;
                        scanner.close();
                        break;
                        
                }
            }
        }
        private static void sopInfo() {
            System.out.println("--------------------------");
            System.out.println("a(add)添加元素");
            System.out.println("g(get)获取元素");
            System.out.println("h(head)查看第一个元素");
            System.out.println("s(show)查看所有元素");
            System.out.println("e(exit)退出");
            System.out.println("--------------------------");
        }
    }
    class QueueTest{
        private int maxSize; //队列最大容量
        private int front; //队列头部指针
        private int rear;  //队列尾部指针
        private int[] arr; //作为队列存储容器
        QueueTest(int maxSize){ //初始化队列
            this.maxSize = maxSize;
            this.front = -1;
            this.rear = -1;
            this.arr = new int[maxSize];
        }
        private boolean isEmpty() { //判断队列是否需为空
            if(this.front==this.rear) return true;
            return false;
        }
        private boolean isFull() { //判断队列是否满了
            if(this.rear==(this.maxSize-1)) return true;
            return false;
        }
        public void add(int num) { //向队列添加数据
            if(this.isFull()) {
                System.out.println("队列已满,无法追加数据!");
                return;
            }
            this.rear++;
            this.arr[this.rear] =  num;
        }
        public void get() { //从队列获取一个数据
            if(this.isEmpty()) {
                System.out.println("队列为空!没有数据可以获取!");
                return;
            }
            this.front++;
            System.out.println("取出的元素是:"+arr[this.front]);
        }
        public void show() { //查看模拟队列容器情况
            for(int i=0;i<arr.length;i++) {
                System.out.printf("arr[%d]=%d
    ",i,this.arr[i]);
            }
        }
        public void showHead() { //查看队列第一个元素
            if(this.isEmpty()) {
                System.out.println("队列为空!无法查看队列第一个元素!");
                return;
            }
            System.out.println("第一个元素是:"+this.arr[this.front+1]);
        }
    }

    运行测试:

    先添加元素,然后查看第一个元素

     依次取一个元素,然后查看头元素

    将队列元素取尽: 

     取尽元素后再添加:

     数据已经取完了,但是发现添加不了数据,因为指针rear已经到达队列后面了!

  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/wmskywm/p/15422736.html
Copyright © 2011-2022 走看看