双端队列就是一个两端都是结尾的队列,队列的每一端都可以插入数据项和移除数据项。
package javal.util.test;
public class DequeClass extends QueueClass{
private int lefthead;
private int leftfoot;
public DequeClass(int size) {
super(size);
this.lefthead=size-1;
this.leftfoot=size;
}
public void insertFitst(long e) {
super.insert(e);
}
public void insertLast(long e) {
if(super.isFull()) {
throw new IndexOutOfBoundsException("the deque is full");
}else {
if (leftfoot ==0) {
leftfoot =super.maxSize;
}
super.queueArray[--leftfoot]= e;
nItems++;
}
}
//获取队头
public long getFirst() {
return super.get();
}
//获取队尾
public long getLast() {
if(super.isEmpty()) {
throw new IndexOutOfBoundsException("the queue is empty");
}
if(lefthead == -1) {
lefthead = super.maxSize-1;
}
return super.queueArray[lefthead--];
}
public static void main(String[] args) {
DequeClass deque = new DequeClass(5);
deque.insertFitst(1);
deque.insertFitst(2);
deque.insertFitst(3);
deque.insertFitst(4);
deque.insertFitst(5);
/*System.out.println(deque.getFirst());
System.out.println(deque.getFirst());
System.out.println(deque.getFirst());
System.out.println(deque.getFirst());
System.out.println(deque.getFirst());
deque.insertLast(6);
deque.insertLast(7);
deque.insertLast(8);
deque.insertLast(9);*/
System.out.println(deque.getLast());
System.out.println(deque.getLast());
System.out.println(deque.getLast());
System.out.println(deque.getLast());
System.out.println(deque.getLast());
}
}
上述双端队列实在QueueClass 的基础上完成的,整体上并不是很完美,欢迎指点。 QueueClass
如果只使用insertFirst 和 getFirst 就是队列
如果只使用insetFirst 和 getLast 就是栈