ए सूचीcons
सेल्स का निर्माण किया गया है। R5RS list section से:
सूची के लगातार जोड़े के कार फ़ील्ड में ऑब्जेक्ट्स सूची के तत्व हैं। उदाहरण के लिए, एक दो-तत्व सूची एक जोड़ी है जिसका कार पहला तत्व है और जिसका सीडीआर एक जोड़ी है जिसका कार दूसरा तत्व है और जिसका सीडीआर खाली सूची है। सूची की लंबाई तत्वों की संख्या है, जो जोड़ों की संख्या के समान है। (a . (b . (c .())))
और निम्नलिखित "नोड्स" द्वारा स्मृति में प्रतिनिधित्व किया जा सकता है::
[p] --> [p] --> [p] --> null
| | |
|==> a |==> b |==> c
प्रत्येक नोड []
साथ
उदाहरण के लिए, सूची (a b c)
जोड़े की आगामी श्रृंखला के बराबर है मूल्य में एक सूचक p
(यह car
) है, और अगले तत्व के लिए एक अन्य सूचक (यह cdr
है)।
यह सूची असीमित लंबाई तक बढ़ने की अनुमति देता है, लेकिन सूची के सामने शुरू करने के लिए ref
ऑपरेशन की आवश्यकता है और अनुरोध किए गए एक को खोजने के लिए k
तत्वों को पार करें। जैसा कि आपने कहा है, यह ओ (एन) है।
इसके विपरीत, एक वेक्टर मूल रूप से मान जो आंतरिक रूप से संकेत की एक सरणी के रूप में प्रतिनिधित्व किया जा सकता है की एक सरणी है। उदाहरण के लिए, वेक्टर #(a b c)
प्रतिनिधित्व किया जा सकता है के रूप में:
[p p p]
| | |
| | |==> c
| |
| |==> b
|
|==> a
कहाँ सरणी []
तीन संकेत की एक श्रृंखला शामिल है, और प्रत्येक सूचक वेक्टर में एक मूल्य को सौंपा गया है। तो आंतरिक रूप से आप v[3]
नोटेशन का उपयोग कर वेक्टर v
के तीसरे तत्व का संदर्भ दे सकते हैं। चूंकि आपको पिछले तत्वों को पार करने की आवश्यकता नहीं है, vector-ref
एक ओ (1) ऑपरेशन है।
मुख्य नुकसान यह है कि वेक्टर निश्चित आकार के हैं, इसलिए यदि आपको वेक्टर की तुलना में अधिक तत्व जोड़ने की आवश्यकता है, तो आपको एक नया वेक्टर आवंटित करना होगा और पुराने तत्वों को इस नए वेक्टर में कॉपी करना होगा। यदि आपका आवेदन नियमित आधार पर करता है तो यह संभावित रूप से एक महंगा संचालन हो सकता है।
कई संसाधन ऑनलाइन कर रहे हैं - Scheme Data Structures पर इस लेख में और अधिक विस्तार में चला जाता है और कुछ उदाहरण प्रदान करता है, हालांकि यह बहुत अधिक सूचियों पर ध्यान केंद्रित है।
सब ने कहा, अपनी चाबी कर रहे हैं (या हो सकता है) पूर्णांकों और आप या तो तत्वों की एक निश्चित संख्या है या वेक्टर reallocations के लिए उचित समय के साथ प्रबंधन कर सकते हैं - उदाहरण के लिए, आप स्टार्टअप पर वेक्टर लोड और फिर ज्यादातर पढ़ते हैं - एक वेक्टर एक एसोसिएशन सूची के लिए एक आकर्षक विकल्प हो सकता है।
हैश टेबल के बारे में मुझे बताने के लिए धन्यवाद। –
इस उत्तर को थोड़ा देर से स्वीकार किया, लेकिन हे। –