अनुशंसित, 2024

संपादक की पसंद

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

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

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

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

तुलना चार्ट

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

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

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

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

उदाहरण

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

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

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

उदाहरण

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

स्टैक और कतार के बीच महत्वपूर्ण अंतर

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

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

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

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

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

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

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

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

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

  1. PUSH : जब स्टैक के शीर्ष पर एक नया तत्व जोड़ा जाता है, तो PUSH ऑपरेशन के रूप में जाना जाता है। एक तत्व को स्टैक में धकेलना तत्व को जोड़ने पर हमला करता है, क्योंकि नए तत्व को शीर्ष पर डाला जाएगा। प्रत्येक पुश ऑपरेशन के बाद, शीर्ष एक से बढ़ जाता है। यदि सरणी पूर्ण है, और कोई नया तत्व नहीं जोड़ा जा सकता है, तो इसे STACK-FULL condition या STACK OVERFLOW कहा जाता है। PUSH संचालन - C में कार्य:
    स्टैक को देखते हुए घोषित किया जाता है
    int stack [5], top = -1;
    void push()
    {
    int item;
    if (top < 4)
    {
    printf ("Enter the number") ;
    scan ("%d", & item) ;
    top = top + 1;
    stack [top] = item;
    }
    else
    {
    printf (" Stack is full");
    }
    }
  2. पीओपी : जब किसी तत्व को स्टैक के ऊपर से हटा दिया जाता है तो इसे पीओपी ऑपरेशन के रूप में जाना जाता है। हर पॉप ऑपरेशन के बाद स्टैक को एक घटा दिया जाता है। यदि स्टैक पर कोई तत्व नहीं बचा है और पॉप का प्रदर्शन किया जाता है, तो इसका परिणाम STACK UNDERFLOW स्थिति में होगा, जिसका अर्थ है कि आपका स्टैक खाली है। पीओपी संचालन - सी में कार्य:
    स्टैक को देखते हुए घोषित किया जाता है
    int stack [5], top = -1;
    void pop()
    {
    int item;
    if (top >= 4)
    {
    item = stack [top];
    top = top - 1;
    printf ("Number deleted is = %d", item) ;
    }
    else
    {
    printf (" Stack is empty");
    }
    }

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

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

  1. एन्क्यू : एक कतार में एक तत्व सम्मिलित करने के लिए। C में सक्रिय संचालन फ़ंक्शन:
    कतार के रूप में घोषित किया गया है
    int queue [5], Front = -1 and rear = -1;
    void add ()
    {
    int item;
    if ( rear < 4)
    {
    printf ("Enter the number") ;
    scan ("%d", & item) ;
    if (front == -1)
    {
    front =0 ;
    rear =0 ;
    }
    else
    {
    rear = rear + 1;
    }
    queue [rear] = item ;
    }
    else
    {
    printf ("Queue is full") ;
    }
    }
  2. Dequeue : कतार से किसी तत्व को हटाने के लिए। C में कार्य संचालन को सक्रिय करें:
    कतार के रूप में घोषित किया गया है
    int queue [5], Front = -1 and rear = -1;
    void delete ()
    {
    int item;
    if ( front ! = -1)
    {
    item = queue [ front ] ;
    if (front == rear)
    {
    front =-1 ;
    rear =-1 ;
    }
    else
    {
    front = front + 1;
    printf ("Number deleted is = %d", item) ;
    }
    }
    else
    {
    printf ("Queue is empty") ;
    }
    }

ढेर के आवेदन

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

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

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

निष्कर्ष

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

Top