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

एल्गोरिदम
शुरुआत चरण 1-> एक स्ट्रक्चर Node घोषित करें info, priority घोषित करें struct Node *prev, *next घोषित करें चरण 2-> फ़ंक्शन push(Node** fr, Node** rr, int n, int p) में Node* news = (Node*)malloc(sizeof(Node)) सेट करें news->info = n सेट करें news->priority = p सेट करें यदि *fr == NULL तो, *fr = news सेट करें *rr = news सेट करें news->next = NULL सेट करें अन्यथा यदि p <= (*fr)->priority तो, news->next = *fr सेट करें (*fr)->prev = news->next सेट करें *fr = news सेट करें अन्यथा यदि p > (*rr)->priority तो, news->next = NULL सेट करें (*rr)->next = news सेट करें news->prev = (*rr)->next सेट करें *rr = news सेट करें अन्यथा Node* start = (*fr)->next सेट करें लूप जब तक start->priority > p start = start->next सेट करें (start->prev)->next = news सेट करें news->next = start->prev सेट करें news->prev = (start->prev)->next सेट करें start->prev = news->next सेट करें चरण 3-> फ़ंक्शन int peek(Node *fr) में fr->info वापस करें चरण 4-> फ़ंक्शन bool isEmpty(Node *fr) में (fr == NULL) वापस करें चरण 5-> फ़ंक्शन int pop(Node** fr, Node** rr) में Node* temp = *fr सेट करें res = temp->info सेट करें (*fr) = (*fr)->next सेट करें free(temp) यदि *fr == NULL तो, *rr = NULL सेट करें res वापस करें चरण 6-> फ़ंक्शन int main() में Node *front = NULL, *rear = NULL घोषित करें और असाइन करें push(&front, &rear, 4, 3) फ़ंक्शन कॉल करें push(&front, &rear, 3, 2) फ़ंक्शन कॉल करें push(&front, &rear, 5, 2) फ़ंक्शन कॉल करें push(&front, &rear, 5, 7) फ़ंक्शन कॉल करें push(&front, &rear, 2, 6) फ़ंक्शन कॉल करें push(&front, &rear, 1, 4) फ़ंक्शन कॉल करें pop(&front, &rear) फ़ंक्शन कॉल से प्राप्त परिणाम प्रिंट करें peek(front) फ़ंक्शन कॉल से प्राप्त परिणाम प्रिंट करें रुकें
उदाहरण
#include <bits/stdc++.h> using namespace std; //डबल लिंक्ड लिस्ट नोड struct Node { int info; int priority; struct Node *prev, *next; }; //नया नोड सम्मिलित करना void push(Node** fr, Node** rr, int n, int p) { Node* news = (Node*)malloc(sizeof(Node)); news->info = n; news->priority = p; // यदि लिंक्ड लिस्ट खाली है if (*fr == NULL) { *fr = news; *rr = news; news->next = NULL; } else { // यदि p सामने के नोड की प्राथमिकता से कम या बराबर है // तो नोड को सामने सम्मिलित करें। if (p <= (*fr)->priority) { news->next = *fr; (*fr)->prev = news->next; *fr = news; } else if (p > (*rr)->priority) { news->next = NULL; (*rr)->next = news; news->prev = (*rr)->next; *rr = news; } else { // वह स्थिति ढूंढें जहां हमें नया नोड सम्मिलित करना है। Node* start = (*fr)->next; while (start->priority > p) start = start->next; (start->prev)->next = news; news->next = start->prev; news->prev = (start->prev)->next; start->prev = news->next; } } } //अंतिम मान int peek(Node *fr) { return fr->info; } bool isEmpty(Node *fr) { return (fr == NULL); } int pop(Node** fr, Node** rr) { Node* temp = *fr; int res = temp->info; (*fr) = (*fr)->next; free(temp); if (*fr == NULL) *rr = NULL; return res; } // मुख्य फ़ंक्शन int main() { Node *front = NULL, *rear = NULL; push(&front, &rear, 4, 3); push(&front, &rear, 3, 2); push(&front, &rear, 5, 2); push(&front, &rear, 5, 7); push(&front, &rear, 2, 6); push(&front, &rear, 1, 4); printf("%d\n", pop(&front, &rear)); printf("%d\n", peek(front)); return 0; }आउटपुट
5 3