programming-examples/java/Data_Structures/Java Program to implement Circular Buffer.java
2019-11-15 12:59:38 +01:00

399 lines
7.3 KiB
Java

/*This is a Java Program to implement Circular Buffer. A circular buffer, cyclic buffer or ring buffer is a data structure that uses a single, fixed-size buffer as if it were connected end-to-end. This structure lends itself easily to buffering data streams.*/
/**
** Java Program to implement Circular Buffer
**/
import java.util.Scanner;
/** Class Circular Buffer **/
class CircularBuffer
{
private int maxSize;
private int front = 0;
private int rear = 0;
private int bufLen = 0;
private char[] buf;
/** constructor **/
public CircularBuffer(int size)
{
maxSize = size;
front = rear = 0;
rear = 0;
bufLen = 0;
buf = new char[maxSize];
}
/** function to get size of buffer **/
public int getSize()
{
return bufLen;
}
/** function to clear buffer **/
public void clear()
{
front = rear = 0;
rear = 0;
bufLen = 0;
buf = new char[maxSize];
}
/** function to check if buffer is empty **/
public boolean isEmpty()
{
return bufLen == 0;
}
/** function to check if buffer is full **/
public boolean isFull()
{
return bufLen == maxSize;
}
/** insert an element **/
public void insert(char c)
{
if (!isFull() )
{
bufLen++;
rear = (rear + 1) % maxSize;
buf[rear] = c;
}
else
System.out.println("Error : Underflow Exception");
}
/** delete an element **/
public char delete()
{
if (!isEmpty() )
{
bufLen--;
front = (front + 1) % maxSize;
return buf[front];
}
else
{
System.out.println("Error : Underflow Exception");
return ' ';
}
}
/** function to print buffer **/
public void display()
{
System.out.print("\nBuffer : ");
for (int i = 0; i < maxSize; i++)
System.out.print(buf[i] +" ");
System.out.println();
}
}
/** Class CircularBufferTest **/
public class CircularBufferTest
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Circular Buffer Test\n");
System.out.println("Enter Size of Buffer ");
int n = scan.nextInt();
/* creating object of class CircularBuffer */
CircularBuffer cb = new CircularBuffer(n);
/* Perform Circular Buffer Operations */
char ch;
do
{
System.out.println("\nCircular Buffer Operations");
System.out.println("1. insert");
System.out.println("2. remove");
System.out.println("3. size");
System.out.println("4. check empty");
System.out.println("5. check full");
System.out.println("6. clear");
int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter character to insert");
cb.insert( scan.next().charAt(0) );
break;
case 2 :
System.out.println("Removed Element = "+ cb.delete());
break;
case 3 :
System.out.println("Size = "+ cb.getSize());
break;
case 4 :
System.out.println("Empty status = "+ cb.isEmpty());
break;
case 5 :
System.out.println("Full status = "+ cb.isFull());
break;
case 6 :
System.out.println("\nBuffer Cleared\n");
cb.clear();
break;
default :
System.out.println("Wrong Entry \n ");
break;
}
/* display Buffer */
cb.display();
System.out.println("\nDo you want to continue (Type y or n) \n");
ch = scan.next().charAt(0);
}
while (ch == 'Y'|| ch == 'y');
}
}
/*
Enter Size of Buffer
5
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
1
Enter character to insert
a
Buffer : a
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
1
Enter character to insert
b
Buffer : a b
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
1
Enter character to insert
c
Buffer : a b c
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
1
Enter character to insert
d
Buffer : a b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
1
Enter character to insert
e
Buffer : e a b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
1
Enter character to insert
f
Error : Underflow Exception
Buffer : e a b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
2
Removed Element = a
Buffer : e a b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
1
Enter character to insert
f
Buffer : e f b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
3
Size = 5
Buffer : e f b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
5
Full status = true
Buffer : e f b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
2
Removed Element = b
Buffer : e f b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
3
Size = 4
Buffer : e f b c d
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
6
Buffer Cleared
Buffer :
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
3
Size = 0
Buffer :
Do you want to continue (Type y or n)
y
Circular Buffer Operations
1. insert
2. remove
3. size
4. check empty
5. check full
6. clear
4
Empty status = true
Buffer :
Do you want to continue (Type y or n)
n