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 . . .
*/
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.