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

    队列概念

      队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空队列”。

      队列具有先进先出(FIFO)的特性。

      普通顺序队列存在的问题

        在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位。出队时,则是头指针front后移一个单位。像这样进行了一定数量的入队和出队操作后,可能会出现这样的情况:

        尾指针rear已指到数组的最后有一个元素,即rear==MaxLen-1,此时若再数组的前面部分可能还有很多闲置空间,即这种溢出并非是真的没有可用的存储空间,故称这种溢出现象为“假溢出”。显然,必须要解决这一块假溢出的问题,否则顺序队列就没有太多使用价值。

      循环队列

        循环队列的存储结构,头、尾指针都和普通顺序队列相同。不同的只是将队列视为“环状结构”,即data[0]为紧接着data[MaxLen-1]的单元,为相邻的元素,首位成为一个环。结构如下:(来自:百科)

     

    代码实现

      全局变量:定义队列长度

      

    static int MaxLen;

      循环队列基本数据结构的实现:

    static class myQueue{
                int front;
                int rear;
                int queueList[];
                public myQueue() {
                    // TODO Auto-generated constructor stub    
                    queueList=new int[MaxLen];
                    front=0;
                    rear=0;
                }
    }

      判空函数

    public boolean isEmpty() {
                    if(front==rear){
                    return true;
                }
                    return false;
                }

      判满函数

    public boolean isFull(){
                    if(((rear+1)%MaxLen)==front){
                        return true;
                    }
                    else{
                        return false;
                    }
                }

     取队头元素

     

    public void queueFront(int getFront){
                    if(isEmpty()==false){
                        getFront=queueList[(front+1)%MaxLen];
                    }
                    else {
                        System.out.println("ERROR:Queue is Empty");
                        return;
                    }
                }

    入队

    public void enQueue(int enData) {
                    if(isFull()==false){
                        rear=(rear+1)%MaxLen;
                        this.queueList[rear]=enData;
                    }
                    else{
                        System.out.println("ERROR:Queue is Full");
                        return;
                    }
                    
                }

    出队

    public void outQueue() {
                    if(isEmpty()==false){
                        front=(front+1)%MaxLen;
                    }
                    else {
                        System.out.println("ERROR:Queue is Empty");
                        return;
                    }
                    
                }

    作者:Rekent
    出处:http://www.cnblogs.com/rekent/
    本文版权归作者和博客园共有,欢迎转载、点赞,但未经作者同意必须保留此段申明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    local 不能解析为127.0.0.1
    完全使用接口方式调用WCF 服务
    【人生】自己对于求职应聘的一些感受
    OO的经典例子
    剪刀、石头、布机器人比赛
    TextTree 文本资料收集轻量级工具
    两个代替重复输入的小工具
    桌面助手 Desktop Helper 自动帮你关闭指定的窗口
    磁盘可用空间平衡
    用C#制造可以继承的“枚举”
  • 原文地址:https://www.cnblogs.com/rekent/p/6852869.html
Copyright © 2011-2022 走看看