2012-07-07 14 views
12

में पेड़ को विज़ुअलाइज़ करना मैं अपने कुछ प्रकारों के लिए autoexp.dat पर विज़ुअलाइज़र जोड़ रहा हूं। यहां तक ​​कि that blog that everyone refers back के साथ (यहां तक ​​कि माइक्रोसॉफ्ट दोस्तों!) यह कई बार एक संघर्ष रहा है।वीएस -2008

लेकिन मैं पूरी तरह से # ट्री विज़ुअलाइज़र द्वारा स्टंप हूं। सबसे पहले ब्लॉग पोस्ट इसके विवरण में छेद से भरा हुआ प्रतीत होता है (और कोई अन्य सामग्री मैं पते को ढूंढने में सक्षम नहीं हूं - लेकिन दूसरों ने इसे स्पष्ट रूप से काम कर लिया है)। विशेष रूप से कुछ जादुई मामले लगते हैं जहां यह एक सूचक को कम करने के बारे में जानता है - लेकिन मुझे यकीन नहीं है कि मैंने इरादे को इंजीनियर किया है। जब आप $ सी और $ ई का उपयोग करते हैं तो इसके बीच कुछ अस्पष्टता भी प्रतीत होती है। AFAICS वे अदलाबदल करने लगते हैं - शायद दोनों को पठनीयता की सहायता के रूप में अनुमति दी जाती है? या क्या वे वास्तव में अलग-अलग चीजों का मतलब रखते हैं (उदाहरण के लिए, ब्लॉग $ ई का उपयोग करता है जहां वीएस -2008 के साथ आने वाले एसएलएल विज़ुअलाइज़र $ c का उपयोग करते हैं)।

लेकिन वास्तव में क्या गुम है यह एक स्पष्टीकरण है कि यह सब एक साथ कैसे फिट बैठता है।

  1. "सिर" नियम लागू प्रारंभिक नोड के लिए प्राप्त करने के लिए (सूचक) के द्वारा
  2. dereferenced को deref नियम (अंत में बिट) लागू करें: मैं इसे इस प्रक्रिया का पालन करेगा कल्पना की है | विज़ुअलाइजिंग के लिए मान प्राप्त करने के लिए वर्तमान नोड।
  3. बाएं और दाएं नियमों को को वर्तमान नोड को क्रमशः बाएं और दाएं नोड्स तक पहुंचने के लिए बाएं और दाएं नियम लागू करें (पॉइंटर द्वारा - टर्मिनेटर के रूप में शून्य के साथ, जब तक कोई स्किप नियम निर्दिष्ट न हो)।
  4. सभी नोड्स का दौरा होने तक (2) पर जाएं।

स्पष्ट रूप से वहां बाईं ओर दाईं ओर नेविगेट करने के लिए एक एल्गोरिदम है जिसे मैंने चमक लिया है। यह बहुत महत्वपूर्ण नहीं है। और अधिक महत्वपूर्ण बात यह है कि प्रत्येक चरण में कौन से मूल्यों पर विचार किया जाता है और जब डीफरेंसिंग होती है।

ऐसा लगता है कि एकमात्र प्रक्रिया है जिसे मैं कल्पना कर सकता हूं जो मैंने देखा है। लेकिन मैं इसे अपने पेड़ कार्यान्वयन के साथ काम करने में असमर्थ रहा हूं। मुझे बस (त्रुटि) मिलती है जहां # ट्री बच्चों को प्रदर्शित किया जाना चाहिए (मुझे प्रत्येक नोड के लिए एक (त्रुटि) मिलती है, इसलिए मुझे लगता है कि आकार सही ढंग से कैप्चर किया जा रहा है)। मैंने कभी भी संभव भिन्नता की कोशिश की है जिसे मैं सोच सकता हूं - कई बार!

दूसरी चीज जो मुझे पहेली करती है वह है कि मैंने देखा है कि कई उदाहरण, बंडल वाले एसएलएल सहित, सिर से पैरेंट (या इसी तरह) से नेविगेट करते हैं, और हेड नोड को छोड़ देते हैं। वे ऐसा क्यों करते हैं?

यहाँ visualiser मैं उपयोग कर रहा हूँ है (रूपों मैं कोशिश की है में से एक में - और नाम की रक्षा की ... कॉर्पोरेट के लिए बदल दिया गया है):

MyTree<*,*,*>{ 
    children(
     #(
      [raw members]: [$c,!], 
      #tree 
      (
       head : $c.m_root.m_p, 
       size : $c.m_size, 
       left : left.m_p, 
       right : right.m_p 
      ) : $e.value 
     ) 
    ) 
} 

और यहाँ कुछ छद्म कोड है मेरी पेड़ कक्षाओं के लिए:

MyTree: 
    Ptr<Note> m_root 
    int m_size 

Node: 
    ValueT value 
    Ptr<Node> left 
    Ptr<Node> right 

... जहां PTR <> एक स्मार्ट सूचक है, m_p में कच्चे सूचक पकड़े।

किसी भी मदद की सराहना की जाएगी।

+0

इनमें से कुछ केवल उन एमएस डिज़ाइनों के लिए काम कर सकते हैं जिनके लिए उनका परीक्षण किया गया था। एक सेंटीनेल नोड के साथ (जैसे वे छोड़ सकते हैं) की तरह। मुझे एक लिंक की गई सूची डिज़ाइन में फिट करने की कोशिश करने वाली समान समस्याएं हैं जो मूल से विचलित होती हैं। उसके साथ कोई भाग्य नहीं है। –

+0

मेरे पास एक सेंटीनेल नोड नहीं है - इसलिए यह * आसान * होना चाहिए, मैंने सोचा होगा। मेरा अधिकांश वर्चुअल डब उदाहरण जैसा दिखता है - सबसे बड़ा अंतर स्मार्ट पॉइंटर्स का मेरा उपयोग है। – philsquared

उत्तर

5

हमने वास्तव में वास्तव में की आवश्यकता है! तो मैंने एक बक्षीस खोला लेकिन इसे खुद पर देख कर लिया।

ऐसा लगता है जैसे मैंने इसे हल किया है! (मेरे मामले के लिए)।मैं वास्तव में बहुत करीब था:

MyTree<*,*,*>{ 
    children(
     #(
      [raw members]: [$c,!], 
      #tree 
      (
       head : $c.m_root.m_p, 
       size : $c.m_size, 
       left : left, 
       right : right 
      ) : $e.value 
     ) 
    ) 
} 

चाल है कि सिर नियम पूरी तरह से स्मार्ट सूचक के भीतर कच्चे सूचक को पाने के लिए कैसे पर छोड़ दिया/सही नियम नहीं है (निर्दिष्ट करने के लिए की जरूरत है और न डे करता है रेफ नियम)।

संबंधित मुद्दे