Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार


हमें डेटा और प्राथमिकता एक पूर्णांक मान के रूप में दी गई है और कार्य दिए गए प्राथमिकता के अनुसार डबल लिंक्ड लिस्ट बनाना और परिणाम प्रदर्शित करना है।

कतार एक FIFO डेटा संरचना है जिसमें पहले डाला गया तत्व सबसे पहले हटाया जाता है। प्राथमिकता कतार एक प्रकार की कतार है जिसमें तत्वों को प्राथमिकता के आधार पर डाला या हटाया जा सकता है। इसे कतार, स्टैक या लिंक्ड लिस्ट डेटा संरचना का उपयोग करके कार्यान्वित किया जा सकता है। प्राथमिकता कतार निम्नलिखित नियमों का पालन करके कार्यान्वित की जाती है −

  • सबसे अधिक प्राथमिकता वाले डेटा या तत्व को सबसे कम प्राथमिकता वाले डेटा या तत्व से पहले निष्पादित किया जाएगा।
  • यदि दो तत्वों की प्राथमिकता समान है तो वे उस क्रम में निष्पादित होंगे जिस क्रम में उन्हें सूची में जोड़ा गया है।
  • प्राथमिकता कतार को लागू करने के लिए डबल लिंक्ड लिस्ट का एक नोड तीन भागों में होगा −

    • डेटा − यह पूर्णांक मान संग्रहीत करेगा।
    • अगला पता − यह अगले नोड का पता संग्रहीत करेगा
    • पिछला पता − यह पिछले नोड का पता संग्रहीत करेगा
    • प्राथमिकता − यह प्राथमिकता संग्रहीत करेगा जो एक पूर्णांक मान है। यह 0-10 से हो सकता है जहां 0 उच्चतम प्राथमिकता दर्शाता है और 10 निम्नतम प्राथमिकता दर्शाता है।

    उदाहरण

    इनपुट -

    C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार 

    आउटपुट- 

    C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार

    एल्गोरिदम

    शुरुआत चरण 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

  1. C++ में डौबली लिंक्ड लिस्ट का आकार ढूंढना C++ में डौबली लिंक्ड लिस्ट का आकार ढूंढना

    इस समस्या में, हमें एक डौबली लिंक्ड लिस्ट दी गई है। हमारा कार्य C++ में डौबली लिंक्ड लिस्ट का आकार ढूंढने के लिए एक प्रोग्राम बनाना है। डौबली लिंक्ड लिस्ट एक विशेष प्रकार की लिंक्ड लिस्ट है जिसमें नेविगेशन दोनों तरीकों से संभव है, आगे और पीछे आसानी से सिंगल लिंक्ड लिस्ट की तुलना में। डौबली लिंक्ड ल

  1. C++ में लिंक्ड लिस्ट का उपयोग करके दो बहुपदों को जोड़ना C++ में लिंक्ड लिस्ट का उपयोग करके दो बहुपदों को जोड़ना

    इस अवधारणा को बेहतर ढंग से समझने के लिए, पहले आवश्यक सभी बुनियादी बातों को दोहरा लेते हैं। लिंक्ड लिस्ट एक डेटा संरचना है जो प्रत्येक तत्व को लिस्ट के एक नोड में ऑब्जेक्ट के रूप में संग्रहीत करती है। प्रत्येक नोड में दो भाग होते हैं: डेटा और अगले नोड का लिंक। बहुपद (Polynomial) एक गणितीय अभिव्यक्ति

  1. C++ प्रोग्राम: लिंक्ड लिस्ट का उपयोग करके ग्राफ प्रतिनिधित्व करना C++ प्रोग्राम: लिंक्ड लिस्ट का उपयोग करके ग्राफ प्रतिनिधित्व करना

    एक ग्राफ का इन्सिडेंस मैट्रिक्स ग्राफ को मेमोरी में स्टोर करने का एक और प्रतिनिधित्व है। यह मैट्रिक्स एक वर्ग मैट्रिक्स नहीं है। इन्सिडेंस मैट्रिक्स का ऑर्डर V x E होता है। जहां V वर्टेक्स की संख्या है और E ग्राफ में एज की संख्या है। इस मैट्रिक्स की प्रत्येक पंक्ति में हम वर्टेक्स रखते हैं, और प्रत