399 lines
7.3 KiB
Java
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
|