数据结构与算法(线性结构篇)-队列

一、  队列介绍

    队列遵循先入先出原则、可以用数组或者链表来模拟队列

二、 思路分析

      1、数组模拟队列思路分析

                设置队列头指针front 和尾指针rear;

                 a、判断队列是否为空  front == rear;

                 b、判断队列是否满了  rear<= maxSize;

                 c、 往队列中加元素addQueue rear++,添加数据前判断是否已经满了

                 d、 从队列中取数据getQueue  rear - -,取数据前判断队列是否为空

                 缺点:存在假溢出的情况,删除数据之后,但是不能添加数据

      2、数组模拟环形队列思路分析

                    front指向队列的第一个元素,rear指向元素后一个元素的下一位,约定空出一个元素。

                   a、判断队列是否为空     front == rear  为空

                   b、判断队列是否已经满了   (rear + 1) % maxSize == front

                   c、往队列中增加   rear = (rear+1)% maxSize

                   d、队列中有效数据  (rear + maxSize - front)% maxSize

三、 代码实现

      1、数组模拟单队列代码实现

package stack;/*
 *@Author:HQF
 *@create:2021/12/10 19:27
 *数组模拟队列
 */

public class arrayQueue {
    public static void main(String[] args) {

    }
    class Stack{
        private int rear  = -1;
        private int front = -1;
        private int maxSize;
        private int[] stack;

        public Stack(int front, int rear, int maxSize) {
            this.front = front;
            this.rear= rear;
            this.maxSize = maxSize;
            stack = new int[maxSize];
        }

        /**
         * 判断栈是否为空
         */
        public boolean isNull(Stack stack) {
            if (stack.rear == 0) {
                return true;
            }
            return false;
        }

        /**
         * 往栈中添加元素
         *
         */
        public void addElement(int number) {
            rear ++;
           stack[rear] = number;

        }
     
        /**
         * 取栈中元素
         */
         public int getElement() {
             if (isNull()){
                 throw new RuntimeException("队列空,不能取数据");
             }
             front ++;
             int  element = stack[front];
             return element;
         }

        /**
         * 删除栈中元素
         */
        public void delElement() {
           front++;
        }
    }
}

      2、数组模拟环形队列代码实现

package stack;/*
 *@Author:HQF
 *@create:2021/12/13 20:46
 */

public class ArrayRingList {
    public static void main(String[] args) {

    }
    class RingList{
          private int front = -1;
          private int rear = -1;
          private int maxSize;
          private int[] arr;

          public RingList(int front, int rear, int maxSize) {
              this.front = front;
              this.rear = rear;
              this.maxSize = maxSize;
              arr = new int[maxSize];
          }

        /**
         * 判断队列是否为空
         */
        public boolean isEmpty() {
            return rear == front;
        }

        /**
         * 判断队列是否已经满了
         */
        public boolean isFull() {
            return (rear + 1) % maxSize == front;
        }

        /**
         * 往循环队列添加元素
         */
        public void addElement(int element) {
            arr[(rear + 1) % maxSize] = element;
        }

        /**
         * 删除循环队列的元素
         *
         */
        public void delElement() {
            front = (front + 1) % maxSize;
        }

        /**
         * 查找循环队列头元素
         */
        public int getElemnet() {
           int number =  arr[rear];
           rear = (rear + 1) % maxSize;
           return number;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值