KEMBAR78
CirculerQ and Dqueue | PDF | Computer Science | Computing
0% found this document useful (0 votes)
17 views12 pages

CirculerQ and Dqueue

The document describes the implementation of two data structures: DeQueue and CirQueue in Java. DeQueue allows adding and removing elements from both ends with methods for overflow and underflow handling, while CirQueue implements a circular queue with similar functionalities. Both classes include methods for displaying elements and managing the queue operations through a user interface.

Uploaded by

jreeva26
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views12 pages

CirculerQ and Dqueue

The document describes the implementation of two data structures: DeQueue and CirQueue in Java. DeQueue allows adding and removing elements from both ends with methods for overflow and underflow handling, while CirQueue implements a circular queue with similar functionalities. Both classes include methods for displaying elements and managing the queue operations through a user interface.

Uploaded by

jreeva26
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 12

Q.

1-

Class name: DeQueue

Data members/instance variables:

qrr[]: array to hold integer elements

lim: maximum capacity of the dequeue

front: to point the index of the front end

rear: to point the index of the rear end

Methods/Member functions:

DeQueue(int l): constructor to initialize lim = l, front = 0 and rear = 0

void addFront(int v): to add integers in the dequeue at the front end if possible, otherwise
display the message “OVERFLOW FROM FRONT”

void addRear(int v): to add integers in the dequeue at the rear end if possible, otherwise
display the message “OVERFLOW FROM REAR”

int popFront(): removes and returns the integers from the front end of the dequeue if any,
else returns -999

int popRear(): removes and returns the integers from the rear end of the dequeue if any,
else returns -999

void show(): displays the elements of the dequeue


Specify the class DeQueue giving details of the functions void addFront(int) and
int popFront(). Assume that the other functions have been defined.

Algorithm-

1. Start the program.

2. Initialize an array of fixed size for the deque (e.g., int qrr[] = new int[lim]).

3. Declare three variables: front, rear and lim.

4. Set front = 0, rear = 0 and lim=l to represent an empty deque.

5. Check queue is full or not:


○ If (front == 0 && rear == size-1) or (front == rear + 1), then Dqueue is
full.
6. If front == -1, then deque is empty.
7. Create addFront(int v) function.

8. In addFront(int v), check if deque is full.

9. If full, print "Overflow"; else proceed.

10. If empty (front == -1), set front = rear = 0.

11. Else if front == 0, set front = size - 1.

12. Else, decrement front--.

13. Insert element: qrr[front] = x.

14. Create addRear(int v) function.

15. Similar to addFront(int v), check for overflow, update rear pointer, and insert at
qrr[rear].

16. Create popFront() function:

● If deque is empty, return -999.


● If front == rear, set both to -1.
● Else if front == size - 1, set front = 0.
● Else, increment front.
17. Create int popRear() function:
● If empty, return -999.
● If front == rear, set both to -1.
● Else if rear == 0, set rear = size - 1.
● Else, decrement rear.
18. End of program; perform various operations as needed using addFront, addRear,
popFront, popRear.

