java - Issue removing front of dequeue (Double ended queue) -
i tasked creating deque in java options add left, add right, remove left , remove right.
i have coded add right , remove right methods have issues trying add left , remove left working.
i think have gone massively wrong somewhere. have tried swapping round variables add left , reversing calculations did not work , come following :
exception in thread "main" java.lang.outofmemoryerror: java heap space @ java.util.arrays.copyof(arrays.java:3332) @ java.lang.abstractstringbuilder.expandcapacity(abstractstringbuilder.java:137) @ java.lang.abstractstringbuilder.ensurecapacityinternal(abstractstringbuilder.java:121) @ java.lang.abstractstringbuilder.append(abstractstringbuilder.java:421) @ java.lang.stringbuffer.append(stringbuffer.java:265) @ datastructuresass1.dendqueue.tostring(dendqueue.java:107) @ datastructuresass1.main.main(main.java:21) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:497) @ com.intellij.rt.execution.application.appmain.main(appmain.java:147) i trying create deque using arrays. below code add right , add left methods:
add left (which not working)
public void addleft(t o){ left = (left + 1) % arr.length; arr[left] = o; // if array full copy larger 1 if ((left + 1) % arr.length == right) { t[] newarr = (t[]) new object[arr.length * 2]; int i; (i = 0; < arr.length; i++) newarr[i] = arr[(right - i) % arr.length]; arr = newarr; left = - 1; right = 0; system.out.println("array size increased " + arr.length); } add right (which working)
public void addright(t o) { right = (right + 1) % arr.length; arr[right] = o; // if array full copy larger 1 if ((right + 1) % arr.length == left) { t[] newarr = (t[]) new object[arr.length * 2]; int i; (i = 0; < arr.length; i++) newarr[i] = arr[(left + i) % arr.length]; arr = newarr; left = 0; right = - 1; system.out.println("array size increased " + arr.length); } please explain me why addleft method not working. great have been stumped on while! in advance.
working array inefficient, try linkedlist, easier! , way more appropriate (much faster) queue not need memory copying adding , removing objects. has methods addfirst , addlast etc.
linkedlist part of standard java library: https://docs.oracle.com/javase/7/docs/api/java/util/linkedlist.html
see https://en.wikipedia.org/wiki/linked_list#doubly_linked_list how works
if teacher forces use array, nuts :d
Comments
Post a Comment