数据结构------循环队列

//循环队列
/*           初始化 front:代表队头
                    rear:代表队尾的下一个位置
            判断队列是否满  (rear+1)%maxSize==front
            判断队列是否空   front==rear;
            入队           rear=(rear+1)%maxSize
            出队            front=(front+1)%maxSize;
            队列长度        rear-front+maxSize)%maxSize;
*/
public class CircleQuene {
    private int maxSize;
    private int quene[];
    private int front;  //队头,用于出队
    private int rear;    //队尾,用于入队

    public CircleQuene(int size)       //初始化
    {
        this.maxSize=size;
          quene=new int[this.maxSize];      //此处不是int quene[]
        front=0;   //指向队头
        rear=0;      //指向队尾的下一个位置
    }

    public Boolean isFull()   //判断队列是否满
    {
        
          return (rear+1)%maxSize==front;
        
    }

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

    public void add(int value)   //入队列  rear在往上增加
    {
        if(isFull())
            System.out.println("队列已经满");

        quene[rear]=value;
        rear=(rear+1)%maxSize;
    }

    public int  getQuene()  //出队列 front在往上增加
    {
        if(isEmpty()) {
            throw new RuntimeException("");
        }
          int value=quene[front];
           front=(front+1)%maxSize;
           return value;

    }

    public void list()    //遍历队列,从队头到队尾
    {
        if(isEmpty())
            System.out.println("队列为空");
        int i;
        for(i=front;i<=front+getSize();i++)
        {
            System.out.printf(" %d\t",quene[i%maxSize]);
        }

    }

    public int showHead()  //展示队头(第一个元素)
    {

        return quene[front];

    }

    public int getSize()  //获取队列真实的元素个数
    {
        if(isEmpty()){
            System.out.println("队列为空");

        }
        return (rear-front+maxSize)%maxSize;
    }


}

测试代码如下:

public class CircleQueneTest {
    public static void main(String[] args) {
        CircleQuene arrayquene=new CircleQuene(10);
        int i;
        for(i=0;i<9;i++)
        {
            arrayquene.add(i);    //添加
        }
        System.out.println("遍历输出为");
        arrayquene.list();
        System.out.println("");
        try {
            for (i = 0; i < 10; i++) {
              System.out.printf("%d\t", arrayquene.getQuene()); //该方法有抛出异常,需要处理
            }
        }
        catch(Exception e)
        {
            System.out.println("队列已经为空~");
        }

        System.out.printf("队头元素是 %d",arrayquene.showHead());

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值