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

C++ में एक लिंक्ड सूची में न्यूनतम आवृत्ति तत्वों की गणना करें

कार्य को देखते हुए किसी दी गई लिंक्ड सूची में न्यूनतम आवृत्ति तत्वों की गणना करना है जिसमें डुप्लिकेट तत्व हैं।

एक लिंक्ड सूची एक डेटा संरचना है जिसमें डेटा को क्रमानुसार संग्रहीत किया जाता है, एक सूची की तरह प्रत्येक तत्व अगले तत्व से जुड़ा होता है।

किसी लिंक की गई सूची में किसी तत्व की आवृत्ति का तात्पर्य लिंक की गई सूची में किसी तत्व के होने की संख्या से है। समस्या के अनुसार हमें लिंक की गई सूची में न्यूनतम आवृत्ति की गणना करनी होगी।

मान लीजिए कि हमारे पास एक लिंक की गई सूची है, 1, 1, 3, 1, 3, 4, 6; जहां न्यूनतम आवृत्ति एक है, इसलिए हमें न्यूनतम आवृत्ति वाले तत्वों की गणना करनी होगी। कम से कम आवृत्ति के साथ केवल दो तत्व 4 और 6 हैं इसलिए गिनती 2 है।

इनपुट -

linked list 1->1->2->2->2->3->3

आउटपुट -

count is 2

स्पष्टीकरण -

उपरोक्त उदाहरण में न्यूनतम आवृत्ति 2 है और न्यूनतम आवृत्ति वाले दो तत्व हैं अर्थात 1 और 3, इसलिए गणना 2 है।

इनपुट -

linked list = 1->2->3->2->4->2->5

आउटपुट -

count is 4

स्पष्टीकरण -

उपरोक्त उदाहरण में न्यूनतम आवृत्ति 1 है और न्यूनतम आवृत्ति वाले 4 तत्व हैं अर्थात 1, 3, 4, और 5, इसलिए गणना 4 है।

निम्नलिखित कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है

  • लिंक की गई सूची को परिभाषित करें और लिंक की गई सूची में तत्वों को पुश करें।

  • न्यूनतम आवृत्ति वाले तत्वों की गिनती खोजने के लिए न्यूनतम फ़ंक्शन में, संख्याओं की आवृत्तियों को संग्रहीत करने के लिए एक मानचित्र "mymap" घोषित करें।

  • सूची को पार करें और तत्वों की आवृत्ति (घटना) को mymap में संग्रहीत करें।

  • जब हमने फ़्रीक्वेंसी ढूंढ ली और फ़्रीक्वेंसी को mymap में स्टोर कर लिया, तो न्यूनतम फ़्रीक्वेंसी पाएं।

  • mymap में होने वाली आवृत्ति संख्या की गणना करें।

  • गिनती वापस करें।

उदाहरण

#include <iostream>
#include <unordered_map>
#include <climits>
using namespace std;
struct Node {
   int key;
   struct Node* next;
};
// to push the values in the stack
void push(struct Node** head_ref, int new_key){
   struct Node* new_node = new Node;
   new_node->key = new_key;
   new_node->next = (*head_ref);
   (*head_ref) = new_node;
}
// Function to count minimum frequency elements
// in the linked list
int minimum(struct Node* head){
   // Store frequencies of all nodes.
   unordered_map<int, int> mymap;
   struct Node* current = head;
   while (current != NULL){
      int value = current->key;
      mymap[value]++;
      current = current->next;
   }
   // Find min frequency
   current = head;
   int min = INT_MAX, count = 0;
   for (auto it = mymap.begin(); it != mymap.end(); it++){
      if (it->second <= min){
         min = it->second;
      }
   }
   // Find count of min frequency elements
   for (auto it = mymap.begin(); it != mymap.end(); it++){
      if (it->second == min){
         count += (it->second);
      }
   }
   return count;
}
int main(){
   /* Starting with an empty list */
   struct Node* head = NULL;
   int x = 21;
   push(&head, 30);
   push(&head, 50);
   push(&head, 61);
   push(&head, 40);
   push(&head, 30);
   cout <<"count is: "<<minimum(head) << endl;
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो हमें निम्न आउटपुट मिलेगा -

count is: 3

  1. C++ में एक बहुस्तरीय लिंक्ड सूची को समतल करें

    इस समस्या में, हमें एक बहुस्तरीय लिंक्ड सूची दी गई है। हमारा काम एक बहुस्तरीय लिंक्ड सूची को समतल करने के लिए एक प्रोग्राम बनाना है। फ़्लैटनिंग ऑपरेशन इस तरह से किया जाता है कि पहले स्तर के नोड्स पहले लिंक की गई सूची में होंगे और फिर दूसरे स्तर के नोड होंगे। बहुस्तरीय लिंक की गई सूची एक बहु-आयामी

  1. सी ++ में क्रमबद्ध और घुमाए गए लिंक्ड सूची में घूर्णन की गणना करें

    हमें एक लिंक्ड लिस्ट दी गई है। सूची को पहले क्रमबद्ध किया जाता है और फिर K संख्या के नोड्स द्वारा घुमाया जाता है। लक्ष्य K का मान ज्ञात करना है। यदि हमें इनपुट के रूप में लिंक की गई सूची नीचे दी गई है, जिसे K नोड्स की संख्या द्वारा घुमाया जाता है - तब मूल अवश्य रहा होगा - और हम देख सकते हैं K

  1. C++ में सर्कुलर लिंक्ड लिस्ट में नोड्स गिनें

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