एक कतार पर, "सिर" कौन सा है?


18

मैंने हमेशा सोचा था कि पढ़ने के लिए अगले तत्व के रूप में एक कतार का "सिर", और वास्तव में कभी भी उस उपयोग पर सवाल नहीं उठाया। इसलिए एक लिंक्ड-लिस्ट लाइब्रेरी जो मैंने लिखी है, जिसका उपयोग कतारों को बनाए रखने के लिए किया जाता है, उस शब्दावली को संहिताबद्ध किया जाता है: हमारे पास एक list1_headमैक्रो है जो पहले तत्व को पुनः प्राप्त करता है; जब एक कतार में इस पुस्तकालय का उपयोग करते हैं, तो यह हटाया जाने वाला पहला तत्व होगा।

लेकिन टीम के एक नए डेवलपर का इस्तेमाल कतारों में लगने के लिए किया जाता था। उन्होंने एक कतार को एक कुत्ते की तरह व्यवहार करने के रूप में वर्णित किया: आप सिर पर डालें, और पूंछ पर निकालें। यह एक चतुर पर्याप्त वर्णन है जो मुझे लगता है कि उसका उपयोग अधिक व्यापक होना चाहिए, और मेरे पास मेरे पसंदीदा उपयोग का समान रूप से विकसित विवरण नहीं है।

तो, मुझे लगता है, दो संबंधित प्रश्न हैं: 1, एक कतार के "सिर" का क्या मतलब है? और 2, हम उस अवधारणा का वर्णन करने के लिए "सिर" शब्द का उपयोग क्यों करते हैं?


1
"उन्होंने एक कतार को एक कुत्ते की तरह व्यवहार करने के रूप में वर्णित किया" ... काम करने के लिए एक मजेदार आदमी की तरह लगता है - उसे एक ग्राहक के पास न जाने दें।
NoChance

1
मुझे नहीं पता, लेकिन मैंने आपके कार्यान्वयन पर अनुमान लगाया होगा, कुत्ते से नहीं।
इज़काता

QUEUE और STACK के बीच अंतर के बारे में एक और अच्छी व्याख्या: http://pages.cs.wisc.edu/~mcw/cs367/lectures/stacks.html
Ythalo Rossy

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

BTW, लगता है कि यह आंशिक रूप से एक भाषा से संबंधित बात है, लेकिन यह भी है कि हम कैसे एक कतार क्या करता है की अवधारणा है। अधिकांश लोग जो "कतार" शब्द का अर्थ जानते हैं, या उस रूपक (पंक्ति में प्रतीक्षा) के साथ अवधारणा से परिचित हैं, बाहर निकलने का हिस्सा सामने / सिर पर है; मुझे संदेह है कि आपके मित्र को पाइप लाइन की तरह यह अवधारणा अधिक पसंद है, जहां आप एक छोर पर वस्तुओं को धक्का देते हैं (शुरुआत में, या कुछ अर्थ में, पाइप के "सिर"), और वे दूसरे छोर पर बाहर निकलते हैं।
फिलिप मिलोवानोविक

जवाबों:


29

आप कतार के पीछे प्रवेश करते हैं, और सामने से निकल जाते हैं। अधिकांश समाजों में, इसका अर्थ होता है कि सिर सबसे आगे है, और आइटम सिर से हटा दिए जाते हैं।

कतार के लिए जावाडोक (आपके मूल एक यानी) क्लासिक परिभाषा से सहमत लगता है:

जो भी आदेश दिया जाता है, कतार का प्रमुख वह तत्व होता है जिसे हटाने () या पोल () को कॉल करने से हटा दिया जाएगा। एक FIFO कतार में, सभी नए तत्वों को कतार की पूंछ पर डाला जाता है।


4
C ++ STL भी सहमत है।
फैबियो सेकोनेलो

इसके अलावा FIFO / LIFO के लिए सामान्य शब्दावली क्यू / स्टैक के शीर्ष से दूर करना है। कुत्ते का शीर्ष सिर है, पूंछ नहीं। :
स्पेंसर कोरम्स

ऐसा लगता है कि आपने 1 प्रश्न का उत्तर दिया है, यह वास्तव में आमतौर पर मामला है कि जो उपयोग मैंने समझा है वह पारंपरिक है ... संदर्भ के लिए धन्यवाद। लेकिन यह मेरे लिए लोहे की तरह नहीं है क्योंकि कतार के सामने वाले हिस्से को "सिर" क्यों कहा जाता है ...
Aidan Cully

... तो कुत्ते के किस छिद्र में हम वस्तुओं की गणना करते हैं? ;)
पक्ष

1
कुत्ते की पूंछ कतार का प्रमुख है।
कालेब

8

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


शायद यह अंग्रेजी के बारे में अधिक सवाल है, फिर, क्योंकि जो मुद्दा सामने आया है वह यह है कि "हम सामने वाले को सिर क्यों कहते हैं?"
इदान कूली

3
@ एदानकुल: क्योंकि शरीर पर सिर (चतुर्भुज और अन्य जानवरों को क्षैतिज रूप से उन्मुख) अग्र-अग्रभाग या सामने की ओर होता है।
outis

हमारे अमेरिकियों के लिए यह सबसे अच्छा संभव स्पष्टीकरण है।
-देव

4

दोनों सम्मेलन सामान्य उपयोग में हैं। मेरे अनुभव में, जब सामान्य रूप से कतारों के बारे में बात की जाती है, तो शीर्ष तत्व कतार से बाहर आने के लिए अगला होता है, और पूंछ वह होती है जहां तत्व कतार में प्रवेश करते हैं। यह रोजमर्रा के अंग्रेजी उपयोग के अनुरूप है- हम पीछे की ओर लाइन में मिलते हैं, और आगे की सेवा सामने या सिर पर होती है। (और यदि आप काटते हैं, तो यह आपके लिए लाइन के पीछे है!)

हालाँकि, जब एक कतार (उर्फ एफआईएफओ) को रिंग बफर के रूप में लागू किया जाता है , तो शब्दों को आम तौर पर उलट दिया जाता है, क्योंकि रिंग बफर का उपयोग किया हुआ हिस्सा एक सर्कल में घूमने वाले सांप जैसा दिखता है। यह मानते हुए कि सांप आगे बढ़ रहा है, सिर स्वाभाविक रूप से अंत है जो आंदोलन का नेतृत्व करता है, जो कि अंत भी है जिसमें आने वाली वस्तुओं को डाला जाता है।


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