zoukankan      html  css  js  c++  java
  • 环形队列 数组实现 介绍与实现

    环形队列可以使用数组实现,也可以使用循环链表实现。

    package jiegou;
    
    import jdk.internal.org.objectweb.asm.tree.analysis.Value;
    
    import java.time.temporal.ValueRange;
    import java.util.Scanner;
    
    public class ArrayQueue {
        public static void main(String[] args) {
    
            Queue queue = new Queue(4);
            char key = ' ';// 接受用户输入
            Scanner scanner = new Scanner(System.in);
            boolean loop = true;
    
            while (loop) {
                System.out.println("s(show):显示队列");
                System.out.println("e(exit):退出程序");
                System.out.println("a(add):添加数据到队列");
                System.out.println("g(get):从队列取出数据");
                System.out.println("h(head):查看队列头数据");
                System.out.println("r(rear):查看队列尾数据");
                System.out.println("n(number):查看队列数据大小");
    
                key = scanner.next().charAt(0);// 接受一个字符
                switch (key) {
                    case 's':
                        queue.showQueue();
                        break;
                    case 'a':
                        System.out.println("输入一个数");
                        int value = scanner.nextInt();
                        queue.addQueue(value);
                        break;
                    case 'g':
                        try {
                            int res = queue.getQueue();
                            System.out.printf("取出的数据是%d
    ", res);
                            break;
    
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                        }
    
                    case 'h':
                        try {
                            int i = queue.headQueue();
                            System.out.printf("队列头的数据是%d
    ", i);
                            break;
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                        }
    
                    case 'e':
                        scanner.close();
                        loop = false;
                        break;
    
                    case 'r':
                        int rear = queue.rear();
                        System.out.printf("队尾数据%d
    ",rear);
                        break;
                    case 'n':
                        int n = queue.numbers();
                        System.out.printf("有效数据%d
    ",n);
                        break;
                }
            }
    
            System.out.println("程序退出");
        }
    }
    
    
    class Queue {
        private int usedSize; // 数组个数
        private int front; // 队列头
        private int rear; //队列尾巴
        private int[] elem;// 数据
    
        // 构造函数
        public Queue(int n) {
            this.usedSize = 0;
            this.elem = new int[n+1];//数据
            this.front = 0;// 指向队列头部
            this.rear = 0; // 指向队列尾部的下一个
        }
    
        public int numbers()
        {
            System.out.printf("有效数据%d
    ",this.usedSize);
            return this.usedSize;
        }
    
        // 队列是否满了
        public boolean isFull() {
            return (this.rear+1 )%this.elem.length == this.front;
        }
    
        // 队列是否为空
        public boolean isEmpty() {
            return this.rear == this.front;
        }
    
        // 添加数据到队列
        public void addQueue(int value) {
            if (isFull()) {
                System.out.println("队列满了 不能加入数据");
                return;
            }
    
            this.elem[this.rear] = value;
            this.usedSize++;
            this.rear = (this.rear+1)%this.elem.length;
            this.showQueue();
        }
    
        // 出队列
        public int getQueue() {
            if (isEmpty()) {
                System.out.println("队列为空 无数据");
                return -1;
            }
            int value = this.elem[this.front];
            this.front = (this.front+1)%this.elem.length;
            this.usedSize--;
            return value;
        }
    
        // 显示队列数据
        public void showQueue() {
            if (isEmpty()) {
                System.out.println("空队列 无数据");
                return;
            }
            this.headQueue();
            this.numbers();
            for (int i = 0; i < this.elem.length; i++) {
                System.out.printf("arr[%d]=%d
    ", i, this.elem[i]);
            }
        }
    
        // 显示队列头 不取数据
        public int headQueue() {
            if (isEmpty()) {
                //throw new RuntimeException("队列空 没有数据");
                System.out.println("队列为空 无数据");
            }
            // 队里尾部
            //int index = this.rear == 0 ? this.elem.length-1:this.rear-1;
            System.out.printf("队列头索引尾%d
    ",this.front);
            int index = this.rear == 0 ? this.elem.length-1:this.rear-1;
            System.out.printf("队尾索引尾%d
    ",index);
            return this.elem[this.front];
        }
    
        public int rear() {
            if (isEmpty()) {
                //throw new RuntimeException("队列空 没有数据");
                System.out.println("队列为空 无数据");
            }
            // 队里尾部
            int index = this.rear == 0 ? this.elem.length-1:this.rear-1;
            System.out.printf("队尾索引尾%d
    ",index);
            return this.elem[index];
        }
    }
    
    
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    a
    输入一个数
    1
    队列头索引尾0
    队尾索引尾0
    arr[0]=1
    arr[1]=0
    arr[2]=0
    arr[3]=0
    arr[4]=0
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    a
    输入一个数
    2
    队列头索引尾0
    队尾索引尾1
    arr[0]=1
    arr[1]=2
    arr[2]=0
    arr[3]=0
    arr[4]=0
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    a
    输入一个数
    3
    队列头索引尾0
    队尾索引尾2
    arr[0]=1
    arr[1]=2
    arr[2]=3
    arr[3]=0
    arr[4]=0
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    a
    输入一个数
    4
    队列头索引尾0
    队尾索引尾3
    arr[0]=1
    arr[1]=2
    arr[2]=3
    arr[3]=4
    arr[4]=0
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    a
    输入一个数
    5
    队列满了 不能加入数据
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    g
    取出的数据是1
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    a
    输入一个数
    6
    队列头索引尾1
    队尾索引尾4
    arr[0]=1
    arr[1]=2
    arr[2]=3
    arr[3]=4
    arr[4]=6
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    g
    取出的数据是2
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    g
    取出的数据是3
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    g
    取出的数据是4
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    g
    取出的数据是6
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    s
    空队列 无数据
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    a
    输入一个数
    7
    队列头索引尾0
    队尾索引尾0
    arr[0]=7
    arr[1]=2
    arr[2]=3
    arr[3]=4
    arr[4]=6
    s(show):显示队列
    e(exit):退出程序
    a(add):添加数据到队列
    g(get):从队列取出数据
    h(head):查看队列头数据
    r(rear):查看队列尾数据
    n(number):查看队列数据大小
    
    
    
    package www.bittech;
    
    public class MyCircularQueue {
        private int front;//队列头
        private int rear;//队列尾
        private int usedSize;//数据个数
        private int[] elem;//数组
        public MyCircularQueue(int k){
            this.elem=new int[k];
            this.front=0;
            this.rear=0;
            this.usedSize=0;
        }
        public boolean enQueue(int value){
            if(isFull()){
                return false;
            }
            this.elem[this.rear]=value;
            this.usedSize++;
            this.rear=(this.rear+1)%this.elem.length;
            return true;
        }
        //队尾下标加上1在%
        public boolean isFull(){
            if((this.rear+1)%this.elem.length==this.front){
                return true;
            }
            return false;
        }
        public boolean isEmpty(){
            return this.rear==this.front;
        }
        public boolean deQueue(int value){
            if(isEmpty()){
                return false;
            }
            this.elem[front]=value;
            this.front=(this.front+1)%this.elem.length;
            this.usedSize--;
            return true;
        }
        public int Front(){
            if(isEmpty()){
                throw new UnsupportedOperationException("队列为空");
            }
            return this.elem[this.front];
        }
         public int Rear(){
             if(isEmpty()){
                 throw new UnsupportedOperationException("队列为空");
             }
             int index=this.rear == 0 ? this.elem.length-1 : this.rear-1;
             return this.elem[index];
         }
    
    }
    
    
    
  • 相关阅读:
    SharePoint Framework (SPFx) 开发入门教程
    SharePoint 2013 Designer 入门教程
    SharePoint 2013 开发教程
    SharePoint 2013 入门教程
    SharePoint Online 部署SPFx Web部件
    SharePoint Online SPFx Web部件绑定数据
    SharePoint Online 创建SPFx客户端Web部件
    SharePoint Online 配置框架(SPFx)开发环境
    SharePoint Online 创建应用程序目录
    SharePoint Online 启用 IRM
  • 原文地址:https://www.cnblogs.com/brady-wang/p/15140203.html
Copyright © 2011-2022 走看看