Sunday, 8 September 2013

resize-able queue using array implementation

resize-able queue using array implementation

I find after 4 insert and 3 remove my insert or remove from queue give me
ArratIndexOutOfBoundException i don't know why please help me in finding
the problem in my code.
import java.util.*;
class Queue {
private int[] queue={};
private int tail;
private int head;
Queue() {
tail=0;
head=0;
}
private void resize(int head,int tail,int capacity) {
int i;
int[] oldQueue = queue;
if(tail==0) capacity++;
queue = new int[capacity];
for(i=head;i<tail;i++) {
queue[i-head]=oldQueue[i];
}
System.out.println("Array size:"+queue.length);
head=0;
tail=i;
}
final public void enqueue(int data) {
if(isFull()) {
resize(head,tail,(tail-head)*2);
}
queue[tail++]=data;
}
private boolean isFull() {
return tail==queue.length;
}
final public int dequeue() {
if(isEmpty()) {
System.out.println("Queue is empty");
return 0;
}
if(isShrink()) {
resize(head,tail,(tail-head)/2);
}
return queue[head++];
}
private boolean isShrink() {
if((tail-head)==queue.length/4) return true;
return false;
}
private boolean isEmpty() {
return tail==head;
}
final public int size() {
return (tail-head);
}
}
public class queueResizableDemo {
public static void main(String args[]) {
int choice;
Queue q = new Queue();
Scanner scan = new Scanner(System.in);
while(true) {
System.out.println("Enter the choice \n\t1 add to queue\n\t2
remove from queue\n\t3 size\n\tother number for exit");
choice=scan.nextInt();
switch(choice) {
case 1: {
System.out.println("enter the Integer number");
q.enqueue(scan.nextInt());
} break;
case 2: {
System.out.println("remove from queue:"+q.dequeue());
} break;
case 3:{
System.out.println("size:"+q.size());
} break;
default:{
return;
}
}
}
}
}

No comments:

Post a Comment