双端队列的代码
双端队列就是一个两端都是结尾的队列。队列的每一端都可以插入和移除数据项。它应该包括insertLeft(),insertRight(),removeLeft(),removeRight(),isEmpty(),isFull()方法。要求象队列那样支持在数据末端的回绕。
如果严格禁止调用insertLeft()和removeLeft()方法(或禁用右端的操作),双端队列功能就和栈一样。
禁止调用insertLeft()和removeRight()方法(或相反的另一对方法),它的功能就和队列一样了
下面是我下的代码,不知道符合上述要求嘛,麻烦高手看下,感激不尽。
class Deque {
private int maxSize; //最大容量
private long[] dequeArray; //以数组实现队列
private int left; //队列左端
private int right; //队列右端
private int nItems; //计算队列中数据项的计数器,nItems==0代表空,nItems==maxSize代表满
public Deque(int s) { //构造器,构造一个双端队列
maxSize = s;
dequeArray = new long[maxSize];
left = -1;
right = -1;
nItems = 0;
}
public void insertLeft(long j) { //队列左端插入方法
if( !this.isFull() ) {
if(left == maxSize-1) { //支持在数据末端的回绕
left = -1;
}
dequeArray[++left] = j;
nItems++;
}
}
public void insertRight(long j) { //队列右端插入方法
if( !this.isFull() ) {
if(right == -1 || right == 0) { //支持在数据末端的回绕
right = maxSize;
}
dequeArray[--right] = j;
nItems++;
}
}
public long removeLeft() { //队列左端移除方法
if( !this.isEmpty() ) {
if(left == -1) { //支持在数据末端的回绕
left = maxSize-1;
}
long temp = dequeArray[left--];
nItems--;
return temp;
}
else return -1;
}
public long removeRight() { //队列右端移除方法
if( !this.isEmpty() ) {
if(right == -1 || right == maxSize) { //right==-1为了防止右端没有插入新值,而直接用该方法移除左端的插入值
right = 0;
}
long temp = dequeArray[right++];
nItems--;
return temp;
}
else return -1;
}
public boolean isEmpty() { //判断队列是否为空
return (nItems == 0);
}
public boolean isFull() { //判断队列是否为满
return (nItems == maxSize);
}
}
public class TestDeque {
public static void main(String[] args) {
Deque theDeque = new Deque(10);
theDeque.insertRight(10);
theDeque.insertRight(20);
theDeque.insertRight(30);
theDeque.insertRight(40);
theDeque.insertRight(50);
theDeque.insertRight(60);
theDeque.insertRight(70);
theDeque.removeRight();
theDeque.removeRight();
theDeque.removeRight();
theDeque.removeLeft();
theDeque.removeLeft();
while( !theDeque.isEmpty() ) {
long n = theDeque.removeRight();
System.out.print(n);
System.out.print(" ");
}
System.out.println();
}
}
------解决方案--------------------
没有释放空间。
public ~Deque()
{
delete [] dequeArray;
}
[解决办法]
自己可以写简单的测试代码就可以测试啊
[解决办法]