zoukankan      html  css  js  c++  java
  • 循环队列(Java实现)

            循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。队列可以更简单防止伪溢出的发生,但队列大小是固定的。循环队列的使用分两种情况:

            1、牺牲一个存储单元,因为队空时,有front=rear,而当队满时,也是front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件是front=rear,而队列判满的条件是front=(rear+1)%MaxSize。Java实现代码如下:

                   public class CircularQueue {
                           private int MaxSize; //队列的容量
                           private int[] arr; //队列的存储结构(用一维数组作为队列的存储结构)
                           private int front;//队头指针
                           private int rear;//队尾指针
                        

                    public CircularQueue(int MaxSize) { //构造一个队列时需要指定队列的容量
                          this.MaxSize = MaxSize;
                          arr = new int[MaxSize];
                          front = 0;
                          rear = 0;
                      }

                //判空
               public boolean isEmpty(){
                    return rear == front; //当队头指针赶上队尾指针时
             }

              //判满
             public boolean isFull(){
                    return (rear + 1) % MaxSize == front;
             }

            //入队
           public void addElement(int elem){
             try {
                  if(isFull()){
                      throw new Exception("队列已满!");
                }
              arr[rear] = elem; //将数据插入到rear所在的位置
              rear = (rear+1 ) % MaxSize;
            } catch (Exception e) {
                 e.printStackTrace();
           }
        }
          //出队方法
         public int removeElement(){
              int  varlue = 0; 

              try {
                   if(isEmpty()){
                          throw new Exception("队列已空!");
                  }
                  value = arr[front];
                  front = (front+1)%MaxSize;
           } catch (Exception e) {
                   e.printStackTrace();
           }
                  return value;
          }
    }

      

    2、不用牺牲存储单元,增加一个成员变量(如 count)记录入队元素的个数,当count=0时队列为空,当count=MaxSize时队列满;Java代码如下:

        public class CircularQueue {
                           private int MaxSize; //队列的容量
                           private int[] arr; //队列的存储结构(用一维数组作为队列的存储结构)
                           private int front;//队头指针
                           private int rear;//队尾指针
                           private int count; //记录入队元素的个数

                    public CircularQueue(int MaxSize) { //构造一个队列时需要指定队列的容量
                          this.MaxSize = MaxSize;
                          arr = new int[MaxSize];
                          front = 0;
                          rear = 0;

                          count = 0;
                      }

                //判空
               public boolean isEmpty(){
                    return count == 0;
             }

              //判满
             public boolean isFull(){
                    return  count == MaxSize;
             }

            //入队
           public void addElement(int elem){
             try {
                  if(isFull()){
                      throw new Exception("队列已满!");
                }
              arr[rear] = elem; //将数据插入到rear所在的位置
              rear = (rear+1 ) % MaxSize;

               count++;
            } catch (Exception e) {
                 e.printStackTrace();
           }
        }
          //出队方法
         public int removeElement(){
              int  varlue = 0; 

              try {
                   if(isEmpty()){
                          throw new Exception("队列已空!");
                  }
                  value = arr[front];
                  front = (front+1)%MaxSize;

                  count--;
           } catch (Exception e) {
                   e.printStackTrace();
           }
                  return value;
          }
    }

  • 相关阅读:
    Mysql查询正在运行的事务
    linux SVN添加新用户
    linux下安装php扩展amqp
    解决apache启动错误:Could not reliably determine the server's fully qualified domain name
    linux系统安装redis服务器与php redis扩展
    navicat导出数据库字典
    centos安装GD库失败
    Mysql实现主从同步
    计算机的本质
    windows下nginx访问web目录提示403 Forbidden
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/12313360.html
Copyright © 2011-2022 走看看