2016-10-26 11 views
6

मान लीजिए यह एक मूर्ख सवाल की तरह लगता है, लेकिन मेरे साथ भालू।सूची का कौन सा अंत शीर्ष है?

एक प्रश्न में मुझे एक स्टैक से संबंधित दिया गया है, हम एक ऐसे फ़ंक्शन को परिभाषित करना चाहते हैं जो स्टैक के "शीर्ष पर" आइटम लौटाता है। मेरे लिए, मुझे नहीं पता कि कौन सा पक्ष "शीर्ष" है क्योंकि वास्तव में, दोनों तरफ हो सकता है।

इसके अलावा, मुझे एक कतार से संबंधित एक प्रश्न दिया गया है जो हमें एक समारोह को परिभाषित करने के लिए कहता है जो कतार के "सामने" आइटम को वापस लौटाता है। दोबारा, किसी भी तरफ को "फ्रंट"

के रूप में व्याख्या किया जा सकता है यदि प्रश्नों को "सूची में अंतिम आइटम लौटाएं" या "सूची में पहली वस्तु" पूछने के लिए कहा गया है, तो यह सही समझ में आता है, लेकिन दुर्भाग्य से यह है मामला नहीं।

तो मैं जानना चाहता हूं: क्या स्टैक्स/कतारों के संदर्भ में "सामने" और "शीर्ष" दोनों की परिभाषा है जो मूल रूप से केवल सूचियां हैं, या ये शब्द संदिग्ध हैं?

+0

मुझे लगता है कि वह इसका मतलब है की तरह एक सूची तो सबस्ट्रिंग पर गौर और शीर्ष द्वारा मुझे यकीन है कि वे मतलब सूचकांक 0 – thesonyman101

+0

https://en.wikibooks.org/wiki/Data_Structures/Stacks_and_Queues के अनुसार, वहाँ केवल 'एक है अंत में स्टैक के शीर्ष कहा जाता है। 'और' कतार के सामने वाला आइटम ', ऐसा लगता है कि यह – davedwards

+0

अस्पष्टता नहीं है यह बहुत अच्छी तरह से निर्भर करता है कि आप इसे कैसे देखना चाहते हैं। किसी के लिए, स्टैक का शीर्ष सूची का अंतिम तत्व हो सकता है (एफआईएफओ के बाद से), इसलिए किसी भी 'पॉप()' ऑपरेशन का मतलब सबसे हाल ही में डाला गया तत्व निकालना होगा। दूसरी तरफ, स्टैक टॉप पहला तत्व हो सकता है, जहां प्रत्येक 'पॉप()' के बाद आपने शेष सभी तत्वों को बाईं ओर 1 स्थिति में समायोजित कर दिया है। –

उत्तर

5

है वहाँ दोनों "सामने" और ढेर/कतारों जो मूल रूप से कर रहे हैं बस को सूचीबद्ध करता है या इन शर्तों अस्पष्ट

सवाल एक झूठे आधार पर बनाया गया है कर रहे हैं के संदर्भ में "टॉप" के लिए एक परिभाषा वह ढेर/कतार "मूल रूप से सिर्फ सूचियां" हैं।

इस तस्वीर पर एक नज़र है, जो दिखाता है कि अजगर सूचियों स्मृति में जमा हो जाती है ले लो (CPython)

it's a python list, dawg!

(छवि स्रोत: here)

कार्यान्वयन वास्तव में है बहुत कुछ नहीं एक ढेर या कतार की तरह, और वास्तविक सूची वस्तुओं स्मृति में जगह पर हो सकता है।

ढेर:

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

कतार:

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

+0

धन्यवाद जो समझ में आता है। मुझे लिफो और फीफो प्रकृति माना जाना चाहिए था। लेकिन मुझे यकीन है कि आप समझ सकते हैं कि मैं कहां से कह रहा हूं कि "शीर्ष" और "सामने" काफी संदिग्ध हैं। – oneman

+0

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

+0

ऐसा लगता है कि कागज की एक खाली शीट लेने और पूछने के लिए, किन पक्ष को ऊपरी होना चाहिए। यदि आप कुछ भी आकर्षित करना चाहते हैं तो आप इस तथ्य को निर्धारित करेंगे, लेकिन पहले कोई ऊपरी पक्ष नहीं है। – am2

5

मुझे लगता है कि, कड़ाई से बोलते हुए, न तो सूची में एक कतार के ढेर/मोर्चे के शीर्ष होने के लिए है। आपकी डेटा संरचना का कार्यान्वयन डेटा संरचना के अपेक्षित व्यवहार से अलग है।

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

इसके साथ, पूर्व कार्यान्वयन काफी अक्षम है क्योंकि हर बार जब आप स्टैक पर/बंद मूल्यों को पुश/पॉप करते हैं, तो आपको अपनी पूरी सूची बदलनी होगी, जबकि बाद का कार्यान्वयन अधिक कुशल है क्योंकि आप बस जोड़ सकते हैं/हटा सकते हैं सूची के अंत से/से तत्व।

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

1

यह इस बात पर निर्भर करता है कि आप सूची में कैसे शामिल हैं। यदि आप इसे कर रहे हैं,

stack = [] 
numbers = [1, 2, 3, 4, 6, 5] 
for n in numbers: 
    stack.append(n) 
print(stack) 

फिर स्टैक का "शीर्ष" अंत है। सूची के सामने से जोड़ते समय फ्रंट या इंडेक्स 0 शीर्ष पर है। कैलकुलेटर के लिए यहां एक उदाहरण दिया गया है।

addStack = [] 
curNumber = 0 
while True: 
    n = raw_input("Enter a number or operation.") 
    if n.isdecimal(): 
    addStack.append(int(n)) 
    if n == "=": 
    print("Top number(or last number entered): %i" % (
संबंधित मुद्दे