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

C में लिंक्ड लिस्ट का उपयोग करके प्रायोरिटी क्यू (Priority Queue)


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

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

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

प्रायोरिटी क्यू को लागू करने के लिए एक लिंक्ड लिस्ट का नोड तीन भागों को समाहित करेगा -

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

उदाहरण

इनपुट

C में लिंक्ड लिस्ट का उपयोग करके प्रायोरिटी क्यू (Priority Queue)

आउटपुट

C में लिंक्ड लिस्ट का उपयोग करके प्रायोरिटी क्यू (Priority Queue)

एल्गोरिदम

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
  1. C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार C++ में डबल लिंक्ड लिस्ट का उपयोग करके प्राथमिकता कतार

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

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

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

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

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