Sol-
import java.util.Scanner;
class DeQueue{
int qrr[];
int lim;
int front;
int rear;
public DeQueue(int l){
lim = l;
qrr = new int[lim];
front = 0;
rear = 0;
}
public void addFront(int v){
if(front == 0)
System.out.println("OVERFLOW FROM FRONT");
else
qrr[--front] = v;
}
public void addRear(int v){
if(rear == lim)
System.out.println("OVERFLOW FROM REAR");
else
qrr[rear++] = v;
}
public int popFront(){
if(front < rear){
int d = qrr[front++];
if(front == rear){
front = 0;
rear = 0;
}
return d;
}
return -999;
}
public int popRear(){
if(front < rear){
int d = qrr[--rear];
if(front == rear){
front = 0;
rear = 0;
}
return d;
}
return -999;
}
public void show(){
if(front > rear)
System.out.println("DE-QUEUE EMPTY");
else{
for(int i = front; i < rear; i++)
System.out.print(qrr[i] + " ");
System.out.println();
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("Dequeue limit: ");
int size = Integer.parseInt(in.nextLine());
DeQueue dq = new DeQueue(size);
while(true){
System.out.println("1. Add from front");
System.out.println("2. Add from rear");
System.out.println("3. Pop from front");
System.out.println("4. Pop from rear");
System.out.println("5. Display elements");
System.out.print("Enter your choice: ");
int choice = Integer.parseInt(in.nextLine());
switch(choice){
case 1:
System.out.print("Element to be added: ");
int v = Integer.parseInt(in.nextLine());
dq.addFront(v);
break;
case 2:
System.out.print("Element to be added: ");
v = Integer.parseInt(in.nextLine());
dq.addRear(v);
break;
case 3:
v = dq.popFront();
if(v == -999)
System.out.println("Underflow from front");
else
System.out.println(v + " popped");
break;
case 4:
v = dq.popRear();
if(v == -999)
System.out.println("Underflow from rear");
else
System.out.println(v + " popped");
break;
case 5:
dq.show();
break;
default:
System.out.println("Bye!");
return;
}
}
}
}

Q.2-
Define a class CirQueue with the following details:

Class name: CirQueue

Data members/instance variables:

cq[]: array to store the integers


cap: stores the maximum capacity of the array
front: to point the index of the front end
rear: to point the index of the rear end

Member functions:

CirQueue(int max): constructor to initialize the data member cap = max, front = 0 and rear
=0
void push(int n): to add integer in the queue from the rear end if possible, otherwise
display the message “QUEUE IS FULL”
int pop(): removes and returns the integer from the front end of the queue if any, else
returns -9999
void show(): displays the queue elements
(a) Specify the class CirQueue giving details of the functions void push(int) and int
pop(). Assume that the other functions have been defined.

Algorithm-
1. Start the program.

2. Initialize a fixed-size array (e.g., int cq[] = new int[cap]).

3. Declare three variable: front, rear and cap.


4. Set both front = 0, rear = 0 and cap=max to indicate an empty queue.

5. Check queue is full, if (front == 0 && rear == size - 1) or (rear + 1) % cap ==


front than print Queue is full

6. Check queue is empty, if front == -1 than return -9999.

7. Create an void push(int n) function to insert an element.

8. In void push(int n), first check . If full, print "Queue is full".

9. If queue is empty (front == -1), set front = 0.

10. Update rear = (rear + 1) % cap.

11. Insert the element: cq[rear] = n.

12. Create a int pop() function to delete an element.

13. In int pop(), check isEmpty(). If true, return -9999.

14. Store the front element (optional): temp = cq[front].

15. If front == rear, it means only one element. Set front = rear = -1.

16. Else, update front = (front + 1) % cap.

17. Return the dequeued element or simply confirm deletion.

18.End of program; use push, pop, and show to manage circular queue.

Sol-
import java.util.Scanner;
class CirQueue{
int cq[];
int cap;
int front;
int rear;
public CirQueue(int max){
cap = max;
cq = new int[cap];
front = 0;
rear = 0;
}
public void push(int v){
if(cap == 0)
System.out.println("QUEUE IS FULL");
else{
cq[rear] = v;
rear = (rear + 1) % cq.length;
cap--;
}
}
public int pop(){
if(cap == cq.length)
return -9999;
else{
int v = cq[front];
front = (front + 1) % cq.length;
cap++;
if(front == rear)
front = rear = 0;
return v;
}
}
public void show(){
if(cap == cq.length)
System.out.println("QUEUE IS EMPTY");
else{
int i = front;
int count = cq.length;
while(count > cap){
System.out.print(cq[i] + " ");
i = (i + 1) % cq.length;
count--;
}
System.out.println();
}
}
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.print("Circular queue size: ");
int size = Integer.parseInt(in.nextLine());
CirQueue obj = new CirQueue(size);
while(true){
System.out.println("1. PUSH");
System.out.println("2. POP");
System.out.println("3. DISPLAY");
System.out.print("Enter your choice: ");
int choice = Integer.parseInt(in.nextLine());
switch(choice){
case 1:
System.out.print("Element to be pushed: ");
int d = Integer.parseInt(in.nextLine());
obj.push(d);
break;
case 2:
d = obj.pop();
if(d == -9999)
System.out.println("QUEUE IS EMPTY");
else
System.out.println(d + " POPPED");
break;
case 3:
obj.show();
break;
default:
System.out.println("Bye!");
return;
}
}
}
}

You might also like