स्टैक और कतार के बीच बुनियादी अंतर क्या है?


130

ढेर और कतार के बीच बुनियादी अंतर क्या है ??

कृपया मेरी मदद करें मैं अंतर खोजने में असमर्थ हूं।

आप एक स्टैक और एक कतार को कैसे अलग करते हैं?

मैंने विभिन्न लिंक में उत्तर खोजे और यह उत्तर पाया ।।

उच्च स्तरीय प्रोग्रामिंग में,

स्टैक को तत्वों की एक सूची या अनुक्रम के रूप में परिभाषित किया गया है जो मौजूदा तत्वों के शीर्ष पर नए तत्वों को "शीर्ष" पर रखकर और तत्वों को मौजूदा तत्वों के शीर्ष से हटाकर छोटा किया गया है। यह "धक्का" और "पॉप" के गणित संचालन के साथ एक एडीटी [सार डेटा प्रकार] है।

एक कतार तत्वों का एक अनुक्रम है जो कतार के सामने तत्वों को हटाकर, मौजूदा और संक्षिप्त के नए तत्व को रखकर जोड़ा जाता है। यह एक ADT [सार डेटा प्रकार] है। जावा, C ++, Python वगैरह की प्रोग्रामिंग में समझी जाने वाली इन शर्तों के अलावा और भी बहुत कुछ है।

क्या मेरे पास एक उत्तर है जो अधिक विस्तृत है? क्रिप्या मेरि सहायता करे।


12
आपको लगता है कि आपने स्वयं के प्रश्न का उत्तर दिया है - एक स्टैक एक लास्ट-इन फ़र्स्ट-आउट (LIFO) कंटेनर है, और एक कतार फ़र्स्ट-इन फ़र्स्ट-आउट (FIFO) कंटेनर है।
इरिडियम

जवाबों:


151

स्टैक एक LIFO (पहली बार बाहर) डेटा संरचना है। विकिपीडिया से संबंधित लिंक में विस्तृत विवरण और उदाहरण हैं।

कतार एक FIFO (पहली बार पहली बार) डेटा संरचना है। विकिपीडिया से संबंधित लिंक में विस्तृत विवरण और उदाहरण हैं।


131

कागज के ढेर की कल्पना करो । स्टैक में डाला गया अंतिम टुकड़ा शीर्ष पर है, इसलिए यह बाहर आने वाला पहला है। यह LIFO है । कागज के एक टुकड़े को जोड़ना "धक्का" कहा जाता है, और कागज के एक टुकड़े को हटाने को "पॉपिंग" कहा जाता है।

दुकान पर एक कतार की कल्पना करो । लाइन में पहला व्यक्ति लाइन से बाहर निकलने वाला पहला व्यक्ति है। यह फीफो है । एक व्यक्ति जो लाइन में है, वह "एनकेच्ड" है, और एक व्यक्ति जो लाइन से बाहर निकल रहा है, वह "डीक्ड" है।


3
सबसे अच्छी उपमाओं में से एक जो मैं सोच सकता हूं।
यिकेल

83

एक दृश्य मॉडल

पैनकेक स्टैक (LIFO)

एक जोड़ने और / या हटाने का एकमात्र तरीका ऊपर से है।

पैनकेक स्टैक

लाइन कतार (FIFO)

जब कोई आता है तो वे कतार के अंत में पहुंचते हैं और जब वे कतार से बाहर निकलते हैं।

डीएमवी लाइन

मजेदार तथ्य: ब्रिटिश एक कतार के रूप में लोगों की पंक्तियों का उल्लेख करते हैं


6
जी, यह उत्तर imo होना चाहिए। धन्यवाद @ जेकसनकर
कुलसंगर

Haha अच्छी तरह से यकीन है कि यह कतार और ढेर का एक सही वर्णन है, लेकिन सिर्फ तर्कों के लिए, क्या होगा अगर मैं चाहता हूं कि पहले पैनकेक को प्लेट में जोड़ा जाए? मुझे पता है कि इसे एक स्टैक के साथ पूरा किया जा सकता है। साइज़ () बनाम अगर ((स्टैक। आईम खाली ()), लेकिन फिर भी पहला पैनकेक सबसे अच्छा हो सकता है:) ... किसी भी तरह, अच्छा जवाब और मैं इस बात से सहमत हूं सबसे साफ ... दिलचस्प लगता है कि ब्रिटिश गैर-प्रोग्रामिंग भाषा में क्यू (हालांकि यह सटीक है) के रूप में लाइनों का उल्लेख करते हैं, मैं अभी भी विचार करूंगा कि एक पंक्ति जहां पहली प्रविष्टि पहले छोड़ने के लिए मिलती है (लाइन / कतार से बाहर निकलने के बाद) )
वायाटेक

रुको, उन्हें कहीं और कतार नहीं कहा जाता है?
jaunt

37

आप दोनों को एक ऑर्डर की गई चीजों की सूची के रूप में सोच सकते हैं (उस समय तक आदेश दिया गया था जिस समय उन्हें सूची में जोड़ा गया था)। दोनों के बीच मुख्य अंतर यह है कि नए तत्व सूची में कैसे प्रवेश करते हैं और पुराने तत्व सूची को छोड़ देते हैं।

एक स्टैक के लिए, अगर मेरे पास एक सूची है a, b, c, और मैं जोड़ता हूं d, तो यह अंत में निपट जाता है, इसलिए मैं समाप्त करता हूं a,b,c,d। यदि मैं सूची का एक तत्व पॉप करना चाहता हूं, तो मैंने जो अंतिम तत्व जोड़ा है, उसे हटा देता हूं d। एक पॉप के बाद, मेरी सूची अब a,b,cफिर से है

एक कतार के लिए, मैं उसी तरह से नए तत्व जोड़ता हूं। जोड़ने के बाद a,b,cबन जाता है । लेकिन, अब जब मैं पॉप करता हूं, तो मुझे सूची के सामने से एक तत्व लेना होगा, इसलिए यह बन जाता है ।a,b,c,ddb,c,d

यह बहुत सरल है!


14

कतार

कतार वस्तुओं का एक संग्रह है।

आइटम पंक्ति के 'सामने' छोर नामक एक छोर पर हटा दिए जाते हैं।

आइटम कतार के 'रियर' नामक दूसरे छोर पर डाले जाते हैं।

डाला गया पहला आइटम हटा दिया जाने वाला पहला (FIFO) है।

ढेर

ढेर वस्तुओं का एक संग्रह है।

यह केवल एक डेटा आइटम तक पहुंचने की अनुमति देता है: अंतिम आइटम डाला गया।

आइटमों को एक छोर पर डाला जाता है और 'स्टैक के शीर्ष' कहा जाता है।

यह एक गतिशील और लगातार बदलती वस्तु है।

सभी डेटा आइटम को स्टैक के ऊपर रखा जाता है और शीर्ष को हटा दिया जाता है

एक्सेस करने की इस संरचना को लास्ट इन फ़र्स्ट आउट स्ट्रक्चर (LIFO) के रूप में जाना जाता है


तो मूल रूप से एक 'कतार' एक "FIFO" है - पहली बार पहली कतार में। जबकि एक 'स्टैक' एक "LIFO" है - पहले आउट कतार में अंतिम। क्या मैं सही हूँ?
सेबेस्टियन नीलसन

@SebastianNielsen हाँ उत्तर में उल्लेख के अनुसार सही है।
दिसनायके

लेकिन फिर एक लिंक की गई सूची और स्टैक के बीच क्या अंतर है? क्या यह समान नहीं है?
सेबेस्टियन नीलसन

@SebastianNielsen स्टैक एक एडीटी है, जिसका अर्थ है कि यह एक इंटरफ़ेस को उजागर करता है, जो कि पुश और पॉप ऑपरेशन है, लेकिन अंतर्निहित तंत्र (कार्यान्वयन) अंत उपयोगकर्ता से छिपा हुआ है। एक स्टैक को एक सरणी के साथ या एक लिंक्ड सूची के साथ लागू किया जा सकता है।
गडर्राइटिस

13

ढेर:

  1. स्टैक को तत्व की एक सूची के रूप में परिभाषित किया गया है जिसमें हम केवल स्टैक के शीर्ष पर तत्वों को सम्मिलित या हटा सकते हैं।
  2. स्टैक का व्यवहार एक लास्ट-इन फर्स्ट-आउट (LIFO) सिस्टम की तरह है।
  3. स्टैक का उपयोग फ़ंक्शन के बीच मापदंडों को पारित करने के लिए किया जाता है। किसी फ़ंक्शन के लिए कॉल पर, पैरामीटर और स्थानीय चर एक स्टैक पर संग्रहीत होते हैं।
  4. उच्च स्तरीय प्रोग्रामिंग भाषाओं जैसे पास्कल, सी, आदि जो पुनरावृत्ति के लिए समर्थन प्रदान करते हैं, बहीखाता पद्धति के लिए स्टैक का उपयोग करते हैं। प्रत्येक पुनरावर्ती कॉल में याद रखें, मापदंडों, स्थानीय चर और वर्तमान पता (जिस पते पर नियंत्रण कॉल के बाद वापस करना है) के वर्तमान मूल्य को बचाने की आवश्यकता है।

कतार:

  1. कतार एक ही प्रकार के तत्व का एक संग्रह है। यह एक रेखीय सूची है जिसमें सूची के एक छोर पर सम्मिलन हो सकता है, जिसे सूची के पीछे कहा जाता है , और विलोपन केवल दूसरे छोर पर हो सकता है, जिसे सूची का अग्र भाग कहा जाता है
  2. कतार का व्यवहार फर्स्ट-इन-फर्स्ट-आउट (FIFO) सिस्टम की तरह है।

मुझे पूरा यकीन है कि आप एक स्टैक के अंत या प्रारंभ में भी सम्मिलित कर सकते हैं, मुझे लगता है कि यहाँ ध्यान देने योग्य महत्वपूर्ण बात है फीफो बनाम एलआईएफओ
माइक

6

स्टैक तत्वों का एक संग्रह है, जिसे एक बार में संग्रहीत और पुनर्प्राप्त किया जा सकता है। तत्वों को उनके भंडारण के समय के रिवर्स ऑर्डर में पुनर्प्राप्त किया जाता है, अर्थात संग्रहीत नवीनतम तत्व पुनर्प्राप्त किया जाने वाला अगला तत्व है। स्टैक को कभी-कभी लास्ट-इन-फर्स्ट-आउट (LIFO) या फर्स्ट-इन-लास्ट-आउट (FILO) स्ट्रक्चर के रूप में जाना जाता है। पहले संग्रहीत किए गए तत्वों को तब तक पुनर्प्राप्त नहीं किया जा सकता है जब तक कि नवीनतम तत्व (आमतौर पर 'शीर्ष' तत्व के रूप में संदर्भित) को पुनर्प्राप्त नहीं किया गया हो।

एक कतार तत्वों का एक संग्रह है, जिसे एक बार में संग्रहीत और पुनर्प्राप्त किया जा सकता है। तत्वों को उनके भंडारण के समय के क्रम में पुनर्प्राप्त किया जाता है, अर्थात संग्रहीत पहला तत्व पुनर्प्राप्त किया जाने वाला अगला तत्व है। एक कतार को कभी-कभी फ़र्स्ट-इन-फ़र्स्ट-आउट (FIFO) या लास्ट-इन-लास्ट-आउट (LILO) संरचना के रूप में जाना जाता है। बाद में संग्रहीत तत्वों को पहले तत्व (आमतौर पर 'सामने' तत्व के रूप में संदर्भित) तक पुनर्प्राप्त नहीं किया जा सकता है।


2

स्टैक: स्टैक को तत्व की एक सूची के रूप में परिभाषित किया गया है जिसमें हम केवल स्टैक के शीर्ष पर तत्वों को सम्मिलित या हटा सकते हैं

स्टैक का उपयोग फ़ंक्शन के बीच मापदंडों को पारित करने के लिए किया जाता है। किसी फ़ंक्शन के लिए कॉल पर, पैरामीटर और स्थानीय चर एक स्टैक पर संग्रहीत होते हैं।

स्टैक तत्वों का एक संग्रह है, जिसे एक बार में संग्रहीत और पुनर्प्राप्त किया जा सकता है। तत्वों को उनके भंडारण के समय के रिवर्स ऑर्डर में पुनर्प्राप्त किया जाता है, अर्थात संग्रहीत नवीनतम तत्व पुनर्प्राप्त किया जाने वाला अगला तत्व है। स्टैक को कभी-कभी लास्ट-इन-फर्स्ट-आउट (LIFO) या फर्स्ट-इन-लास्ट-आउट (FILO) स्ट्रक्चर के रूप में जाना जाता है। पहले संग्रहीत किए गए तत्वों को तब तक पुनर्प्राप्त नहीं किया जा सकता है जब तक कि नवीनतम तत्व (आमतौर पर 'शीर्ष' तत्व के रूप में संदर्भित) को पुनर्प्राप्त नहीं किया गया हो।

कतार:

कतार एक ही प्रकार के तत्व का एक संग्रह है। यह एक रेखीय सूची है जिसमें सूची के एक छोर पर सम्मिलन हो सकता है, जिसे सूची के पीछे कहा जाता है, और विलोपन केवल दूसरे छोर पर हो सकता है, जिसे सूची का अग्र भाग कहा जाता है

एक कतार तत्वों का एक संग्रह है, जिसे एक बार में संग्रहीत और पुनर्प्राप्त किया जा सकता है। तत्वों को उनके भंडारण के समय के क्रम में पुनर्प्राप्त किया जाता है, अर्थात संग्रहीत पहला तत्व पुनर्प्राप्त किया जाने वाला अगला तत्व है। एक कतार को कभी-कभी फ़र्स्ट-इन-फ़र्स्ट-आउट (FIFO) या लास्ट-इन-लास्ट-आउट (LILO) संरचना के रूप में जाना जाता है। बाद में संग्रहीत तत्वों को पहले तत्व (आमतौर पर 'सामने' तत्व के रूप में संदर्भित) तक पुनर्प्राप्त नहीं किया जा सकता है।


2

एक स्टैक और एक कतार के विवरण को आज़माने और सरल बनाने के लिए, वे दोनों सूचना तत्वों की गतिशील श्रृंखला हैं जिन्हें श्रृंखला के एक छोर से एक्सेस किया जा सकता है और उनके बीच एकमात्र वास्तविक अंतर यह है कि:

जब एक स्टैक के साथ काम करना

  • आप श्रृंखला के एक छोर पर तत्व सम्मिलित करते हैं और
  • आप श्रृंखला के एक ही छोर से तत्वों को पुनः प्राप्त और / या हटाते हैं

एक कतार के साथ

  • आप श्रृंखला के एक छोर पर तत्व सम्मिलित करते हैं और
  • आप उन्हें दूसरे छोर से पुनः प्राप्त / निकालते हैं

नोट : मैं इस संदर्भ में पुनर्प्राप्त / हटाने के सार शब्द का उपयोग कर रहा हूं क्योंकि ऐसे उदाहरण हैं जब आप केवल श्रृंखला से तत्व को पुनः प्राप्त करते हैं या एक अर्थ में इसे पढ़ते हैं या इसके मूल्य तक पहुंचते हैं, लेकिन ऐसे उदाहरण भी हैं जब आप तत्व को हटाते हैं श्रृंखला और अंत में ऐसे उदाहरण हैं जब आप एक ही कॉल के साथ दोनों क्रियाएं करते हैं।

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

ज्यादातर मामलों में, हालांकि यह वास्तव में एक मूल्य या स्मृति स्थान (यानी एक सूचक) है। और बाकी लोग इस तथ्य को भाषा शब्दजाल <के पीछे छिपा रहे हैं

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

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

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


पाठ के लिए कोड फ़ॉर्मेटिंग का उपयोग न करें जो कोड नहीं है।
लोर्न

1

STACK एक LIFO (अंतिम में, पहले आउट) सूची है। मतलब मान लीजिए कि 3 तत्व स्टैक में डाले गए हैं यानी 10,20,30। 10 को पहले डाला गया है और 30 को अंतिम रूप से डाला गया है, इसलिए 30 को पहले स्टैक से हटा दिया गया है और 10 को स्टैक से अंतिम रूप से हटा दिया गया है। यह एक LIFO सूची है (लास्ट इन फर्स्ट आउट)।

QUEUE FIFO लिस्ट (फर्स्ट इन फर्स्ट आउट) है। पहले एक तत्व डाला जाता है, जिसे पहले डिलीट करना होता है। लोगों की कतार।


1

एक लंबवत संग्रह माना जाता है। पहले समझें कि एक संग्रह एक OBJECT है जो अन्य छोटे OBJECTS को इकट्ठा और व्यवस्थित करता है। इन छोटे OBJECTS को सामान्यतः एलिमेंट्स के रूप में जाना जाता है। ये तत्व एबीसी क्रम में स्टैक पर "पुशेड" हैं जहां ए पहले और सी अंतिम है। अनुलंब रूप से यह इस तरह दिखाई देगा: तीसरा तत्व जोड़ा गया) C दूसरा तत्व जोड़ा गया) B पहला तत्व जोड़ा गया) A

ध्यान दें कि "ए" जो पहले स्टैक में जोड़ा गया था, नीचे की तरफ है। यदि आप स्टैक से "ए" को हटाना चाहते हैं तो आपको पहले "सी", फिर "बी" को निकालना होगा, और फिर अंत में आपका लक्ष्य तत्व "ए"। स्टैक की जटिलताओं से निपटने के दौरान स्टैक को एक LIFO दृष्टिकोण की आवश्यकता होती है। (लास्ट इन फर्स्ट आउट) जब स्टैक से किसी तत्व को हटाते हैं, तो सही सिंटैक्स पॉप होता है। हम स्टैक से एक तत्व को नहीं हटाते हैं हम इसे "पॉप" करते हैं।

स्मरण करो कि "ए" स्टैक पर धकेल दिया गया पहला तत्व था और "सी" स्टैक पर पुश किया गया अंतिम आइटम था। क्या आपको यह तय करना चाहिए कि आप यह देखना चाहेंगे कि स्टैक के नीचे क्या है, 3 एलिमेंट्स स्टैक पर हैं। ऑर्डर किया जा रहा है पहला बी दूसरा है और सी तीसरा एलिमेंट होने के नाते, टॉप को पॉपअप करना होगा। स्टैक के नीचे देखने के लिए दूसरा तत्व जोड़ा गया।


बेहतर और अधिक पठनीय दिखने के लिए कृपया अपने प्रश्न को प्रारूपित करें।
नेकू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.