欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

队列

程序员文章站 2022-07-09 13:49:03
...

队列【先进先出】只允许在一段进行插入数据操作,在另一端进行删除数据操作的特殊线性表。
进行插入的一端称为队尾(入队列),进行删除操作的一端称为对头(出队列)
栈保证后进先出,模拟递归;队列保证的是公平性,链式结构更适合队列。

package DataStruct;

public class MyQueue {

int[] elements;

public MyQueue(){
    elements=new int[0];
}

//入队列
public void add(int element){

    //创建一个新数组
    int[] newArr=new int[elements.length+1];

    //把原数组内容复制到新数组中
    for(int i=0;i<elements.length;i++) {
        newArr[i] = elements[i];
    }

    //把添加的新元素放入新数组
    newArr[elements.length]=element;

    //新数组替换旧数组
    elements=newArr;
}

//出队列
public int poll(){
    //那数组中第0个元素取出来
    int element=elements[0];

// 创建一个新数组
int[] newArr=new int[elements.length-1];
//复制原数组中的元素到新数组中
for(int i=0;i<newArr.length;i++){
newArr[i]=elements[i+1];
}
//替换数组
elements=newArr;
return element;
}

//判断队列是否为空
public boolean isEmpty(){
    return elements.length==0;
}

}

测试队列
package DataStruct;

import DataStruct.MyQueue;
public class TestMyQueue {

public static void main(String[] args) {
    //创建一个队列
    MyQueue mq=new MyQueue();
    //入队列
    mq.add(5);
    mq.add(4);
    mq.add(3);
    mq.add(2);
    //出队列
    System.out.println(mq.poll());
    System.out.println(mq.poll());
    mq.add(6);
    //并不会影响出队列顺序
    System.out.println(mq.poll());
    System.out.println(mq.poll());
    System.out.println(mq.poll());
    System.out.println(mq.isEmpty());

// 输出结果:
// 5
// 4
// 3
// 2
// 6
// true

}

}