Creation of an interface for character queues.
Three implementations to be developed:
Fixed size linear queue.
Circular queue (reuses array space).
Dynamic queue (grows as needed).
1 Create a file called ICharQ.java
// Character queue interface.
public interface ICharQ {
// Inserts a character into the queue.
void put(char ch);
// Remove a character from the queue.
char get();
}
2 Create a file called IQDemo.java.
3 Start creating IQDemo.java by adding the FixedQueue class shown here:
4 Add the CircularQueue class shown below to IQDemo.java.
Circular Queue Operation: Reuses space freed up in the array when removing elements. It can store an unlimited number of elements, as long as there are removals.
Boundary Conditions: The queue is not full when the end of the array is reached, but when an unremoved item is overwritten by a new one.
The put() method must check several conditions to determine whether the queue is full.
Conditions for Full Queue: The queue is full if: putloc is a smaller unit than getloc. putloc is at the end of the array and getloc is at the beginning.
Empty Queue Condition: The queue is empty when getloc and putloc are equal.
Array Size: The underlying array is created one unit larger than the queue size to facilitate checks.
5 Insert the DynQueue class shown below in IQDemo.java. It implements an “extendable” queue that expands its size when space runs out.
6 To demonstrate the three implementations of ICharQ, insert the following class into IQDemo.java. It uses an ICharQ reference to access all queues.
class IQDemo {
public static void main(String args[]) {
FixedQueue q1 = new FixedQueue(10);
DynQueue q2 = new DynQueue(5);
CircularQueue q3 = new CircularQueue(10);
ICharQ iQ;
char ch;
int i;
iQ = q1;
// Inserts some characters into the fixed queue.
for(i=0; i < 10; i )
iQ.put((char) ('A' i));
// Displays the queue.
System.out.print("Contents of fixed queue: ");
for(i=0; i < 10; i ) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
iQ = q2;
// Inserts some characters into the dynamic queue.
for(i=0; i < 10; i )
iQ.put((char) ('Z' - i));
// Displays the queue.
System.out.print("Contents of dynamic queue: ");
for(i=0; i < 10; i ) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
iQ = q3;
// Inserts some characters into the circular queue.
for(i=0; i < 10; i )
iQ.put((char) ('A' i));
// Displays the queue.
System.out.print("Contents of circular queue: ");
for(i=0; i < 10; i ) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
// Inserts more characters into the circular queue.
for(i=10; i < 20; i )
iQ.put((char) ('A' i));
// Displays the queue.
System.out.print("Contents of circular queue: ");
for(i=0; i < 10; i ) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println("nStore and consume from"
" circular queue.");
// Stores and consumes items from the circular queue.
for(i=0; i < 20; i ) {
iQ.put((char) ('A' i));
ch = iQ.get();
System.out.print(ch);
}
}
}
7 Create a circular version of DynQueue. Add a reset( ) method to ICharQ that nets the queue. Create a static method that copies the contents of one queue type to another.
The above is the detailed content of Create a Queue interface. For more information, please follow other related articles on the PHP Chinese website!