队列——Java实现

来源:互联网 发布:聊天交友软件排行 编辑:程序博客网 时间:2024/05/16 12:40

基本结构

队列主要的特性是先进先出(FIFO)
先看一下队列的基本结构

    private Object[] data = null;    private int maxSize;// 队列的容量    private int front;// 头    private int rear;// 尾

data 用来存放队列中的值

初始化队列

public MyQueue(int max) {        // 初始化        this.maxSize = max;        data = new Object[max];        front = 0;        rear = 0;    }

front 和 rear 这个时候都指向队列的头部

判断队列是否为空,或者已满

应为开始的时候,front和rear都是指在头部,那只要front==rear这个队列就是空队列,当rear==maxsize的时候就代表,队列已经满了

// 判断队列是否为空    public boolean isEmpty() {        if (rear == front)            return true;        else            return false;    }    //判断队列是否满    public boolean isFull(){        if(rear == maxSize)            return true;        else            return false;    }

入队

入队的思路为,将新进来的数据放在队尾所指的位置,然后让对尾向后移动一位,队首永远指在队列的头部

// 入队    public void add(Object ob) {        if(isFull())            System.out.println("队列已经满了");        data[rear++] = ob;    }

出队

出队的思路为,我们把头指针指向位置的数据出队,然后头这个位置就空出来了,再让后面的挨个往前完成出队,当然这个方式的缺点也很明显,队列越长,一次出队越麻烦,用链表的话可以解决这个问题。

// 出队一个    public Object pop() {        if(isEmpty()){            System.out.println("空队,不能出");            return null;        }        Object MyRuturn = data[front];//要出队的项        for (int i = front; i < rear; i++) {            data[i] = data[i + 1];        }           rear--;        return MyRuturn;    }
原创粉丝点击