एक सारणी क्या है?
- ऐरे तत्वों का एक संग्रह है, प्रत्येक को एक सूचकांक या कुंजी द्वारा पहचाना जाता है।
- सरणी का एक निश्चित और गतिशील आकार होता है
- सजातीय तत्व → किसी सरणी में सभी तत्व एक ही डेटा प्रकार के होते हैं।
- विषम तत्व → एक ही सरणी में विभिन्न डेटा प्रकारों की अनुमति देते हैं।
// Homogeneous
int[] intArray = new int[5]; // Array of integers String[]
stringArray = new String[5]; // Array of strings
// Heterogeneous
mixedArray = [1, "hello", 3.14, True] # Mixed data types in one list
सारणियों के लक्षण
- अनुक्रमण: अधिकांश प्रोग्रामिंग भाषाओं में शून्य-आधारित अनुक्रमण।
- आकार: निश्चित आकार (स्थिर), गतिशील रूप से नहीं बदला जा सकता (गतिशील सरणियों वाली भाषाओं को छोड़कर)।
- मेमोरी आवंटन: सरणी तत्वों के लिए सन्निहित मेमोरी आवंटन। अर्थात प्रत्येक तत्व स्मृति में सीधे पिछले तत्व के बगल में है। यह संभव है क्योंकि सभी तत्व एक ही आकार के हैं, जिससे सिस्टम अपने सूचकांक का उपयोग करके किसी भी तत्व के मेमोरी पते की गणना कर सकता है।

सारणी संचालन
- सम्मिलन: आमतौर पर तत्वों को स्थानांतरित करना, ओ(एन) समय जटिलता शामिल है।
- हटाना: सम्मिलन के समान, तत्वों को स्थानांतरित करने की आवश्यकता हो सकती है। अंतिम सूचकांक को छोड़कर
- ट्रैवर्सल: सभी तत्वों के माध्यम से पुनरावृत्ति, ओ(एन) समय जटिलता।
- एक्सेस टाइम: ओ(1) किसी तत्व तक उसके सूचकांक का उपयोग करके पहुंचने के लिए समय जटिलता।
सारणियों के प्रकार
- एक-आयामी सरणी: सबसे सरल रूप, एक सूची की तरह।
- बहुआयामी सारणी: सारणियों की सारणी (उदाहरण के लिए, 2डी सारणी)।
- दांतेदार सरणी: उप-सरणी की विभिन्न लंबाई वाली सारणी।
- डायनामिक ऐरे (उदाहरण के लिए, जावा में ऐरेलिस्ट): ऐरे जो आकार में गतिशील रूप से बढ़ सकते हैं।
सारणियों के लाभ
- दक्षता: तत्वों के लिए O(1) पहुंच समय।
- मेमोरी उपयोग: सन्निहित भंडारण के कारण मेमोरी का कुशल उपयोग।
- उपयोग में आसानी: डेटा प्रबंधन और सॉर्टिंग और खोज जैसे संचालन को सरल बनाता है
ऐरे के नुकसान
- निश्चित आकार: एक बार घोषित होने के बाद आकार नहीं बदला जा सकता। गतिशील सरणी को छोड़कर
- सम्मिलन/हटाने की लागत: O(n) किसी तत्व को सम्मिलित करने या हटाने के लिए, विशेष रूप से बीच में।
- मेमोरी बर्बादी: अप्रयुक्त तत्व अभी भी जगह घेरते हैं।
सारणियों के वास्तविक दुनिया के अनुप्रयोग
- डेटा संग्रहीत करना: तत्वों के संग्रह को संग्रहीत करने के लिए प्रोग्रामिंग में सामान्य।
- सॉर्टिंग एल्गोरिदम: कई सॉर्टिंग एल्गोरिदम सरणियों के लिए डिज़ाइन किए गए हैं (उदाहरण के लिए, क्विकसॉर्ट, मर्जसॉर्ट)।
- मैट्रिक्स संचालन: 2डी सरणियों का उपयोग गणित और ग्राफिक्स में मैट्रिक्स संचालन के लिए किया जाता है।
- स्टैक और कतारों को लागू करना: बुनियादी डेटा संरचनाओं को सरणियों का उपयोग करके लागू किया जा सकता है।
सारणियों के साथ सर्वोत्तम अभ्यास
- अनावश्यक प्रतियों से बचें: उन कार्यों से सावधान रहें जिनमें प्रतिलिपि तत्वों की आवश्यकता होती है।
- आवश्यकता पड़ने पर गतिशील सारणी का उपयोग करें: यदि आकार अनिश्चित है, तो गतिशील सारणी को प्राथमिकता दें।
- अंतर्निहित कार्यों का लाभ उठाएं: सरणी संचालन के लिए भाषा-विशिष्ट कार्यों का उपयोग करें।
- सीमा जांच: IndexOutOfBoundsException से बचने के लिए हमेशा सीमा शर्तों की जांच करें।
GO में स्टेटिक और डायनेमिक ऐरे का उदाहरण
package main
import (
"fmt"
"unsafe"
)
func main() {
// Static Array
var staticArr [5]int64
staticArr[0] = 1
staticArr[1] = 2
staticArr[2] = 3
staticArr[3] = 4
staticArr[4] = 5
elementSize := unsafe.Sizeof(staticArr[0])
totalSize := elementSize * uintptr(len(staticArr))
fmt.Printf("Memory used by static array: %d bytes\n", totalSize)
fmt.Println()
// Dynamic Array (Slice)
dynamicArr := make([]int32, 0, 5)
before := unsafe.Sizeof(dynamicArr[0])
beforeTotal := before * uintptr(len(dynamicArr))
fmt.Printf("Memory used by dynamic array (before): %d bytes\n", beforeTotal)
// Append elements to dynamic array
for i := 0; i