लिंक्डलिस्ट डेटा संरचना

इस ट्यूटोरियल में, आप लिंक्ड लिस्ट डेटा संरचना के बारे में जानेंगे और इसे पायथन, जावा, सी और सी ++ में लागू करना है।

लिंक किए गए सूची डेटा संरचना में जुड़े नोड्स की एक श्रृंखला शामिल है। यहां, प्रत्येक नोड डेटा और अगले नोड के पते को संग्रहीत करता है। उदाहरण के लिए,

लिंक्डलिस्ट डेटा संरचना

आपको कहीं से शुरू करना होगा, इसलिए हम पहले नोड के पते को एक विशेष नाम देते हैं जिसे HEAD कहा जाता है।

इसके अलावा, लिंक की गई सूची में अंतिम नोड को पहचाना जा सकता है क्योंकि इसका अगला भाग NULL को इंगित करता है।

आपने गेम ट्रेजर हंट खेला होगा, जिसमें प्रत्येक सुराग में अगले सुराग के बारे में जानकारी शामिल होती है। इस प्रकार से लिंक की गई सूची संचालित होती है।

लिंक्डलिस्ट का प्रतिनिधित्व

आइए देखें कि लिंक्डलिस्ट के प्रत्येक नोड का प्रतिनिधित्व कैसे किया जाता है। प्रत्येक नोड में शामिल हैं:

  • एक डेटा आइटम
  • दूसरे नोड का पता

हम एक संरचना में डेटा आइटम और अगले नोड संदर्भ दोनों को लपेटते हैं:

 struct node ( int data; struct node *next; );

लिंक की गई सूची नोड की संरचना को समझना उस पर समझ रखने की कुंजी है।

प्रत्येक स्ट्रक्चर नोड में एक डेटा आइटम और एक अन्य स्ट्रक्चर नोड के लिए एक पॉइंटर होता है। आइए यह समझने के लिए कि कैसे काम करता है, तीन वस्तुओं के साथ एक सरल लिंक्ड सूची बनाएं।

 /* Initialize nodes */ struct node *head; struct node *one = NULL; struct node *two = NULL; struct node *three = NULL; /* Allocate memory */ one = malloc(sizeof(struct node)); two = malloc(sizeof(struct node)); three = malloc(sizeof(struct node)); /* Assign data values */ one->data = 1; two->data = 2; three->data=3; /* Connect nodes */ one->next = two; two->next = three; three->next = NULL; /* Save address of first node in head */ head = one;

यदि आपको ऊपर दी गई किसी भी लाइन की समझ नहीं है, तो आपको बस पॉइंटर्स और स्ट्रक्चर्स पर रिफ्रेशर की जरूरत है।

केवल कुछ चरणों में, हमने तीन नोड्स के साथ एक सरल लिंक सूची बनाई है।

लिंक्डलिस्ट प्रतिनिधि

लिंक्डलिस्ट की शक्ति श्रृंखला को तोड़ने और इसे फिर से जोड़ने की क्षमता से आती है। उदाहरण के लिए, यदि आप एक तत्व को 1 और 2 के बीच रखना चाहते हैं, तो चरण निम्न होंगे:

  • एक नया स्ट्रक्चर नोड बनाएं और इसे मेमोरी आवंटित करें।
  • इसके डेटा मान को 4 के रूप में जोड़ें
  • डेटा नोड के रूप में 2 वाले संरचना नोड के लिए अपने अगले पॉइंटर को इंगित करें
  • हमारे द्वारा बनाए गए नोड को "1" के अगले पॉइंटर को बदलें।

एक सरणी में कुछ ऐसा ही करना सभी बाद के तत्वों की स्थिति को बदलने की आवश्यकता होती है।

अजगर और जावा में, लिंक को नीचे दी गई कोड में दिखाए अनुसार कक्षाओं का उपयोग करके लागू किया जा सकता है।

लिंक्ड सूची उपयोगिता

सूची सी, सी ++, पायथन, जावा और सी # जैसी हर प्रोग्रामिंग भाषा में कार्यान्वयन के साथ सबसे लोकप्रिय और कुशल डेटा संरचनाओं में से एक है।

