568 lines
9.3 KiB
Java
568 lines
9.3 KiB
Java
|
/**
|
||
|
** Java Program to implement Array Deque
|
||
|
**/
|
||
|
|
||
|
import java.util.Scanner;
|
||
|
|
||
|
/** Class ArrayDeque **/
|
||
|
class ArrayDeque
|
||
|
{
|
||
|
private int[] a;
|
||
|
private int j, n;
|
||
|
|
||
|
/** constructor **/
|
||
|
public ArrayDeque()
|
||
|
{
|
||
|
j = 0;
|
||
|
n = 0;
|
||
|
resize();
|
||
|
}
|
||
|
|
||
|
/** function to check if empty **/
|
||
|
public boolean isEmpty()
|
||
|
{
|
||
|
return n == 0;
|
||
|
}
|
||
|
|
||
|
/** function to clear array deque **/
|
||
|
public void clear()
|
||
|
{
|
||
|
j = 0;
|
||
|
n = 0;
|
||
|
resize();
|
||
|
}
|
||
|
|
||
|
/** function to get number of elements **/
|
||
|
public int getSize()
|
||
|
{
|
||
|
return n;
|
||
|
}
|
||
|
|
||
|
/** function to resize array deque **/
|
||
|
private void resize()
|
||
|
{
|
||
|
int[] temp = new int[Math.max(2 * n, 1)];
|
||
|
for (int k = 0; k < n; k++)
|
||
|
temp[k] = a[(j + k) % a.length];
|
||
|
a = temp;
|
||
|
j = 0;
|
||
|
}
|
||
|
|
||
|
/** function to get an element array deque **/
|
||
|
public int get(int i)
|
||
|
{
|
||
|
return a[(j + i) % a.length];
|
||
|
}
|
||
|
|
||
|
/** function to set an element **/
|
||
|
public int set(int i, int x)
|
||
|
{
|
||
|
int y = a[(j + i) % a.length];
|
||
|
a[(j + i) % a.length] = x;
|
||
|
return y;
|
||
|
}
|
||
|
|
||
|
/** function to add an element **/
|
||
|
void add(int i, int x)
|
||
|
{
|
||
|
if (n + 1 > a.length)
|
||
|
resize();
|
||
|
if (i < n/2)
|
||
|
{
|
||
|
/** shift left one position **/
|
||
|
j = (j == 0) ? a.length - 1 : j - 1;
|
||
|
for (int k = 0; k <= i - 1; k++)
|
||
|
a[(j + k) % a.length] = a[(j + k + 1)%a.length];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/** shift right one position **/
|
||
|
for (int k = n; k > i; k--)
|
||
|
a[(j + k) % a.length] = a[(j + k - 1)%a.length];
|
||
|
}
|
||
|
a[(j + i) % a.length] = x;
|
||
|
n++;
|
||
|
}
|
||
|
|
||
|
/** function to remove an element **/
|
||
|
public int remove(int i)
|
||
|
{
|
||
|
int x = a[(j + i) % a.length];
|
||
|
if (i < n/2)
|
||
|
{
|
||
|
/** shift a[0],..,[i-1] right one position **/
|
||
|
for (int k = i; k > 0; k--)
|
||
|
a[(j + k) % a.length] = a[(j + k - 1) % a.length];
|
||
|
j = (j + 1) % a.length;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/** shift a[i+1],..,a[n-1] left one position **/
|
||
|
for (int k = i; k < n - 1; k++)
|
||
|
a[(j + k) % a.length] = a[(j + k + 1) % a.length];
|
||
|
}
|
||
|
n--;
|
||
|
if (3 * n < a.length)
|
||
|
resize();
|
||
|
return x;
|
||
|
}
|
||
|
|
||
|
/** function display array deque **/
|
||
|
public void display()
|
||
|
{
|
||
|
System.out.print("\nArray Deque : ");
|
||
|
int p = j;
|
||
|
for (int i = 0; i < n; i++)
|
||
|
{
|
||
|
System.out.print(a[p % a.length] +" ");
|
||
|
p++;
|
||
|
}
|
||
|
System.out.println();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/** Class ArrayDequeTest **/
|
||
|
public class ArrayDequeTest
|
||
|
{
|
||
|
public static void main(String[] args)
|
||
|
{
|
||
|
Scanner scan = new Scanner(System.in);
|
||
|
System.out.println("Array Deque Test\n");
|
||
|
ArrayDeque ad = new ArrayDeque();
|
||
|
char ch;
|
||
|
/* Perform Array Deque operations */
|
||
|
do
|
||
|
{
|
||
|
System.out.println("\nArray Deque Operations\n");
|
||
|
System.out.println("1. add");
|
||
|
System.out.println("2. get");
|
||
|
System.out.println("3. set");
|
||
|
System.out.println("4. remove");
|
||
|
System.out.println("5. check empty");
|
||
|
System.out.println("6. clear");
|
||
|
System.out.println("7. size");
|
||
|
int choice = scan.nextInt();
|
||
|
switch (choice)
|
||
|
{
|
||
|
case 1 :
|
||
|
System.out.println("Enter index and element");
|
||
|
ad.add(scan.nextInt(), scan.nextInt() );
|
||
|
break;
|
||
|
case 2 :
|
||
|
System.out.println("Enter index");
|
||
|
System.out.println("Result : "+ ad.get(scan.nextInt() ));
|
||
|
break;
|
||
|
case 3 :
|
||
|
System.out.println("Enter index and element");
|
||
|
ad.set(scan.nextInt(), scan.nextInt() );
|
||
|
break;
|
||
|
case 4 :
|
||
|
System.out.println("\nEnter index");
|
||
|
ad.remove(scan.nextInt() );
|
||
|
break;
|
||
|
case 5 :
|
||
|
System.out.println("\nEmpty Status : "+ ad.isEmpty());
|
||
|
break;
|
||
|
case 6 :
|
||
|
System.out.println("\nArray Deque Cleared");
|
||
|
ad.clear();
|
||
|
break;
|
||
|
case 7 :
|
||
|
System.out.println("\nSize = "+ ad.getSize() );
|
||
|
break;
|
||
|
default :
|
||
|
System.out.println("Wrong Entry \n ");
|
||
|
break;
|
||
|
}
|
||
|
/** print array deque **/
|
||
|
ad.display();
|
||
|
System.out.println("\nDo you want to continue (Type y or n) \n");
|
||
|
ch = scan.next().charAt(0);
|
||
|
}
|
||
|
while (ch == 'Y'|| ch == 'y');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
5
|
||
|
|
||
|
Empty Status : true
|
||
|
|
||
|
Array Deque :
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
0 1
|
||
|
|
||
|
Array Deque : 1
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
1 2
|
||
|
|
||
|
Array Deque : 1 2
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
2 3
|
||
|
|
||
|
Array Deque : 1 2 3
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
3 4
|
||
|
|
||
|
Array Deque : 1 2 3 4
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
4 5
|
||
|
|
||
|
Array Deque : 1 2 3 4 5
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
5 6
|
||
|
|
||
|
Array Deque : 1 2 3 4 5 6
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
6 7
|
||
|
|
||
|
Array Deque : 1 2 3 4 5 6 7
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
7 8
|
||
|
|
||
|
Array Deque : 1 2 3 4 5 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
7
|
||
|
|
||
|
Size = 8
|
||
|
|
||
|
Array Deque : 1 2 3 4 5 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
4
|
||
|
|
||
|
Enter index
|
||
|
2
|
||
|
|
||
|
Array Deque : 1 2 4 5 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
4 24
|
||
|
|
||
|
Array Deque : 1 2 4 5 24 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
3 25
|
||
|
|
||
|
Array Deque : 1 2 4 25 5 24 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
1
|
||
|
Enter index and element
|
||
|
4 26
|
||
|
|
||
|
Array Deque : 1 2 4 25 26 5 24 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
7
|
||
|
|
||
|
Size = 10
|
||
|
|
||
|
Array Deque : 1 2 4 25 26 5 24 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
2
|
||
|
Enter index
|
||
|
6
|
||
|
Result : 24
|
||
|
|
||
|
Array Deque : 1 2 4 25 26 5 24 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
3
|
||
|
Enter index and element
|
||
|
3 28
|
||
|
|
||
|
Array Deque : 1 2 4 28 26 5 24 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
7
|
||
|
|
||
|
Size = 10
|
||
|
|
||
|
Array Deque : 1 2 4 28 26 5 24 6 7 8
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
6
|
||
|
|
||
|
Array Deque Cleared
|
||
|
|
||
|
Array Deque :
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Array Deque Operations
|
||
|
|
||
|
1. add
|
||
|
2. get
|
||
|
3. set
|
||
|
4. remove
|
||
|
5. check empty
|
||
|
6. clear
|
||
|
7. size
|
||
|
5
|
||
|
|
||
|
Empty Status : true
|
||
|
|
||
|
Array Deque :
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
n
|