Go में एल्गोरिदम और डेटा संरचनाओं का परिचय
\n\nGo (Golang) एक आधुनिक कंपाइल्ड प्रोग्रामिंग भाषा है, जिसे Google में विकसित किया गया है। यह C++ की प्रदर्शन क्षमता को Python की सरलता के साथ जोड़ती है, जो इसे एल्गोरिदम और डेटा संरचनाओं को सीखने के लिए एक आदर्श विकल्प बनाती है। इस लेख में, हम मूलभूत अवधारणाओं पर चर्चा करेंगे जो आपको Go में कुशल कोड लिखना शुरू करने में मदद करेंगी।
\n\nडेटा संरचनाओं और एल्गोरिदम को समझना किसी भी डेवलपर के लिए एक महत्वपूर्ण कौशल है। वे डेटा को कुशलतापूर्वक व्यवस्थित करने और समस्याओं को इष्टतम तरीके से हल करने में सक्षम बनाते हैं। Go शक्तिशाली अंतर्निहित प्रकार प्रदान करता है, जैसे slices और map, लेकिन बुनियादी संरचनाओं का ज्ञान आपको अधिक जटिल समाधान बनाने में मदद करेगा।
\n\nGo में मुख्य डेटा संरचनाएँ
\n\nArrays और Slices
\n\nGo में arrays की एक निश्चित लंबाई होती है, जबकि slices गतिशील होते हैं। Slices अधिक लचीला उपकरण हैं, जिनका सबसे अधिक उपयोग किया जाता है।
\n\npackage main\n\nimport "fmt"\n\nfunc main() {\n // निश्चित लंबाई का array\n var arr [5]int = [5]int{1, 2, 3, 4, 5}\n fmt.Println("Array:", arr)\n\n // Slice — गतिशील array\n slice := []int{10, 20, 30, 40, 50}\n fmt.Println("Slice:", slice)\n\n // Slice में तत्व जोड़ना\n slice = append(slice, 60)\n fmt.Println("append के बाद Slice:", slice)\n\n // Array के भाग से slice\n subSlice := arr[1:4]\n fmt.Println("उप-Slice:", subSlice)\n}\n\nGo में slices अंतर्निहित array का संदर्भ हैं। उनमें पहले तत्व का पॉइंटर, लंबाई और क्षमता होती है। यह उन्हें डेटा अनुक्रमों के साथ काम करने के लिए बहुत कुशल बनाता है।
\n\nGo में Stack
\n\nStack एक डेटा संरचना है जो LIFO (Last In, First Out) सिद्धांत पर काम करती है। Go में, slice का उपयोग करके stack को आसानी से लागू किया जा सकता है।
\n\npackage main\n\nimport (\n "fmt"\n "errors"\n)\n\ntype Stack []int\n\nfunc (s *Stack) Push(v int) {\n *s = append(*s, v)\n}\n\nfunc (s *Stack) Pop() (int, error) {\n if len(*s) == 0 {\n return 0, errors.New("stack खाली है")\n }\n index := len(*s) - 1\n element := (*s)[index]\n *s = (*s)[:index]\n return element, nil\n}\n\nfunc main() {\n var stack Stack\n \n stack.Push(1)\n stack.Push(2)\n stack.Push(3)\n \n for len(stack) > 0 {\n val, err := stack.Pop()\n if err == nil {\n fmt.Println("निकाला गया:", val)\n }\n }\n}\n\nStack का उपयोग ट्री ट्रैवर्सल एल्गोरिदम, ब्रैकेट जाँच, क्रिया पूर्ववत (undo) और एक्सप्रेशन पार्सिंग में किया जाता है।
\n\nGo में Queue
\n\nQueue FIFO (First In, First Out) सिद्धांत पर काम करता है। Go में, इसे slice या doubly linked list का उपयोग करके लागू किया जा सकता है।
\n\npackage main\n\nimport "fmt"\n\ntype Queue []int\n\nfunc (q *Queue) Enqueue(v int) {\n *q = append(*q, v)\n}\n\nfunc (q *Queue) Dequeue() (int, bool) {\n if len(*q) == 0 {\n return 0, false\n }\n element := (*q)[0]\n *q = (*q)[1:]\n return element, true\n}\n\nfunc main() {\n queue := Queue{}\n \n queue.Enqueue(10)\n queue.Enqueue(20)\n queue.Enqueue(30)\n \n for len(queue) > 0 {\n val, ok := queue.Dequeue()\n if ok {\n fmt.Println("निकाला गया:", val)\n }\n }\n}\n\nQueue का उपयोग कार्य प्रबंधन प्रणालियों, डेटा बफरिंग और ब्रेड्थ-फर्स्ट सर्च (BFS) एल्गोरिदम में किया जाता है।
\n\nबुनियादी सॉर्टिंग और सर्च एल्गोरिदम
\n\nBubble Sort
\n\nएक सरल सॉर्टिंग एल्गोरिदम जो बार-बार array में घूमता है, आसन्न तत्वों की तुलना करता है और यदि वे गलत क्रम में हैं तो उन्हें बदल देता है।
\n\npackage main\n\nimport "fmt"\n\nfunc bubbleSort(arr []int) {\n n := len(arr)\n for i := 0; i < n-1; i++ {\n for j := 0; j < n-i-1; j++ {\n if arr[j] > arr[j+1] {\n arr[j], arr[j+1] = arr[j+1], arr[j]\n }\n }\n }\n}\n\nfunc main() {\n data