Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Queues: A restricted form of data structure in CS where item are added and remov

ID: 3867235 • Letter: Q

Question

Queues: A restricted form of data structure in CS where item are added and remove in a FIFO order. This lab is for you to be familiar with how the Queues are implements.
Implement 2 type of queues in C language
- Circular: based on the technique describe in class using array Max item can store 20
- Linear: implement using linked list that starts from empty to max size Max item =50
All Queues must have the following functions:
isFull, isEmpty, enqueue, dequeue, peek
Peek is a function look at the front (oldest item) most item without removing.
Design data structure(s) to have {front, rear, count and & maxsize} for the two type of queues
1) Your program will first allow user to enter N that is <51. Enqueue with N of random values.
Must use circular queue if N<21.
Print populated queue
2) Provide menu options for enqueue (1 ), dequeue (2), peek (3)>1 or > 1 Jays // item value may be strings or numbers >Jays
Print the newly modified queue.
3) Make sure your program is able to gracefully handle outlier cases for the queue.
4) Program run until user enter ‘exit’.

Explanation / Answer

#include <stdio.h>
#include<stdbool.h>
#include<stdlib.h>

//data in numbers only

//declarations for circular queue using array
int qsize;
void Enque(int[], int);
void Deque(int[]);
void peek(int[]);
bool isFull();
bool isEmpty();

int Front = - 1;
int Rear = - 1;

//declarations for linear queue using linked list..

struct node
{
int info;
struct node *ptr;
}*front,*rear,*temp,*front1;

int frontelement();
int size;

void enq(int data);//enqueue function
void deq();//dequeue function
bool isempty();//isempty function
bool isfull();//
void qpeek();

void empty();
void create();
void queuesize();


int count = 0;

//test code main method....

int main()
{
   printf("Enter N (number):(<51)");
   scanf("%d",&size);
   qsize=size;
  
  
  
  
   if(size<21)//implementing circular queue
   {
  
int n, ch;
int queue[qsize];
  
int i=0;
while(i<qsize)
{
   int r =rand();
   Enque(queue,r);
   i++;  
   }
  
  
  
  
  
  
  
  
  
  
do
{
printf(" Circular Queue: 1. Enqueue 2. Dequeue 3. Peek 4.isFull 5.isEmpty 0. Exit");
printf(" Enter Choice 0-5? : ");
scanf("%d", &ch);
switch (ch)
{
case 1:
printf(" Enter number: ");
scanf("%d", &n);
Enque(queue, n);
break;
case 2:
Deque(queue);
break;
case 3:
peek(queue);
break;
case 4:
               if(isFull())printf("Queue is full ");
               else printf("Queue is not full ");
               break;
           case 5:
               if(isEmpty())printf("Queue is empty ");
               else printf("Queue is not empty ");
}
}while (ch != 0);
  
   }
   else //if size is greater than 20..//implementing linear queue
   {
      
      
   int i=0;
while(i<qsize)
{
       int r =rand();
       enq(r);
       i++;  
   }
   int ch,n;  
   do
{
      
      
printf(" Linear Queue: 1. Enqueue 2. Dequeue 3. Peek 4.isFull 5.isEmpty 0. Exit");
printf(" Enter Choice 0-5? : ");
scanf("%d", &ch);
switch (ch)
{
case 1:
printf(" Enter number: ");
scanf("%d", &n);
enq(n);
break;
case 2:
deq();
break;
case 3:
qpeek();
break;
case 4:
               if(isfull())printf("Queue is full ");
               else printf("Queue is not full ");
               break;
           case 5:
               if(isempty())printf("Queue is empty ");
               else printf("Queue is not empty ");
}
}while (ch != 0);
  
  
  
  
  
          
   }
}


