क्या एक निश्चित लंबाई ढेर के लिए सबसे अच्छा डेटा संरचना है (मैं मूल रूप से यह एक कतार कहा जाता है, लेकिन क्या मैं चाहता हूँ एक ढेर है) जहां आइटम सामने से जुड़ जाते हैं, और हर बार एक आइटम जोड़ा जाता है सामने से एक आइटम अंत से हटा दिया गया है? मोर्चे से विभिन्न लंबाई के उप-वर्गों का भी उपयोग किया जाएगा। मैं वैक्टर का उपयोग कर रहा था, अब clojure.lang.PersistentQueue और उंगली के पेड़ के बारे में सोच रहा था।फिक्स्ड लंबाई ढेर संरचना
संपादित करें, स्पष्ट करने के लिए, की तरह कुछ:
> (def q (queue [1 2 3 4]))
[1 2 3 4]
> (push q 9 8 7)
[7 8 9 1]
> (peek (push q 9 8 7))
7
EDIT2: आपके सभी सवालों के जवाब अब तक, इस मूल बातें करने के लिए वापस जा रहा और Clojure की खुशी पढ़ने में एक अभ्यास में बदल गया है, उदाहरण के लिए सीखने के लिए धन्यवाद कि subvec की subvec पहले subvec के वेक्टर के लिए एक संदर्भ को बरकरार रखे हुए है, जबकि तरह (vec (विपक्ष एक्स (कुछ subvec ... होगा अगर बार-बार इस्तेमाल सभी मध्यवर्ती subvecs के लिए संदर्भ अर्जित करते हैं। इस के प्रकाश में, कैसे एक वेक्टर के लिए धक्का के इस कार्यान्वयन के बारे में आधारित कतार?:
(defn push [v i n] (if (>= (count v) n) (conj (subvec v 1 n) i) (conj v i)))
फिर परिणामी वेक्टर rseq जो मेरा मानना है कि वैक्टर के साथ तेज है के माध्यम से पहुँचा जा सकता है (के अपने प्रयोग के कारण सूची ऑफसेट?)
Dangit! मेरी लाइब्रेरी से लिंक करके मेरी एसओ प्रतिष्ठा चोरी? मैं निश्चित रूप से बच्चा हूँ। असल में मैं उत्सुक हूं कि आपको यह कैसे मिला, क्योंकि मैंने इसे बिल्कुल विज्ञापित नहीं किया है और 'क्लोजर रिंग बफर' के लिए Google खोज कुछ भी आसानी से नहीं बदलती है। – amalloy
मुझे इसे किसी बिंदु पर Google में मिला और अब मेरे बुकमार्क्स में है;)। धन्यवाद! – DanLebrero
खेद स्पष्ट करने के लिए, अंगूठी बफर सही हो सकता है अगर अपने आइटम जोड़ा गया था और सामने पर peeked और अंत से निकली। यह एक ही समस्या मैं PersistentQueue के साथ किया था है: संयोजक अंत लेकिन मोर्चे पर झांकना करने के लिए कहते हैं, लेकिन मैं केवल (LIFO) सबसे हाल ही में आइटम के सबसे पुराने आइटम के साथ हटाया जा रहा पहला – Hendekagon