हमें डेटा और पूर्णांक मान के रूप में प्राथमिकता दी गई है और कार्य दी गई प्राथमिकता के अनुसार एक लिंक्ड लिस्ट बनाना और परिणाम प्रदर्शित करना है।
क्यू एक FIFO डेटा संरचना है जिसमें पहले डाला गया तत्व हटाया जाने वाला पहला होता है। एक प्रायोरिटी क्यू एक प्रकार की क्यू है जिसमें तत्वों को प्राथमिकता के आधार पर डाला या हटाया जा सकता है। इसे क्यू, स्टैक या लिंक्ड लिस्ट डेटा संरचना का उपयोग करके लागू किया जा सकता है। प्रायोरिटी क्यू निम्नलिखित नियमों का पालन करके लागू किया जाता है -
- सबसे अधिक प्राथमिकता वाले डेटा या तत्व को सबसे कम प्राथमिकता वाले डेटा या तत्व से पहले निष्पादित किया जाएगा।
- यदि दो तत्वों की प्राथमिकता समान है तो उन्हें उस क्रम में निष्पादित किया जाएगा जिस क्रम में वे सूची में जोड़े गए हैं।
प्रायोरिटी क्यू को लागू करने के लिए एक लिंक्ड लिस्ट का नोड तीन भागों को समाहित करेगा -
- डेटा (Data) - यह पूर्णांक मान स्टोर करेगा।
- एड्रेस (Address) - यह अगले नोड का पता स्टोर करेगा।
- प्राथमिकता (Priority) - यह प्राथमिकता स्टोर करेगा जो एक पूर्णांक मान है। यह 0-10 से हो सकता है जहां 0 उच्चतम प्राथमिकता को दर्शाता है और 10 निम्नतम प्राथमिकता को दर्शाता है।
उदाहरण
इनपुट

आउटपुट

एल्गोरिदम
Start
Step 1 -> एक स्ट्रक्चर नोड घोषित करें
डेटा, प्राथमिकता घोषित करें
एक स्ट्रक्चर नोड* नेक्स्ट घोषित करें
Step 2 -> फंक्शन Node* newNode(int d, int p) में
Node* temp = (Node*)malloc(sizeof(Node)) सेट करें
temp->data = d सेट करें
temp->priority = p सेट करें
temp->next = NULL सेट करें
temp लौटाएं
Step 3 -> फंक्शन int peek(Node** head) में
(*head)->data लौटाएं
Step 4 -> फंक्शन void pop(Node** head) में
Node* temp = *head सेट करें
(*head) = (*head)->next सेट करें
free(temp)
Step 5 -> फंक्शन push(Node** head, int d, int p) में
Node* start = (*head) सेट करें
Node* temp = newNode(d, p) सेट करें
यदि (*head)->priority > p तो,
temp->next = *head सेट करें
(*head) = temp सेट करें
अन्यथा
लूप जब तक start->next != NULL && start->next->priority < p
start = start->next सेट करें
temp->next = start->next सेट करें
start->next = temp सेट करें
Step 6 -> फंक्शन int isEmpty(Node** head) में
(*head) == NULL लौटाएं
Step 7 -> फंक्शन int main() में
Node* pq = newNode(7, 1) सेट करें
फंक्शन push(&pq, 1, 2) कॉल करें
फंक्शन push(&pq, 3, 3) कॉल करें
फंक्शन push(&pq, 2, 0) कॉल करें
लूप जब तक (!isEmpty(&pq))
peek(&pq) से प्राप्त परिणाम प्रिंट करें
फंक्शन pop(&pq) कॉल करें
Stop
उदाहरण
#include <stdio.h>
#include <stdlib.h>
// प्रायोरिटी नोड
typedef struct node {
int data;
int priority;
struct node* next;
} Node;
Node* newNode(int d, int p) {
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = d;
temp->priority = p;
temp->next = NULL;
return temp;
}
int peek(Node** head) {
return (*head)->data;
}
void pop(Node** head) {
Node* temp = *head;
(*head) = (*head)->next;
free(temp);
}
void push(Node** head, int d, int p) {
Node* start = (*head);
Node* temp = newNode(d, p);
if ((*head)->priority > p) {
temp->next = *head;
(*head) = temp;
} else {
while (start->next != NULL && start->next->priority < p) {
start = start->next;
}
// या तो सूची के अंत में
// या आवश्यक स्थिति पर
temp->next = start->next;
start->next = temp;
}
}
// क्यू खाली है या नहीं जांचने का फंक्शन
int isEmpty(Node** head) {
return (*head) == NULL;
}
// मुख्य फंक्शन
int main() {
Node* pq = newNode(7, 1);
push(&pq, 1, 2);
push(&pq, 3, 3);
push(&pq, 2, 0);
while (!isEmpty(&pq)) {
printf("%d ", peek(&pq));
pop(&pq);
}
return 0;
}
आउटपुट
2 7 1 3