पूर्णांक मानों वाली एक क्रमबद्ध डबल लिंक्ड सूची को देखते हुए। लक्ष्य उन त्रिगुणों को खोजना है जिनका उत्पाद दिए गए मान x के बराबर है। यदि इनपुट लिंक की गई सूची 3−4−1−2 है और x 6 है तो गिनती 1 (तीन गुना (3,1,2)) होगी।>
उदाहरण के लिए
इनपुट
linked list: [ 3−4−13−5−10−10−0 ] x=20
आउटपुट
Count of triplets in a sorted doubly linked list whose product is equal to a given value x are: 2
स्पष्टीकरण
Triplets will be: ( 3,4,13 ) and ( 10,10,0 )
इनपुट
linked list: [ 4−3−1−5−2−4−2 ] x=8
आउटपुट
Count of triplets in a sorted doubly linked list whose product is equal to a given value x are: 6
स्पष्टीकरण
Triplets will be: ( 4,3,1), (1,5,2), (3,1,4), (1,5,2), (4,2,2) and (2,4,2),
नीचे दिए गए कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -
इस दृष्टिकोण में।
-
हम एक लिंक्ड लिस्ट नोड को स्ट्रक्चर के रूप में ले रहे हैं जिसमें इंट डेटा पार्ट और सेल्फ-रेफरेंशियल नेक्स्ट और पिछले पॉइंटर्स हैं।
-
फ़ंक्शन इन्सर्ट_नोड (स्ट्रक्चर ब्लॉक ** हेड, इंट डेटा) डेटा के साथ लिंक की गई सूची के शीर्ष पर नोड जोड़ता है।
-
फ़ंक्शन Product_x(struct block* head, int x) पॉइंटर को डबल लिंक की गई सूची और पूर्णांक x के शीर्ष पर ले जाता है और डेटा भाग के उत्पाद x के रूप में नोड्स के ट्रिपल की गिनती देता है।
-
प्रारंभिक गणना 0 के रूप में लें।
-
स्ट्रक्चर ब्लॉक प्रकार के तीन पॉइंटर्स temp_1, temp_2 और temp_3 लें।
-
temp_1 से शुरू होकर लिंक की गई सूची के शीर्ष की ओर इशारा करते हुए, temp_2, temp_1 के बगल में और temp_3 अगले temp_3 की ओर इशारा करते हुए, हमारे पास पहले तीन नोड्स की ओर इशारा करते हुए तीन पॉइंटर्स हैं।
-
इन पॉइंटर्स का उपयोग करके अंतिम नोड तक ट्रैवर्स करें।
-
यदि उपरोक्त सभी बिंदुओं के वर्तमान डेटा भागों में x के रूप में उत्पाद है। ((temp_1−>data + temp_2−>data + temp_3−>data) ==x) फिर इंक्रीमेंट काउंट।
-
अंत में हमने ट्रिपल की संख्या गिन ली और गिनती में संग्रहीत किया।
-
परिणाम के रूप में वापसी की गिनती।
उदाहरण
#include <iostream> using namespace std; struct block{ int data; struct block *next, *prev; }; void insert_node(struct block** head, int data){ struct block* ptr = new block(); ptr−>data = data; ptr−>next = NULL; ptr−>prev = NULL; if ((*head) == NULL){ (*head) = ptr; } else { ptr−>next = *head; (*head)−>prev = ptr; (*head) = ptr; } } int sum_x(struct block* head, int x){ int count = 0; struct block *temp_1, *temp_2, *temp_3; for (temp_1 = head; temp_1!= NULL; temp_1 = temp_1−>next){ for (temp_2 = temp_1−>next; temp_2 != NULL; temp_2 = temp_2−>next){ for (temp_3 = temp_2−>next; temp_3!= NULL; temp_3 = temp_3−>next){ if ((temp_1−>data + temp_2−>data + temp_3−>data) == x){ count++; } } } } return count; } int main(){ struct block* head = NULL; insert_node(&head, 200); insert_node(&head, 100); insert_node(&head, 16); insert_node(&head, 14); insert_node(&head, 10); insert_node(&head, 10); insert_node(&head, 2); int x = 22; cout<<"Count of triplets in a sorted doubly linked list whose sum is equal to a given value x are: "<<sum_x(head, x); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Count of triplets in a sorted doubly linked list whose sum is equal to a given value x are: 1