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

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -