5

डेटा संरचना की एक मोटा परिभाषा यह है कि यह आपको डेटा स्टोर करने और ऑपरेशन के पहले और बाद में डेटा की स्थिरता को संरक्षित करते समय उस डेटा पर संचालन का एक सेट लागू करने की अनुमति देता है। हालांकि कुछ लोग जोर देते हैं कि 'int' जैसे आदिम चर को डेटा संरचना के रूप में भी माना जा सकता है। मुझे वह हिस्सा मिलता है जहां यह आपको डेटा स्टोर करने की अनुमति देता है लेकिन मुझे लगता है कि ऑपरेशन भाग गुम है। आदिम चरों में उनके साथ जुड़े संचालन नहीं होते हैं। इसलिए मुझे लगता है कि जब तक आपके पास परिभाषित संचालन का एक सेट नहीं है और उससे जुड़ा हुआ है, तो आप इसे डेटा संरचना नहीं कह सकते हैं। 'int' के पास कोई भी ऑपरेशन संलग्न नहीं है, इसे जेनेरिक ऑपरेटरों के एक सेट के साथ संचालित किया जा सकता है।क्या एक चर जैसे 'int' को आदिम/मौलिक डेटा संरचना माना जा सकता है?

कृपया सलाह दें कि मुझे यहां कुछ गड़बड़ है या नहीं।

उत्तर

4

यह कहने के लिए कि कुछ संरचित है इसका अर्थ यह है कि एक फॉर्म या स्वरूपण है जो परिभाषित करता है कि डेटा कैसे संरचित किया जाता है। ध्यान दें कि डेटा को वास्तव में संग्रहीत करने के तरीके से इसका कोई लेना-देना नहीं है। उदाहरण के लिए आप एक डेटा संरचना बना सकते हैं जो पूरी तरह से एक इंटीजर के भीतर मौजूद है, फिर भी कई अलग-अलग मानों का प्रतिनिधित्व करता है।

एक डेटा संरचना एक मनमाने ढंग से निर्माण है जो किसी सिस्टम में डेटा को स्टोर करने का वर्णन करने के लिए उपयोग की जाती है। यह एक प्राचीन के रूप में सरल हो सकता है, या एक वर्ग के रूप में जटिल हो सकता है। तो जवाब काफी हद तक व्यक्तिपरक है। यह "हां" है यदि आप इस तरह के आदिम का उपयोग करने का निर्णय लेते हैं, कि एक साधारण आदिम को आदिम डेटा संरचना माना जा सकता है, क्योंकि यह वर्णन करता है कि आप डेटा के तत्व को कैसे स्टोर करना चाहते हैं। जवाब भी "नहीं" है, क्योंकि यह संरचना के तत्व का वर्णन करता है और जरूरी नहीं कि पूरी संरचना स्वयं ही हो।

यह कैसे संचालन से संबंधित है, कड़ाई से डेटा संरचना को बोलने से व्यवहार के साथ कुछ लेना देना नहीं है, यह केवल भंडारण तंत्र है। डेटा की स्थिरता को संरक्षित करना वास्तव में एक व्यवहारिक बात है। हां, यदि आप बाइट में 32-बिट मान को जूता-सींग करने का प्रयास करते हैं, तो आपका कंपाइलर शायद त्रुटियों को थकाता है, लेकिन यह आपके आवेदन की डेटा संरचना पर कार्यरत सिस्टम (आईई: संकलन) के व्यवहार का लक्षण है, जिसमें से आपका primitives एक तत्व हैं।

+0

+1 और एसओ में आपका स्वागत है –

2

मुझे नहीं लगता कि डेटा संरचना की आपकी परिभाषा सही है।

ऐसा लगता है कि struct (बिना विधियों के) एक वैध डेटा संरचना है, लेकिन इसमें कोई वास्तविक 'ऑपरेशन' नहीं है। और यह महत्वपूर्ण नहीं है। यह डेटा धारण कर रहा है।

उस अंत तक, और int डेटा रखता है, ऑब्जेक्ट में डेटा होता है। वे डेटा संरचनाएं हैं (तकनीकी रूप से)।

उसने कहा, मुझे कभी भी यह नहीं पता है कि "मैं किस डेटास्ट्रक्चर का उपयोग करूं? मुझे पता है! एक int!"।

मैं कहूंगा कि आपको "डेटा संरचना" के अर्थ का फिर से मूल्यांकन करने की आवश्यकता है।

0

मैं तर्क दूंगा कि "int" एक डेटा संरचना है - इसमें एक परिभाषित प्रतिनिधित्व और अर्थ है। यही है, आपके सिस्टम के आधार पर, इसकी एक विशिष्ट लंबाई है, इसके लिए उपलब्ध ऑपरेटरों का एक विशिष्ट सेट, और एक निर्दिष्ट प्रतिनिधित्व (यह दो-प्रशंसा हो)। इसे "पूर्णांक संख्या" रखने के लिए डिज़ाइन किया गया है।

व्यावहारिक रूप से, भेद विशेष रूप से प्रासंगिक नहीं है।

+0

एक अच्छी टिप्पणी है, लेकिन मैं असहमत हूं कि ऑपरेटरों के पास डेटा संरचना की परिभाषा के साथ कुछ भी करना है। आप निश्चित रूप से डेटा को स्टोर कर सकते हैं और बाद में इसे संशोधित या तुलना किए बिना संदर्भ के लिए पुनर्प्राप्त कर सकते हैं। बेशक, उचित संचालन के बिना (जैसे कि सेट/प्राप्त करें और इसी तरह), आपके डेटा में अतिरिक्त उद्देश्य या उद्देश्य की कमी हो सकती है, जिसके लिए इसे अपने इच्छित उद्देश्य का समर्थन करना आवश्यक है। मैं मानता हूं कि व्यावहारिक उद्देश्यों के लिए, भेद वास्तव में रिलीज़ नहीं होता है! :-) –

1

Primitives उनके साथ संचालन संलग्न है; हालांकि, वे विधियों के प्रारूप में नहीं हो सकते हैं क्योंकि आप ऑब्जेक्ट उन्मुख प्रतिमान में अपेक्षा करेंगे।

असाइनमेंट =, +, घटाव -, तुलना ==, आदि सभी परिचालन हैं। विशेष रूप से यदि आप मानते हैं कि आप कुछ भाषाओं (जैसे सी ++) में मनमाने ढंग से कक्षाओं (यानी डेटा संरचनाएं) के लिए इन परिचालनों को स्पष्ट रूप से परिभाषित, ओवरराइड या ओवरलोड कर सकते हैं, तो आदिम int, char, या आप क्या हैं, बहुत अलग नहीं हैं।

0

आदिम चर उनके पास संचालन नहीं है। इसलिए मुझे लगता है कि जब तक आपके पास परिभाषित संचालन का एक सेट नहीं है और उससे जुड़ा हुआ है, तो आप इसे डेटा संरचना नहीं कह सकते हैं।

'int' के पास कोई भी ऑपरेशन संलग्न नहीं है, इसे जेनेरिक ऑपरेटरों के एक सेट के साथ संचालित किया जा सकता है।

सामान्य? फिर 2+2 कैसे काम करते हैं, लेकिन "ninja" + List<float> नहीं है? अगर ऑपरेटर सामान्य था, तो यह किसी भी चीज़ पर काम करेगा। यह नहीं है यह केवल कुछ पूर्वनिर्धारित प्रकारों पर काम करता है, जैसे पूर्णांक।

इट्स निश्चित रूप से उन पर परिभाषित संचालन का एक सेट है। अंकगणितीय परिचालन जैसे कि जोड़, घटाव, गुणा या विभाजन, उदाहरण के लिए।अधिकांश भाषाओं में किसी भी प्रकार की ToString() होती है-पूर्णांक पर परिभाषित कार्यक्षमता की तरह। लेकिन आप पर int के साथ कुछ भी नहीं कर सकते हैं। उदाहरण के लिए, आप स्ट्रिंग की अपेक्षा रखने वाले फ़ंक्शन में int पास नहीं कर सकते हैं। int के पास उन पर परिभाषित संचालन का एक बहुत ही विशिष्ट सेट है। वे ऑपरेशन सिर्फ सदस्य विधियां नहीं हैं। वे ऑपरेटरों और गैर-सदस्यीय कार्यों या अन्य वर्गों के सदस्य विधियों के रूप में आते हैं। लेकिन वे अभी भी संचालन हैं जो पूर्णांक पर काम करते हैं।

+0

"आप एक स्ट्रिंग की अपेक्षा रखने वाले फ़ंक्शन को एक int पास नहीं कर सकते हैं" <- यदि आप भाषा टाइप कर सकते हैं, उदाहरण के लिए जावास्क्रिप्ट या PHP की तरह। –

+0

जब मैं ढेर देखता हूं तो मेरे पास पुश और पॉप जैसे ऑपरेशन होते हैं। ये ढेर से जुड़े हुए हैं, आप लिंकलिस्ट पर पुश या पॉप नहीं कर सकते हैं। मेरा संदेह यह है कि क्या वास्तव में एक चर के लिए परिभाषित ऑपरेटरों को डेटा संरचना के रूप में जाना आवश्यक है? –

+0

@Ravi सभी प्रकार के ऑपरेटर, आदिम या अन्यथा हैं। बिना किसी ऑपरेटर के एक प्रकार बेकार होगा। यहां तक ​​कि डीटीओ (और यदि आप कन्स्ट्रक्टर की गिनती नहीं करते हैं), जो आमतौर पर कोई अन्य तरीका नहीं है, फिर भी सदस्य पहुंच ऑपरेटर हैं। मुझे यकीन नहीं है कि आप इस तर्क के साथ कहां जा रहे हैं। –

0

मुझे नहीं लगता, (रेफरी: Wikipedia entry) कि डेटा संरचना में अनुमत संचालन (ऑपरेटरों पर) की परिभाषा शामिल है। बेशक, हम काउंटर उदाहरण के रूप में सी ++ कक्षा उद्धृत कर सकते हैं जिसमें हम अधिभारित ऑपरेटरों को परिभाषित कर सकते हैं। साथ ही, हम एक संरचना को केवल एक समग्र/उपयोगकर्ता परिभाषित डेटाटाइप के रूप में परिभाषित करते हैं और उन पर कोई अनुमत संचालन घोषित नहीं करते हैं। हम संकलक को यह समझने की अनुमति देते हैं।

1

डेटा संरचना की आपकी परिभाषा बिल्कुल सही नहीं है। डेटा संरचना में किसी भी संलग्न व्यवहार या संचालन की आवश्यकता नहीं होती है। एक एडीटी या सार डेटा प्रकार वह है जिसे आप डेटा संरचना के रूप में वर्णित कर रहे हैं। एक एडीटी में उस डेटा पर काम करने वाले डेटा और व्यवहार या संचालन शामिल होते हैं। स्वयं एक int एक एडीटी नहीं है, लेकिन मुझे लगता है कि आप इसे एक डेटा संरचना कह सकते हैं। यदि आप एक इंट और उसके संचालन को समाहित करते हैं तो आपके पास एक एडीटी है जो मुझे लगता है कि आप डेटा संरचना के रूप में वर्णन करने की कोशिश कर रहे हैं। कक्षाएं आधुनिक भाषाओं में एडीटी के कार्यान्वयन के लिए एक तंत्र प्रदान करती हैं।

wikipedia में सार डेटा प्रकारों का एक अच्छा विवरण है।

0

'int' के पास कोई भी ऑपरेशन संलग्न नहीं है, इसे जेनेरिक ऑपरेटरों के एक सेट के साथ संचालित किया जा सकता है।

संचालन आंतरिक रूप से चीजों के साथ जुड़े हुए हैं है कि वे पर काम; जेनेरिक ऑपरेशंस जैसी कोई चीज नहीं है।

यह (पूर्णांकों का सेट में के लिए < काम करता है, लेकिन जटिल संख्या के लिए कोई मतलब नहीं है) गणितीय अर्थ में सही है, और यह भी कंप्यूटर वैज्ञानिक अर्थों में (का मूल्यांकन a + b की आवश्यकता है कि a और b हैं या करने के लिए परिवर्तित किया जा सकता संगत प्रकार जिस पर + ऑपरेशन परिभाषित किया गया है)।

0

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

  • डेटा का एक टुकड़ा है कि डेटा

तो निश्चित रूप से, int पात्र पर अपने मूल्य

  • संचालन का एक सेट के एक नामित व्याख्या है कि कम से नज़र में। (यदि int पर कोई ऑपरेशन नहीं था, तो हम सभी अटक जाएंगे!)

    इन प्रश्नों के साथ शुरू होने वाले प्रोग्रामिंग के लिए और अधिक गणितीय दृष्टिकोण के लिए, और उन्हें "गणना का बीजगणित" कहा जाता है, एलेक्स स्टेपानोव और पॉल मैकजोन द्वारा Elements of Programming

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