zoukankan      html  css  js  c++  java
  • 数据结构java学习(三)循环队列

    @


    和栈一样,队列也是表,但是使用队列的特点是先进先出。

    队列模型

    $color{black}{队列的基本操作是入队,它是在表的末端插入一个元素,和出队,它是删除在表开头的一个元素}$

    graph LR A[<kbd>入队</kbd>] --> b[队列] b[队列] --> c[<kbd>出队</kbd>]

    队列的循环数组实现

    • 实现队列的类
    import java.util.Arrays;
    
    /**
     * @author 李正阳
     * @param <E> 泛型存储类型
     */
    public class MyArrayQueue<E> implements queue<E> {
        /**
         * @param rear 队尾
         * @param front 队头
         * @param size 数组中现在有多少个元素
         * @param MAX_CAPATIAL 数组的总大小
         * @param array 存储元素的数组
         */
        private int rear;
        private int front;
        private int size;
        private final int MAX_CAPATIAL=10;
        private Object[] array;
    
        /**
         * 构造方法 初始化数组和相关的值
         */
        public MyArrayQueue(){
            array=new Object[MAX_CAPATIAL];
           rear=0;
           front=0;
           size=0;
        }
    
        /**
         * 入队方法
         * 先给size遍历加一,如果队列满了,就给size变量减一
         * 若队列未满就给队尾加一赋值
         * @param p 需要入队的元素
         * @return  true 成功入队 false 入队失败
         */
        @Override
        public boolean push(Object p) {
            size++;
            if(isFull()){
                System.out.println("队列满了");
                size--;
                return false;
            }else{
                if(rear>=MAX_CAPATIAL){
                    rear=0;
                    array[rear++]=p;
                }else{
                    array[rear++]=p;
                }
            }
            return true;
        }
    
        /**
         * 出队方法
         * 先判空再出队
         * @return 出队的泛型类型的元素
         */
        @Override
        public E pop() {
            size--;
            E temp=(E) array[front];
            if(isEmpty()){
                System.out.println("队列为空");
            }else{
                front++;
                if(front>MAX_CAPATIAL){
                    front=0;
                }
            }
            return temp;
        }
    
        /**
         * 表的长度
         * @return 表中有多少哥元素
         */
        @Override
        public int size() {
            return size;
        }
    
        /**
         * 从表头到表尾输出表中的元素
         */
        @Override
        public void travel() {
            int i=front;
    
            while (true){
                System.out.print(array[i++]+" ");
                if(i==MAX_CAPATIAL){
                    i=0;
                }
                if(i==rear){
                    break;
                }
            }
            System.out.println();
        }
    
        /**
         * 判断表是否为空
         * @return true 表为空 false 表不为空
         */
        @Override
        public boolean isEmpty() {
            if(size==0){
    
                return true;
            }else{
                return false;
            }
        }
    
        /**
         * @return 返回队尾元素
         */
        @Override
        public E getRear() {
            return (E) array[rear];
        }
        /**
         * @return 返回队头元素
         */
        @Override
        public E getFront() {
            return (E)array[front];
        }
    
        /**
         * 判断表是否满了
         * @return true 队列满了 false 队列未满
         */
        private boolean isFull(){
            if(size>MAX_CAPATIAL){
                return true;
            }else{
                return false;
            }
        }
    
    }
    
    
    
    • 实现接口文件
    /**
     * 队列的接口
     * @param <E> 泛型类型
     */
    public interface queue<E> {
         /**
          * 入队方法
          * @param p
          * @return
          */
         boolean push(E p);
    
         /**
          * 出队方法
          * @return 返回泛型类型的方法
          */
         E pop();
    
         /**
          * 表中元素的大小
          * @return
          */
         int size();
    
         /**
          * 输出表中元素
          */
         void travel();
    
         /**
          * 判断表是否为空的
          * @return true 表是空的 false 表是非空
          */
         boolean isEmpty();
    
         /**
          * 获取表尾元素
          * @return 表尾的元素
          */
         E getRear();
    
         /**
          * 获取表头的元素
          * @return 表头的元素
          */
         E getFront();
    }
    

  • 相关阅读:
    java 多线程
    构造N位格雷码(递归,面向对象)
    字典树trie
    快速排序
    C++ 链表
    15-谜问题(深拷贝、LC检索、面向对象编程)
    [编程题] 扫描透镜(本题还涉及如何从字符串中提取数字)
    python爬虫提取冰与火之歌五季的种子
    带有限期和效益的单位时间的作业排序贪心算法
    0/1背包问题与动态规划
  • 原文地址:https://www.cnblogs.com/lzy321/p/10799975.html
Copyright © 2011-2022 走看看