在java中实现双端队列的问题
抱歉,只是从我在这里提出的问题开始:这里我正在尝试运行此方法从双面队列(deque)中删除通用值(EltType),但我不断收到错误,我调用 insertFirst 两次,并将值“3”插入数组两次,然后,当我运行removeFirst时,它将打印一次“3”,然后打印“Null”。有人能帮我吗?
class ArrayBasedDeque<EltType> {
private final int CAPACITY = 10;
private int capacity;
private int end;
private EltType deque[];
public ArrayBasedDeque() {
this.capacity = CAPACITY;
deque = (EltType[]) (new Object[capacity]);
}
public EltType removeFirst() {
EltType[] tempArray;
EltType returned = deque[0];
tempArray = (EltType[]) new Object[capacity];
for (int i=1;i<capacity;i++) {
tempArray[i-1] = deque[i];
}
deque = tempArray;
return returned;
}
public boolean isEmpty() {
return end == 0;
}
public void insertFirst(EltType first) {
if(!isEmpty()) {
EltType[] tempArray;
tempArray = (EltType[]) new Object[capacity+1];
for (int i=0;i<deque.length;i++) {
tempArray[i+1] = deque[i];
}
deque = tempArray;
}
deque[0] = first;
}
}
谢谢 :)
sorry, just following on from the question I had here : here I am trying to run this method to remove a generic value (EltType) from a double sided queue(deque), but I keep getting an error in that, I call insertFirst twice, and insert the value "3" into the array twice, then, when I run removeFirst, it will print out "3" once, and then "Null" thereafter. Would anyone be able to help me out please ?
class ArrayBasedDeque<EltType> {
private final int CAPACITY = 10;
private int capacity;
private int end;
private EltType deque[];
public ArrayBasedDeque() {
this.capacity = CAPACITY;
deque = (EltType[]) (new Object[capacity]);
}
public EltType removeFirst() {
EltType[] tempArray;
EltType returned = deque[0];
tempArray = (EltType[]) new Object[capacity];
for (int i=1;i<capacity;i++) {
tempArray[i-1] = deque[i];
}
deque = tempArray;
return returned;
}
public boolean isEmpty() {
return end == 0;
}
public void insertFirst(EltType first) {
if(!isEmpty()) {
EltType[] tempArray;
tempArray = (EltType[]) new Object[capacity+1];
for (int i=0;i<deque.length;i++) {
tempArray[i+1] = deque[i];
}
deque = tempArray;
}
deque[0] = first;
}
}
Thank you :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最明显的问题是
end
永远不会改变。isEmpty()
将始终返回true
。现在让我们看看您的insertFirst()
方法。知道
isEmpty()
无论如何总是返回true
,那么这段代码有什么问题呢?The big glaring issue is that
end
never changes.isEmpty()
will always returntrue
. Now let's look at yourinsertFirst()
method.Knowing that
isEmpty()
always returnstrue
no matter what, what is the problem with this piece of code?当你删除一个元素时,你也需要更新你的结束指针。
您还应该研究
System.arrayCopy()
You need to update your end pointer too when you remove an element.
You should also investigate
System.arrayCopy()