स्टैक और कतार के बीच अंतर

लेखक: Laura McKinney
निर्माण की तारीख: 2 अप्रैल 2021
डेट अपडेट करें: 12 मई 2024
Anonim
ढेर और कतार के बीच अंतर | ढेर और कतार क्या है | डेटा संरचना
वीडियो: ढेर और कतार के बीच अंतर | ढेर और कतार क्या है | डेटा संरचना

विषय


स्टैक और कतार दोनों गैर-आदिम डेटा संरचनाएं हैं। स्टैक और कतार के बीच मुख्य अंतर यह है कि डेटा तत्वों तक पहुंचने और जोड़ने के लिए स्टैक एलआईएफओ (पहली बार पहली बार) विधि का उपयोग करता है जबकि क्यूई डेटा तत्वों तक पहुंचने और जोड़ने के लिए एफआईएफओ (पहली बार में बाहर) विधि का उपयोग करता है।

स्टैक में डेटा तत्वों को पुश करने और पॉप करने के लिए केवल एक छोर खुला होता है और दूसरी ओर क्यू में डेटा तत्वों को एन्क्यूइंग और डीक्यूट करने के लिए दोनों छोर खुले होते हैं।

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

  1. तुलना चार्ट
  2. परिभाषा
  3. मुख्य अंतर
  4. कार्यान्वयन
  5. संचालन
  6. अनुप्रयोग
  7. निष्कर्ष

तुलना चार्ट

तुलना के लिए आधारढेर पंक्ति
काम करने का सिद्धांतLIFO (पहले में अंतिम)फीफो (फर्स्ट इन फर्स्ट आउट)
संरचनातत्वों को सम्मिलित करने और हटाने के लिए समान अंत का उपयोग किया जाता है।एक छोर का उपयोग सम्मिलन के लिए किया जाता है, अर्थात्, पीछे का अंत और दूसरे छोर का उपयोग तत्वों को हटाने के लिए किया जाता है, अर्थात, फ्रंट एंड।
उपयोग किए जाने वाले पॉइंटर्स की संख्याएकदो (सरल कतार मामले में)
संचालन किया गयापुश और पॉप चक्रव्यूह और छल
खाली हालत की परीक्षाशीर्ष == -1मोर्चा == -1 || मोर्चा == रियर + 1
पूर्ण स्थिति की परीक्षा
शीर्ष == अधिकतम - 1रियर == मैक्स - 1
वेरिएंटइसका वेरिएंट नहीं है।इसमें वृत्ताकार कतार, प्राथमिकता कतार, दोहरी समाप्त कतार जैसे संस्करण हैं।
कार्यान्वयनसरलतुलनात्मक रूप से जटिल


स्टैक की परिभाषा

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

ध्यान दें कि स्टैक में अक्सर एक्सेस किया जाने वाला तत्व सबसे ऊपरी तत्व होता है, जबकि अंतिम उपलब्ध तत्व स्टैक के निचले भाग में होता है।

उदाहरण

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


कतार की परिभाषा

एक कतार एक रैखिक डेटा संरचना है जो गैर-आदिम प्रकार की श्रेणी में आती है। यह समान प्रकार के तत्वों का एक संग्रह है। नए तत्वों का जोड़ एक छोर पर होता है जिसे रियर एंड कहा जाता है। इसी तरह, मौजूदा तत्वों का विलोपन दूसरे छोर पर होता है, जिसे फ्रंट-एंड कहा जाता है, और यह तार्किक रूप से पहले से पहले (फीफो) प्रकार की सूची है।

उदाहरण

हमारे दिन-प्रतिदिन के जीवन में हम कई परिस्थितियों में आते हैं जहां हम वांछित सेवा के लिए इंतजार करते हैं, वहां हमें सेवा प्राप्त करने के लिए अपनी बारी का इंतजार करना पड़ता है। इस प्रतीक्षा कतार को एक कतार के रूप में सोचा जा सकता है।

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

स्टैक इम्प्लीमेंटेशन

स्टैक को दो तरीकों से लागू किया जा सकता है:

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

कतार कार्यान्वयन

कतार को दो तरीकों से लागू किया जा सकता है:

  1. स्थैतिक कार्यान्वयन: यदि सरणियों का उपयोग करके एक कतार लागू की जाती है, तो कतार में हम जिन तत्वों को संग्रहीत करना चाहते हैं, उनकी सटीक संख्या को पूर्व में आश्वस्त किया जाना चाहिए, क्योंकि सरणी का आकार डिजाइन समय पर या प्रसंस्करण शुरू होने से पहले घोषित किया जाना है। इस स्थिति में, सरणी की शुरुआत कतार के सामने हो जाएगी, और सरणी का अंतिम स्थान कतार के पीछे के रूप में कार्य करेगा। निम्नलिखित संबंध पूरे तत्वों को कतार में मौजूद है जब सरणियों का उपयोग करके कार्यान्वित किया जाता है:
    सामने - पीछे + १
    यदि "पीछे <सामने" है तो कतार में कोई तत्व नहीं होगा या कतार हमेशा खाली रहेगी।
  2. गतिशील कार्यान्वयन: पॉइंटर्स का उपयोग करके कतारों को लागू करना, मुख्य नुकसान यह है कि लिंक किए गए प्रतिनिधित्व में एक नोड सरणी प्रतिनिधित्व में एक संबंधित तत्व की तुलना में अधिक मेमोरी स्पेस की खपत करता है। चूंकि डेटा नोड के लिए प्रत्येक नोड में कम से कम दो फ़ील्ड होते हैं और अन्य अगले नोड के पते को संग्रहीत करने के लिए होते हैं जबकि लिंक किए गए प्रतिनिधित्व में केवल डेटा फ़ील्ड होता है। लिंक किए गए प्रतिनिधित्व का उपयोग करने की योग्यता स्पष्ट हो जाती है जब किसी तत्व को अन्य तत्वों के समूह के बीच में सम्मिलित करना या हटाना आवश्यक होता है।