इसके अलावा, लिंक्ड सूची यह जानने का एक शानदार तरीका है कि पॉइंटर्स कैसे काम करते हैं। लिंक की गई सूचियों में हेरफेर करने का अभ्यास करके, आप ग्राफ़ और पेड़ों जैसे अधिक उन्नत डेटा संरचनाओं को सीखने के लिए खुद को तैयार कर सकते हैं।

पायथन, जावा, सी और सी ++ उदाहरणों में सूचीबद्ध सूची कार्यान्वयन

पायथन जावा सी सी +
 # Linked list implementation in Python class Node: # Creating a node def __init__(self, item): self.item = item self.next = None class LinkedList: def __init__(self): self.head = None if __name__ == '__main__': linked_list = LinkedList() # Assign item values linked_list.head = Node(1) second = Node(2) third = Node(3) # Connect nodes linked_list.head.next = second second.next = third # Print the linked list item while linked_list.head != None: print(linked_list.head.item, end=" ") linked_list.head = linked_list.head.next 
 // Linked list implementation in Java class LinkedList ( // Creating a node Node head; static class Node ( int value; Node next; Node(int d) ( value = d; next = null; ) ) public static void main(String() args) ( LinkedList linkedList = new LinkedList(); // Assign value values linkedList.head = new Node(1); Node second = new Node(2); Node third = new Node(3); // Connect nodess linkedList.head.next = second; second.next = third; // printing node-value while (linkedList.head != null) ( System.out.print(linkedList.head.value + " "); linkedList.head = linkedList.head.next; ) ) )
 // Linked list implementation in C #include #include // Creating a node struct node ( int value; struct node *next; ); // print the linked list value void printLinkedlist(struct node *p) ( while (p != NULL) ( printf("%d ", p->value); p = p->next; ) ) int main() ( // Initialize nodes struct node *head; struct node *one = NULL; struct node *two = NULL; struct node *three = NULL; // Allocate memory one = malloc(sizeof(struct node)); two = malloc(sizeof(struct node)); three = malloc(sizeof(struct node)); // Assign value values one->value = 1; two->value = 2; three->value = 3; // Connect nodes one->next = two; two->next = three; three->next = NULL; // printing node-value head = one; printLinkedlist(head); )
 // Linked list implementation in C++ #include using namespace std; // Creating a node class Node ( public: int value; Node* next; ); int main() ( Node* head; Node* one = NULL; Node* two = NULL; Node* three = NULL; // allocate 3 nodes in the heap one = new Node(); two = new Node(); three = new Node(); // Assign value values one->value = 1; two->value = 2; three->value = 3; // Connect nodes one->next = two; two->next = three; three->next = NULL; // print the linked list value head = one; while (head != NULL) ( printf("%d ", head->value); head = head->next; ) )

लिंक की गई जटिलता

समय जटिलता

सबसे खराब मामला औसत मामला
खोज पर) पर)
सम्मिलित करें ओ (1) ओ (1)
नष्ट करना ओ (1) ओ (1)

अंतरिक्ष की जटिलता: O (n)

लिंक्ड सूची अनुप्रयोग

  • गतिशील स्मृति आवंटन
  • स्टैक और कतार में लागू किया गया
  • में पूर्ववत सॉफ्टवेयर की कार्यक्षमता
  • हैश टेबल, ग्राफ

अनुशंसित रीडिंग

1. ट्यूटोरियल

  • लिंक्डलिस्ट ऑपरेशन (ट्रैवर्स, इंसर्ट, डिलीट)
  • लिंक्डलिस्ट के प्रकार
  • जावा लिंक्डलिस्ट

2. उदाहरण

  • लिंक्डलिस्ट के मध्य तत्व को एक एकल पुनरावृत्ति में प्राप्त करें
  • लिंक्डलिस्ट को एक ऐरे में बदलें और इसके विपरीत
  • एक लिंक्डलिस्ट में लूप का पता लगाएं

दिलचस्प लेख...