数据结构Java:顺序队列

1.基本介绍

(1)队列是一个有序列表,可以通过数组或链表来实现。

(2)队列是只允许在表的一端进行插入,而在表的另一端进行删除操作的一种特殊线性表。允许插入(入队)的一端称为“队尾”,允许删除(出队)的一端称为“队首”。

(3)队列遵循先进先出的原则,先存入的数据,先出来。

(4)队列可分为顺序队列和链式队列。

2. 基本操作

(1)置空操作:clear()

(2)判空操作:isEmpty()

(3)求队列的长度:length()

(4)入队操作:offer(x)

(5)出队操作:poll()

(6)取队首元素(第一个元素):peek()

(7)打印所有元素:display()

3.循环顺序队列

 队首指针(front)指向第一个元素,队尾指针(rear)指向最后一个元素的下一位。

maxSize表示队列的最大容量,queueElem表示队列。

队空的条件:front == rear

队满的条件:(rear+1)% queueElem == front

4.代码实现
public class CircleSqQueue {
    private Object[] queueElem; //队列的存储空间
    private int front; //队首指针
    private int rear; //队尾指针

    //构造函数,对变量进行初始化
    public CircleSqQueue(int maxSize){
        front = rear = 0;
        queueElem = new Object[maxSize]; //为队列分配maxSize个存储单位
    }
    public Object[] getQueueElem() {
        return queueElem;
    }
    public void setQueueElem(Object[] queueElem) {
        this.queueElem = queueElem;
    }

    public int getFront() {
        return front;
    }
    public void setFront(int front) {
        this.front = front;
    }

    public int getRear() {
        return rear;
    }
    public void setRear(int rear) {
        this.rear = rear;
    }

    //置空操作
    public void clear(){
        front = rear = 0;
    }

    //判空操作
    public boolean isEmpty(){
        return front == rear;
    }

    //求队列中的元素个数并由函数返回其值
    public int length(){
        return (rear-front+queueElem.length)% queueElem.length;
    }

    //将指定元素插入队列(入队)
    public void offer(int x) throws Exception {
        //队列已满
        if((rear+1)%queueElem.length == front)throw new Exception("队列已满");
        //队列未满
        else{
            queueElem[rear] = x; //将x赋给队尾元素
            rear = (rear+1)%queueElem.length; //修改队尾指针,将队尾移向下一位
        }
    }

    //移除队列的第一位元素并为此函数返回该对象(出队)
    public Object poll(){
        //若队列为空,返回null
        if(front == rear)
            return null;
        //队列不为空
        else{
            Object frontData = queueElem[front]; //取出队首元素
            front = (front+1)% queueElem.length; //更改队首指针,将队首指针移向下一位
            return frontData;
        }
    }
    
    //取出队首元素并返回其值
    public Object peek(){
        //若队列为空,返回null
        if(front == rear)
            return null;
        //队列不为空
        else {
            return queueElem[front];
        }
    }
    
    //打印队列的所有元素
    public void display(){
        //先判断队列是否为空,队列不为空,则打印
        if(!isEmpty()){
            for (int i = front; i != rear; i = (i+1)% queueElem.length) 
                System.out.print(queueElem[i].toString()+" ");   
        }else {
            System.out.println("队列为空");
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值