स्टैक पर संचालन

स्टैक पर संचालित किए जा सकने वाले मूल ऑपरेशन निम्नानुसार हैं:

  1. धक्का दें: जब स्टैक के शीर्ष पर एक नया तत्व जोड़ा जाता है तो उसे PUSH ऑपरेशन के रूप में जाना जाता है। एक तत्व को स्टैक में धकेलना तत्व को जोड़ने पर हमला करता है, क्योंकि नए तत्व को शीर्ष पर डाला जाएगा। प्रत्येक पुश ऑपरेशन के बाद, शीर्ष एक से बढ़ जाता है। यदि सरणी पूर्ण है, और कोई नया तत्व नहीं जोड़ा जा सकता है, तो इसे STACK-FULL condition या STACK OVERFLOW कहा जाता है। PUSH संचालन - C में कार्य:
    स्टैक को देखते हुए घोषित किया जाता है
    int स्टैक, टॉप = -1;
    शून्य धक्का ()
    {
    int आइटम;
    अगर (शीर्ष <4)
    {
    f ("नंबर दर्ज करें");
    स्कैन ("% d", और आइटम);
    शीर्ष = शीर्ष + 1;
    स्टैक = आइटम;
    }
    अन्य
    {
    एफ ("ढेर भरा हुआ है");
    }
    }
  2. पॉप: जब किसी तत्व को स्टैक के ऊपर से हटा दिया जाता है तो उसे POP ऑपरेशन के रूप में जाना जाता है। हर पॉप ऑपरेशन के बाद स्टैक को एक घटा दिया जाता है। यदि स्टैक पर कोई तत्व नहीं बचा है और पॉप का प्रदर्शन किया जाता है, तो इसका परिणाम STACK UNDERFLOW स्थिति में होगा, जिसका अर्थ है कि आपका स्टैक खाली है। पीओपी संचालन - सी में कार्य:
    स्टैक को देखते हुए घोषित किया जाता है
    int स्टैक, टॉप = -1;
    शून्य पॉप ()
    {
    int आइटम;
    अगर (शीर्ष> = 4)
    {
    आइटम = ढेर;
    शीर्ष = शीर्ष - 1;
    f ("हटाए गए नंबर =% d" है, आइटम);
    }
    अन्य
    {
    एफ ("ढेर खाली है");
    }
    }

एक कतार पर संचालन

बुनियादी कार्य जो कतार में किए जा सकते हैं, वे हैं:

  1. कतारबद्ध करें: क्यू में एक तत्व सम्मिलित करने के लिए। C में सक्रिय संचालन फ़ंक्शन:
    कतार के रूप में घोषित किया गया है
    int कतार, फ्रंट = -1 और रियर = -1;
    शून्य जोड़ ()
    {
    int आइटम;
    अगर (पीछे <4)
    {
    f ("नंबर दर्ज करें");
    स्कैन ("% d", और आइटम);
    अगर (सामने == -1)
    {
    सामने = 0;
    पीछे = 0;
    }
    अन्य
    {
    रियर = रियर + 1;
    }
    कतार = आइटम;
    }
    अन्य
    {
    f ("कतार पूर्ण है");
    }
    }
  2. विपंक्ति: क्यू से एक तत्व को हटाने के लिए। C में ऑपरेशन फ़ंक्शन को सक्रिय करना:
    कतार के रूप में घोषित किया गया है
    int कतार, फ्रंट = -1 और रियर = -1;
    शून्य हटाना ()
    {
    int आइटम;
    अगर (सामने! = -1)
    {
    आइटम = कतार;
    अगर (सामने == पीछे)
    {
    सामने = -1;
    रियर = -1;
    }
    अन्य
    {
    सामने = सामने + 1;
    f ("हटाए गए नंबर =% d" है, आइटम);
    }
    }
    अन्य
    {
    च ("कतार खाली है");
    }
    }

ढेर के अनुप्रयोग

  • एक संकलक में पार्सिंग।
  • जावा वर्चुअल मशीन।
  • एक शब्द संसाधक में पूर्ववत करें।
  • एक वेब ब्राउज़र में वापस बटन।
  • Ers के लिए पोस्टस्क्रिप्ट भाषा।
  • एक संकलक में फ़ंक्शन कॉल को लागू करना।

कतार के अनुप्रयोग

  • डेटा बफर
  • एसिंक्रोनस डेटा ट्रांसफर (फ़ाइल IO, पाइप, सॉकेट)।
  • एक साझा संसाधन (एर, प्रोसेसर) पर अनुरोध आवंटित करना।
  • यातायात विश्लेषण।
  • सुपरमार्केट में होने वाले कैशियर की संख्या निर्धारित करें।

निष्कर्ष

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