सेल्फ-ऑर्गेनाइजिंग लिस्ट मूल रूप से दी गई आइटम्स की रेंज की सूची को अंतिम खोजे गए आइटम के आधार पर अपडेट करती है। इस विधि में, अनुक्रमिक खोज दृष्टिकोण का उपयोग किया जाता है। यह एल्गोरिदम अधिक महत्वपूर्ण डेटा को सूची की शुरुआत में शिफ्ट करता है। इस खोज तकनीक की समय जटिलता O(n) है।
एल्गोरिदम
शुरुआत फंक्शन FibonacciSearch(). 'start+fib[index-2]' एक्सप्रेशन का उपयोग करके मिड मान की गणना करें। यदि चुना गया आइटम मिड इंडेक्स पर मान के बराबर है, तो परिणाम प्रिंट करें और मेन पर लौटें। यदि यह मिड इंडेक्स पर मान से कम है, तो बाएं उप-सरणी के साथ आगे बढ़ें। यदि यह मिड इंडेक्स पर मान से अधिक है, तो दाएं उप-सरणी के साथ आगे बढ़ें। यदि गणना किया गया मिड मान स्टार्ट या एंड के बराबर है तो आइटम सरणी में नहीं मिला। अंत
उदाहरण कोड
#include<iostream> using namespace std; struct node { int d; node *next; }; node* CreateNode(int d) { node *newnode = new node; newnode->d = d; newnode->next = NULL; return newnode; } node* InsertIntoList(node *head, int d) { node *temp = CreateNode(d); node *t = new node; t = head; if(head == NULL) { head = temp; return head; } else { while(t->next != NULL) t = t->next; t->next = temp; } return head; } void Display(node *head) { node *temp = new node; temp = head; cout<<"\n सूची की स्थिति है :"; while(temp->next != NULL) { cout<<"->"<<temp->d; temp = temp->next; } } node* SearchItem(node *head, int item) { int flag = 0; node *temp = new node; node *t = new node; temp = head; if(temp->d == item) { cout<<"\nआइटम हेड नोड पर मिला"; flag = 5; Display(head); return head; } else { while((temp->next)->next != NULL) { if((temp->next)->d == item) { cout<<"\nआइटम मिला"; flag = 5; break; } temp = temp->next; } t = (temp->next)->next; (temp->next)->next = head; head = temp->next; temp->next = t; if(flag == 5) Display(head); else cout<<"\nआइटम नहीं मिला।"; } return head; } int main() { int i, n; char ch; node *head = new node; head = NULL; for(i = 1; i < 20; i++) head = InsertIntoList(head, i); Display(head); up: cout<<"\nखोजे जाने वाले एलिमेंट को दर्ज करें: "; cin>>n; head = SearchItem(head, n); cout<<"\n\n\tक्या आप और खोजना चाहते हैं...पसंद दर्ज करें (y/n)?"; cin>>ch; if(ch == 'y' || ch == 'Y') goto up; return 0; } आउटपुट
सूची की स्थिति है :->1->2->3->4->5->6->7->8->9->10->11->12->13->14->15->16->17->18 खोजे जाने वाले एलिमेंट को दर्ज करें: 7 आइटम मिला सूची की स्थिति है :->7->1->2->3->4->5->6->8->9->10->11->12->13->14->15->16->17->18 क्या आप और खोजना चाहते हैं...पसंद दर्ज करें (y/n)?y खोजे जाने वाले एलिमेंट को दर्ज करें: 20 आइटम नहीं मिला। क्या आप और खोजना चाहते हैं...पसंद दर्ज करें (y/n)?n