Write your own class that implements a priority queue using a maximal heap. Use
ID: 3701612 • Letter: W
Question
Write your own class that implements a priority queue using a maximal heap. Use the following UML diagram and attribute descriptions. Place all the code for the class in a single header file named HeapQueue.h.
Class Attributes:
heap - a pointer that holds a dynamically allocated array of integers.
size - stores the size of the array.
bottom - keeps track of the bottom of the heap.
constructor - accepts an integer as it's only argument and dynamically allocates an array with that many elements, stores the argument in size, and initializes bottom to -1. Address of the new array is stored in heap.
destructor - deallocates the array
enqueue - if there's enough free space in the heap, adds it's argument to the heap. Throws an exception otherwise.
dequeue - if the heap isn't empty, removes the top of the heap from the heap. Throws an exception otherwise.
top - returns a copy of the value on the top of the heap, doesn't change the heap in any way. Throws an exception if the heap is empty.
ReHeapUp - called by enqueue to rebuild the heap.
ReHeapDown - called by dequeue to rebuild the heap.
Notes:
The heap is empty if bottom is -1.
The top of the heap is always in element 0.
None of the class methods interact with the user in any way (no cin or cout statements).
Implement a maximal heap, meaning the top of the heap always has the biggest value in the heap.
Your class must use the listed attributes, and only those attributes.
You can choose whatever type of exception you want to throw.
The methods don't catch them, they just throw them.
Be sure to include preprocessor guards.
Be sure to mark accessors const.
HeapQueue -heap: int -size: int bottom: int +HeapQueue(s: int) HeapQueue(): tenqueue(i: int): void +dequeue): void +top(): int -ReHeapUp(): void -ReHeapDown): voidExplanation / Answer
#include<stdio.h>
#include<math.h>
#define MAX 100 /*Declaring the maximum size of the queue*/
void swap(int*,int*);
int main()
{
int n=0,a[MAX],choice,num,data,z,bottom=0;
// n= number of nodes in queue, bottom= bottom of array is initialized to 0, z= to store element for dequeue
void display(int[],int);
void enqueue(int[],int,int,int);
int dequeue(int[],int,int);
while(1)
{
printf("1.Enqueue ");
printf("2.Dequeue ");
printf("3.Display ");
printf("4.Quit ");
printf("Select your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1: /* Enqueue element*/
printf("Enter data to be enqueue : ");
scanf("%d",&data);
enqueue(a,n,data,bottom);
n++;
break;
case 2:
z=dequeue(a,n+1,bottom);
if(z!=0)
printf("nThe dequeue value is : %d n",z);
if(n>0)
n--;
break;
case 3: /*Display the elements of the queue*/
printf(" ");
display(a,n);
break;
case 4:
return;
default:
printf("Invalid choice.n");
}
}
}
/*This function enqueues an element in the queue*/
void enqueue(int a[],int heapsize,int data,int bottom)
{
int m,n;
int ReheapUp(int);
if(heapsize==MAX)
{
printf("Queue Is Full!!n");
return;
}
m=bottom+heapsize;
a[m]=data;
while(m>bottom&&a[n=ReheapUp(m)]<a[m])
{
swap(&a[n],&a[m]);
m=n;
}
}
/*This function deletes an element from the queue*/
int dequeue(int a[],int heapsize,int bottom)
{
int data,m,c,d,max_Reheapdown,t;
int left(int);
int right(int);
if(heapsize==1)
{
printf("Queue Is Empty!!n");
return 0;
}
t=a[bottom];
swap(&a[bottom],&a[heapsize-1]);
m=bottom;
heapsize--;
while(1)
{
if((c=left(m))>=heapsize)
break;
if((d=right(m))>=heapsize)
max_Reheapdown=c;
else
max_Reheapdown=(a[c]>a[d])?c:d;
if(a[m]>=a[max_Reheapdown])
break;
swap(&a[m],&a[max_Reheapdown]);
m=max_Reheapdown;
}
return t;
}
/*Returns ReheapUp index*/
int ReheapUp(int m)
{
float p;
p=((float)m/2.0)-1.0;
return ceil(p);
}
int left(int m) /*Returns leftReheapdown */
{
return 2*m+1;
}
int right(int m) /*Returns rightReheapdown */
{
return 2*m+2;
}
void display(int a[],int n) /*Displays the queue*/
{
int m;
if(n==0)
{
printf("Queue Is Empty!!n");
return;
}
for(m=0;m<n;m++)
printf("%d ",a[m]);
printf(" ");
}
/*For swapping two elements*/
void swap(int*x,int*y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.