//functions of circular array....
bool isFull()
{
   if ((Front == 0 && Rear == qsize - 1) || (Front == Rear + 1))
{
       return true;//returns true if queue is full  
   }  
   return false;//otherwise returns false
}
bool isEmpty()
{
   if(Front==-1)return true;//returns true if queue is emptyy
   return false;//otherwise false
  
}
void Enque(int queue[], int item)
{
if ((Front == 0 && Rear == qsize - 1) || (Front == Rear + 1))
{
printf("queue is full");
return;
}
else if (Rear == - 1)
{
Rear++;
Front++;
}
else if (Rear == qsize - 1 && Front > 0)
{
Rear = 0;
}
else
{
Rear++;
}
queue[Rear] = item;
}

void peek(int queue[])
{
int i;
printf(" ");
if(!isEmpty())
{
       printf("%d ",queue[Front]);  
   }
}

void Deque(int queue[])
{
if (Front == - 1)
{
printf("Queue is empty ");
}
else if (Front == Rear)
{
printf(" %d deleted", queue[Front]);
Front = - 1;
Rear = - 1;
}
else
{
printf(" %d deleted", queue[Front]);
Front++;
}
}


//fnctions of linear array



/* Create an empty queue */
void create()
{
front = rear = NULL;
}

/* Returns queue size */
void queuesize()
{
printf(" Queue size : %d", count);
}
bool isfull()
{
   if(count==size)
   {
       //printf("siz:%d count:%d ",size,count);
       return true;//returns true if queue is full  
   }
  
   //else returns false
   return false;
}

bool isempty()
{
   if(count==0)
   {
       return true;//returns true if queue is empty  
   }
   return false;//returns false if not
}

/* Enqueing the queue */
void enq(int data)
{
   if(!isfull())
   {
       if (rear == NULL)
{
rear = (struct node *)malloc(1*sizeof(struct node));
rear->ptr = NULL;
rear->info = data;
front = rear;
}
else
{
temp=(struct node *)malloc(1*sizeof(struct node));
rear->ptr = temp;
temp->info = data;
temp->ptr = NULL;

rear = temp;
}
  
count++;
   }
   else
   {
       printf("Queue is full ");  
   }
}

/* Displaying the queue elements */
void qpeek()
{
front1 = front;

if ((front1 == NULL) && (rear == NULL))
{
printf("Queue is empty");
return;
}
else
printf("%d", front1->info);
}

/* Dequeing the queue */
void deq()
{
front1 = front;
    if(!isempty())
    {
if (front1 == NULL)
{
printf(" Error: Trying to display elements from empty queue");
return;
}
else
if (front1->ptr != NULL)
{
front1 = front1->ptr;
printf(" Dequed value : %d", front->info);
free(front);
front = front1;
}
else
{
printf(" Dequed value : %d", front->info);
free(front);
front = NULL;
rear = NULL;
}
count--;
   }
   else
   {
       printf("Queue is empty..");  
   }   
  
}

/* Returns the front element of queue */
int frontelement()
{
if ((front != NULL) && (rear != NULL))
return(front->info);
else
return 0;
}

/* Display if queue is empty or not */
void empty()
{
if ((front == NULL) && (rear == NULL))
printf(" Queue empty");
else
printf("Queue not empty");
}

/*

output1:
  
Enter N (number):(<51)5


Circular Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 1

Enter number: 0
queue is full

Circular Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 2

41 deleted

Circular Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 1

Enter number: 10


Circular Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 3

18467


Circular Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 0


Process exited normally.
Press any key to continue . . .  


output2:
  
   Enter N (number):(<51)22


Linear Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 4
Queue is full


Linear Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 2

Dequed value : 41

Linear Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 1

Enter number: 33


Linear Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 3
18467

Linear Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 2

Dequed value : 18467

Linear Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 1

Enter number: 5


Linear Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 3
6334

Linear Queue:
1. Enqueue
2. Dequeue
3. Peek
4.isFull
5.isEmpty
0. Exit
Enter Choice 0-5? : 0


Process exited normally.
Press any key to continue . . .

*/