priority queue with linked list
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
#include <stdio.h>
#include <stdlib.h>
#include "PQLL_Mahato.h"
int peek(Node** head)
{
return (*head)->data;
}
//Removes the element with the
//highest priority from the list
void dequeue(Node** head)
{
Node* temp = *head;
(*head) = (*head)->next;
free(temp);
}
// function to check is list is empty
int isEmpty(Node** head)
{
return (*head) == NULL;
}
Node* newNode(char d, int p)
{
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = d;
temp->priority = p;
temp->next = NULL;
return temp;
}
// Function to enqueue according to priority
void enqueue (Node** head, char d, int p)
{
Node* start = (*head);
// Create new Node
Node* temp = newNode(d, p);
// special case: The head of list has lesser
// priority than new node. So insert new
// node before head node and change head node.
if ((*head)->priority > p) {
// Insert New node before head
temp->next = *head;
(*head) = temp;
}
else {
// Traverse the list and find a
// position to insert a new node
while (start->next != NULL &&
start->next->priority < p){
start = start->next;
}
// Either at the ends of the list
// or at the required position
temp->next = start->next;
start->next = temp;
}
}
/*
* File: PQLL_Mahato.h
* Author: Aaditya
*
* Created on April 7, 2020, 9:44 PM
*/
#ifndef PQLL_MAHATO_H
#define PQLL_MAHATO_H
#ifdef __cplusplus
extern "C" {
#endif
///Node
typedef struct node {
char data;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* File: PQLLMain_Mahato.c
* Author: Aaditya
*
* Created on April 8, 2020, 9:45 PM
*/
#include <stdio.h>
#include <stdlib.h>
#include "PQLL_Mahato.h"
int main(int argc, char** argv) {
//create a new priority queue
Node* pq = newNode('B' , 1);
enqueue(&pq, 'C' , 2);
enqueue(&pq, 'D' , 3);
enqueue(&pq, 'A' , 0);
while (!isEmpty(&pq)) {
printf("%c ", peek(&pq));
dequeue(&pq);
}
printf("\n");
return (EXIT_SUCCESS);
}
//Lower values indicate higher priority
int priority;
struct node* next;
} Node;
int peek(Node** head);
void dequeue(Node** head);
void enqueue(Node** head, char d, int p);
int isEmpty(Node** head);
Node* newNode(char d, int p);
#ifdef __cplusplus
}
#endif
#endif /* PQLL_MAHATO_H */
6 years ago
15
Purchase the answer to view it

- AnswerDocument.docx
Purchase the answer to view it

- Solution.zip