सी में जेनेरिक datastructures

वोट
2

मैं एक सामान्य BST बनाने में देख रहा हूँ। कुछ भी नहीं है कोई तख्त कल्पना है, लेकिन मैं सबसे अच्छा तरीका है शून्य * के प्रकार का ट्रैक रखने के तय करने के लिए कोशिश कर रहा हूँ। यहाँ नोड्स के लिए इंटरफेस है:

typedef struct
{
   void *data;
   struct TreeNode *left;
   struct TreeNode *right;  
} TreeNode;

हालांकि, जब मैं लिखने के जोड़ें / निकालें, मैं तुलना करने की आवश्यकता होगी, इसलिए मैं डेटा के प्रकार डाटा करने के लिए, सही इशारा कर रही है का ट्रैक रखने की आवश्यकता होगी?

मूल विचार एक enum NODE_TYPE और एक समारोह compareTreeNodes कि दो TreeNodes प्राप्त करता है और एक 3 आर्ग के रूप में enum है। इस समारोह का निर्धारण करने के लिए क्या करने के लिए शून्य * कास्ट करने के लिए अनुमति होगी।

किसी भी अन्य / बेहतर विचार?

14/10/2010 को 14:35
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
4

हालांकि, जब मैं लिखने के जोड़ें / निकालें, मैं तुलना करने की आवश्यकता होगी, इसलिए मैं डेटा के प्रकार "डाटा" करने के लिए, सही इशारा कर रही है का ट्रैक रखने की आवश्यकता होगी?

कैसे को देखो qsort()इस मुद्दे को हल करती है। यह भी मनमाने ढंग से डेटा प्रकार पर काम करने की जरूरत है। मूल रूप से, आप एक समारोह सूचक के माध्यम से उपयोगकर्ताओं की तुलना, प्रतिनिधि।

14/10/2010 को 14:38
का स्रोत उपयोगकर्ता

वोट
3

मुझे लगता है एक भी BST उस में डेटा का केवल एक प्रकार होगा। उस मामले में मैं एक encapsulating होगा structकि रूट नोड और एक तुलना कार्य करने के लिए एक सूचक के लिए सूचक होता है। अपने BST के उपयोगकर्ता initialisation पर एक उपयुक्त समारोह प्रदान करना होगा।

typedef struct {
    TreeNode *root;
    int (*compar)(const void *, const void *);
} Tree;

Btw, अपने पहले लाइन शायद होना चाहिए typedef struct TreeNode {। आप एक typdef'd गुमनाम है struct, लेकिन अंदर एक न के बराबर टैग struct को देखें। इन दोनों संस्करणों में काम करेगा:

typedef struct TreeNode {
    void *data;
    struct TreeNode *left, *right;
} TreeNode;

typedef struct TreeNode TreeNode;
struct TreeNode {
    void *data;
    TreeNode *left, *right;
};

आप स्वयं निर्देशात्मक गुमनाम नहीं कर सकते हैं structs

14/10/2010 को 14:42
का स्रोत उपयोगकर्ता

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