2011-10-26 12 views
9

एसटीएल सूची, वेक्टर और सेट की अंतर्निहित डेटा संरचना क्या है?एसटीएल सूची, वेक्टर और सेट की अंतर्निहित डेटा संरचना क्या है?

मेरे समाधान:

  • वेक्टर: (गतिशील आवंटित) सरणी
  • सूची:
  • सेट: ढेर (या सभी पत्ती स्थित के रूप में संभव के रूप में छोड़ दिया नोड्स के साथ एक द्विआधारी पेड़ और शीर्ष पर न्यूनतम/अधिकतम तत्व रखने)

है न?

+3

कार्यान्वयन परिभाषित किया गया है, लेकिन आम तौर पर, 'std :: vector' गतिशील रूप से आवंटित सरणी है। 'std :: list' एक दोगुनी लिंक्ड सूची है (सी ++ 11 'std :: forward_list' प्रस्तुत करता है जो एक सिंगल लिंक्ड सूची है), और' सेट 'आम तौर पर [लाल-काले पेड़ों] पर आधारित होता है (http://en.wikipedia.org/wiki/Red%E2%80%93black_tree), हालांकि मानक में परिभाषित इंटरफेस की अमूर्त जटिलता और व्यवहार आवश्यकताओं को फिट करने वाला कुछ भी स्वीकार्य कार्यान्वयन है। – birryree

उत्तर

19

टिप्पणी, स्पष्ट करने के लिए आधार पर, इन सबसे आम विकल्प हैं, लेकिन वांछित जटिलता और अन्य कारकों के आधार पर, इन कार्यान्वयन के समर्थन भिन्न हो सकते हैं:

Vector = गतिशील सरणी

सूची का आकार बदलने = Doubly Linked List

सेट = Red/Black Tree (संतुलित बाइनरी खोजें ट्री)

मुझे लगता है कि आप संभवतः ढेर और BSTs अप मिश्रण हो सकता है। एक ढेर को एक पेड़ के रूप में देखा जाता है, लेकिन यह वास्तव में एक अनुक्रमणीय सूची संरचना (जैसे सरणी या वेक्टर) के शीर्ष पर बनाया गया है। सी ++ एसटीएल में algorithm header के माध्यम से ढेर कार्यों को प्रदान करता है। बीएसटी कुशल कुंजीपटल के लिए उपयोग की जाने वाली कुंजी/मूल्य आधारित संरचना से अधिक होते हैं (जो आप आमतौर पर एक सेट के लिए चाहते हैं)।

+4

सूची एक दोगुनी जुड़ी सूची है – Praetorian

+0

यह आमतौर पर सच है, लेकिन ध्यान दें कि यह एकमात्र विकल्प नहीं है (यह कार्यान्वयन-निर्भर है)। – avakar

+0

@sgusc, नक्शा लाल-काला पेड़ है, सेट इसलिए नहीं है क्योंकि इसके तत्वों को क्रमबद्ध नहीं किया जाता है। सूची और लिंक्ड सूची के बीच अंतर क्या है? "लिंक्ड लिस्ट" की डेटा संरचना क्या है? एक सूचि? – user1002288

4

मानक डेटा संरचनाओं का उपयोग करने पर कोई गारंटी नहीं देता है, केवल जटिलता गारंटी है, इसलिए कार्यान्वयन किसी भी संरचना को चुन सकता है जो उन्हें पूरा करता है।

कहा कि, std::vector आम तौर पर एक dynamic array है, std::list शायद एक doubly-linked list है और std::set सबसे अधिक बार self-balancing binary tree किसी तरह का है।

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