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

Please write in C language, thank you. Write the implementation file, priority q

ID: 3708858 • Letter: P

Question

Please write in C language, thank you.

Write the implementation file, priority queue.c, for the interface in the given header file, priority queue.h. Turn in your priority_queue.c file and a suitable main program, main.c, that tests the opaque object. priority queue.h is attached as a file to this assignment but is also listed here for your convenience. Your implementation file should implement the priority queue using a heap data structure. Submissions that implement the priority queue without using a heap will not receive any credit. #ifndef #define PRIORITY-QUEUE-H PRIORITY-QUEUE-H enum status FAILURE, SUCCESS}; typedef enum status Status; enum boolean FALSE, TRUE ; typedef enum boolean Boolean typedef void* PRIORITY QUEUE; //Precondition: Creates an empty priority queue that can store integer data items /I with different integer priority. Higher // integer values indicate higher priority in the queue. For example, consider the // priority and the data value to be key-value pairs where the priority is the key /I and the data is the value. The queue could hold 21,10 and 35, 5 so that the /I first item to be removed from the queue would be the data value 5 because // it has higher priority (35) than the data value 10 which only has (21) //Postcondition: Returns the handle to an empty priority queue. PRIORITY QUEUE priority_queue_init_default(void); //Precondition: hQueue is a handle to a valid priority queue opaque object // Higher priority_level values indicate higher priority in the queue /I data_item is simply a value we are storing in the queue. //Postcondition: returns SUCCESS if the item was successfully added to the queue /I and FAILURE otherwise Status priority_queue_insert (PRIORITY QUEUE hQueue, int priority_level, int data_item); //Precondition: hQueue is a handle to a valid priority queue opaque object. //Postcondition: returns SUCCESS if the highest priority item was removed from the queue /I and FAILURE if the queue was empty Status priority_queue_service(PRIORITY QUEUE hQueue); //Precondition: hQueue is a handle to a valid priority queue opaque object. //Postcondition: returns a copy of the data value for the // highest priority item in the queue. Sets the variable at the address // referred to in pStatus to SUCCESS if there is // at least one item in the queue and FAILURE otherwise. If pStatus is // passed in as NULL then the status value is ignored for this run of the function int priority_queue_front (PRIORITY QUEUE hQueue, Status* pStatus); //Precondition: hQueue is a handle to a valid priority queue opaque object. //Postcondition: returns TRUE if the priority_queue is empty and FALSE otherwise

Explanation / Answer

Priority code:

#include <functional>

#include <queue>

#include <vector>

#include <iostream>

template<typename T> void print_queue(T& q) { while(!q.empty())

{

std::cout << q.top() << " ";

q.pop();

}

std::cout << ' ';

}

int main()

{

std::priority_queue<int> q;

for(int n : {1,8,5,6,3,4,0,9,7,2})

q.push(n);

print_queue(q);

std::priority_queue<int, std::vector<int>, std::greater<int> > q2;

for(int n : {1,8,5,6,3,4,0,9,7,2})

q2.push(n);

print_queue(q2); // Using lambda to compare elements. auto cmp = [](int left, int right)

{

return (left ^ 1) < (right ^ 1);

};

std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);

for(int n : {1,8,5,6,3,4,0,9,7,2})

q3.push(n);

print_queue(q3);

}

Output:


9 8 7 6 5 4 3 2 1 0

0 1 2 3 4 5 6 7 8 9

8 9 6 7 4 5 2 3 0 1