कार्य को देखते हुए किसी दी गई लिंक्ड सूची में न्यूनतम आवृत्ति तत्वों की गणना करना है जिसमें डुप्लिकेट तत्व हैं।
एक लिंक्ड सूची एक डेटा संरचना है जिसमें डेटा को क्रमानुसार संग्रहीत किया जाता है, एक सूची की तरह प्रत्येक तत्व अगले तत्व से जुड़ा होता है।
किसी लिंक की गई सूची में किसी तत्व की आवृत्ति का तात्पर्य लिंक की गई सूची में किसी तत्व के होने की संख्या से है। समस्या के अनुसार हमें लिंक की गई सूची में न्यूनतम आवृत्ति की गणना करनी होगी।
मान लीजिए कि हमारे पास एक लिंक की गई सूची है, 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