认识队列之前,总结一下栈的时间复杂度,其实也没啥好总结的,数据项入栈和出栈的时间复杂度都为O(1),当然也没必要比较栈里面的数据项 。
队列,就是学生去食堂打饭的时候排的队,排到前面的最先打到饭,排在后面的最后打到饭。
package javal.util.test;
public class QueueClass {
private int maxSize;//队列容量
private long[] queueArray; //存储数据项
private int head; //队头
private int foot; //队尾
private int nItems; //数据项个数
public QueueClass(int size) {
this.maxSize = size;
this.queueArray = new long[maxSize];
this.head = 0;
this.foot = -1;
this.nItems =0;
}
public void insert(long elem) {
if( nItems == maxSize) {
System.err.println("queue is full!");
}else {
if(foot == maxSize-1) {
foot= -1;
}
queueArray[++foot] = elem;
nItems++;
}
}
public long get() {
if(nItems == 0) {
throw new IndexOutOfBoundsException("队列为空!");
}
long temp = queueArray[head++];
if(head == maxSize) {
head = 0;
}
nItems--;
return temp;
}
public long peek() {
return queueArray[head];
}
public boolean isEmpty() {
return (nItems == 0);
}
public boolean isFull() {
return (nItems == maxSize);
}
public int size() {
return nItems;
}
public static void main(String[] args) {
//声明一个队列
QueueClass queue = new QueueClass(5);
queue.insert(1);
queue.insert(2);
queue.insert(3);
queue.insert(4);
queue.insert(5);
//queue.insert(6);
System.out.println(queue.get());
System.out.println(queue.get());
System.out.println(queue.get());
System.out.println(queue.get());
System.out.println(queue.get());
System.out.println(queue.get());
System.out.println(queue.get());
}
}
上述实现的队列只有 出队 和入队 的操作,且时间复杂度 均为 O(1);