एक में दो अलग-अलग ADTS का मेल

वोट
0

अरे लोग मैं कोशिश कर रहा हूँ मेरी सीएस असाइनमेंट (दूसरे वर्ष सी पेपर) पर आरंभ करने के लिए।

इस कोर्स में हम एक द्विआधारी खोज वृक्ष एडीटी और यह भी एक लाल काले ट्री एडीटी बनाया है। हम उन्हें एक अधिक सामान्य ट्री एडीटी जो या तो एक लाल काला पेड़ या एक द्विआधारी खोज वृक्ष उपयोगकर्ता इनपुट के आधार पर होना करने के लिए चयन करेंगे में गठबंधन करने के लिए है।

मैं एक नया enumerated प्रकार परिभाषित करते हुए शुरू कर दिया है; treetype_t जो या तो RBT या BST ... करने के लिए सेट किया जा सकता है मेरा पहला सवाल यह है कि मैं struct के बाद से मैं नहीं जानता कि जो एडीटी का चयन किया जाएगा यह घोषित करते हैं? मेरी bst.c फ़ाइल में जैसे मैं:

struct bstnode {
   char *key;
   bst left;
   bst right;
};

और मेरे RBT फाइल में मेरे पास है:

struct rbtnode {
   char *key;
   colour_t colour;
   rbt left;
   rbt right;
};

मेरा पहला विचार जैसे एक अगर बयान के लिए था

  if (treetype_t == RBT){
           struct rbtnode {
       char *key;
       colour_t colour;
       rbt left;
       rbt right;
    };
   }
     else{

         struct bstnode {
       char *key;
       bst left;
       bst right;
    };
}

हालांकि मुझे नहीं लगता कि यह काम करेगा ... मैं एक और दृष्टिकोण के बारे में सोच नहीं कर सकता है - किसी भी विचार?

29/09/2011 को 08:46
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

संरचना परिभाषाओं अपने कोड में के रूप में रन-टाइम में नहीं बदला जा सकता। आप केवल पूर्वप्रक्रमक का उपयोग संकलन समय पर उन्हें बदल सकते हैं अगर / # ifdef # निर्देश, लेकिन जब से उस पल में आप अभी तक उपयोगकर्ता इनपुट की जरूरत नहीं है (जब तक कि उपयोगकर्ता सीधे स्रोत कोड को संशोधित करने और यह पुन: संयोजित कर सकते हैं) है कि बहुत जल्दी है।

आप क्या कर सकते में उपयोग करके उन संरचनाओं गठबंधन है संघ कीवर्ड:

struct rbtnode {
    char *key;
    colour_t colour;
    rbt left;
    rbt right;
};

struct bstnode {
    char *key;
    bst left;
    bst right;
};

union bst_or_rbt_node {
    struct bstnode bst_node;
    struct rbtnode rbt_node;
};

तो फिर तुम संघ के rbt_node सदस्य या उपयोगकर्ता इनपुट के आधार पर bst_node सदस्य या तो का उपयोग करें।

सुनिश्चित करें कि आप bst_or_rbt_node के लिए पर्याप्त स्थान (सबसे सुरक्षित का उपयोग करेंगे sizeof (bst_or_rbt_node)) का आवंटन करें।

इसके अलावा, मुझे आशा है कि rbt और BST सूचक प्रकार हैं।

यह यूनियनों उपयोग करने के लिए आवश्यक नहीं है, लेकिन अपने वर्तमान स्तर पर यह एक छोटे संकेत के साथ की तुलना में उन लोगों के साथ निपटने के लिए शून्य जैसे करने के लिए आसान हो सकता है, सूचक डाले।

29/09/2011 को 09:06
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more