ढेर में C++ उदाहरण के साथ एस.टी.एल.
std::stack क्या है?
स्टैक एक डेटा संरचना है जो LIFO (लास्ट इन फर्स्ट आउट) तकनीक के आधार पर संचालित होती है। std::stack तत्वों को केवल एक छोर से जोड़ने और हटाने की अनुमति देता है।
std::stack क्लास एक कंटेनर एडाप्टर है। कंटेनर ऑब्जेक्ट एक समान डेटा प्रकार का डेटा रखते हैं। आप विभिन्न अनुक्रम कंटेनरों से एक स्टैक बना सकते हैं। यदि कोई कंटेनर प्रदान नहीं किया गया है, तो डेक्यू कंटेनर डिफ़ॉल्ट रूप से उपयोग किया जाएगा। कंटेनर एडाप्टर इटरेटर्स का समर्थन नहीं करते हैं, इसलिए इसका उपयोग डेटा में हेरफेर करने के लिए नहीं किया जा सकता है।
स्टैक सिंटैक्स
स्टैक बनाने के लिए, हमें निम्न को शामिल करना होगा हमारे कोड में हेडर फ़ाइल। फिर हम std::stack को परिभाषित करने के लिए इस सिंटैक्स का उपयोग करते हैं:
template <class Type, class Container = deque<Type> > class stack;
- प्रकार - std::stack में मौजूद तत्व का प्रकार है। यह कोई भी मान्य हो सकता है C++ प्रकार या यहां तक कि एक उपयोगकर्ता-परिभाषित प्रकार।
- कंटेनर - अंतर्निहित कंटेनर ऑब्जेक्ट का प्रकार है।
सदस्य प्रकार
स्टैक सदस्य प्रकार इस प्रकार हैं:
- value_type- पहला टेम्पलेट पैरामीटर, T. यह तत्व प्रकारों को दर्शाता है।
- container_type- दूसरा टेम्पलेट पैरामीटर, Container. यह अंतर्निहित कंटेनर प्रकार को दर्शाता है.
- size_type- अहस्ताक्षरित अभिन्न प्रकार.
Operaस्टैक में
A C++ स्टैक निम्नलिखित बुनियादी कार्यों का समर्थन करता है:
- पुश - यह स्टैक में एक आइटम जोड़ता/धकेलता है।
- पॉप - यह स्टैक से किसी आइटम को हटाता/पॉप करता है।
- झांकना - स्टैक के शीर्ष आइटम को बिना हटाए लौटाता है।
- isFull – जाँचता है कि स्टैक भरा हुआ है या नहीं।
- isEmpty - जाँचता है कि स्टैक खाली है या नहीं।
स्टैक कार्यान्वयन
चरण 1) हमारे पास शुरू में एक खाली स्टैक है। खाली स्टैक का शीर्ष -1 पर सेट है।
चरण 2) इसके बाद, हमने तत्व 5 को स्टैक में धकेल दिया है। स्टैक का शीर्ष तत्व 5 की ओर इंगित करेगा।
चरण 3) इसके बाद, हमने तत्व 50 को स्टैक में धकेल दिया है। स्टैक का शीर्ष स्थानांतरित हो जाता है और तत्व 50 की ओर इशारा करता है।
चरण 4) फिर हमने पॉप ऑपरेशन किया, स्टैक से शीर्ष तत्व को हटा दिया। तत्व 50 को स्टैक से पॉप कर दिया गया है। स्टैक का शीर्ष अब तत्व 5 की ओर इशारा करता है।
पुश() और पॉप()
stack::push() फ़ंक्शन स्टैक के शीर्ष पर नया आइटम जोड़ता है। प्रविष्टि के बाद स्टैक का आकार 1 से बढ़ जाता है। फ़ंक्शन इस सिंटैक्स को अपनाता है:
stack.push(value)
मान वह आइटम है जिसे स्टैक में डाला जाना है।
stack:: pop() फ़ंक्शन स्टैक के शीर्ष तत्व को हटाता है। यह स्टैक का सबसे नया आइटम है। हटाने के बाद स्टैक का आकार 1 से कम हो जाता है। फ़ंक्शन सिंटैक्स इस प्रकार है:
stack.pop()
फ़ंक्शन कोई पैरामीटर नहीं लेता.
उदाहरण 1:
#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); st.pop(); while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में स्टैक हेडर फ़ाइल शामिल करें।
- अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
- main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के भीतर जोड़ा जाना चाहिए।
- पूर्णांक मानों को संग्रहीत करने के लिए एक स्टैक st बनाएं.
- स्टैक में मान 10 डालने के लिए push() फ़ंक्शन का उपयोग करें।
- स्टैक में मान 20 डालने के लिए push() फ़ंक्शन का उपयोग करें।
- स्टैक में मान 30 डालने के लिए push() फ़ंक्शन का उपयोग करें।
- स्टैक में मान 40 डालने के लिए push() फ़ंक्शन का उपयोग करें।
- स्टैक से शीर्ष तत्व, अर्थात 40 को हटाने के लिए pop() फ़ंक्शन का उपयोग करें। अब शीर्ष तत्व 30 हो जाता है।
- स्टैक से शीर्ष तत्व, अर्थात 30 को हटाने के लिए pop() फ़ंक्शन का उपयोग करें। अब शीर्ष तत्व 20 हो जाता है।
- स्टैक खाली है या नहीं, यह जाँचने के लिए while लूप और empty() फ़ंक्शन का उपयोग करें। ! NOT ऑपरेटर है।
- कंसोल पर स्टैक की वर्तमान सामग्री को प्रिंट करना।
- स्टैक पर pop() फ़ंक्शन को कॉल करें.
- while लूप के मुख्य भाग का अंत.
- main() फ़ंक्शन बॉडी का अंत.
खाली(), आकार(), शीर्ष()
स्टैक में इनबिल्ट फ़ंक्शन होते हैं जिनका उपयोग आप स्टैक और उसके मानों के साथ खेलने के लिए कर सकते हैं। इनमें शामिल हैं:
- empty()- जाँचता है कि स्टैक खाली है या नहीं।
- size()- स्टैक का आकार, अर्थात स्टैक में तत्वों की संख्या लौटाता है।
- top()- शीर्ष पर स्टैक तत्व तक पहुँचता है।
उदाहरण 2:
#include <iostream> #include <stack> using namespace std; void createStack(stack <int> mystack) { stack <int> ms = mystack; while (!ms.empty()) { cout << '\t' << ms.top(); ms.pop(); } cout << '\n'; } int main() { stack <int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; createStack(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); cout << "\n st.pop() : "; st.pop(); createStack(st); return 0; }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में स्टैक हेडर फ़ाइल शामिल करें।
- हमारे प्रोग्राम में std नामस्थान को शामिल करें ताकि हम इसे कॉल किए बिना इसके क्लासों का उपयोग कर सकें।
- createStack फ़ंक्शन बनाएँ जिसका उपयोग हम स्टैक mystack बनाने के लिए कर सकते हैं। स्टैक पूर्णांकों का एक सेट रखेगा।
- createStack फ़ंक्शन के मुख्य भाग का आरंभ.
- mystack डेटाटाइप का एक उदाहरण बनाएं और इसे ms नाम दें।
- स्टैक खाली है या नहीं, यह जांचने के लिए while लूप और empty() फ़ंक्शन का उपयोग करें।
- while लूप के मुख्य भाग का प्रारंभ.
- स्टैक के शीर्ष पर संग्रहीत top() फ़ंक्शन का उपयोग करें। \t वर्ण एक नया टैब बनाएगा।
- स्टैक के शीर्ष पर स्थित तत्व को हटाने के लिए pop() फ़ंक्शन का उपयोग करें।
- while लूप के मुख्य भाग का अंत.
- कंसोल पर एक रिक्त पंक्ति प्रिंट करें.
- createStack फ़ंक्शन के मुख्य भाग का अंत.
- main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को main() फ़ंक्शन के बॉडी में जोड़ा जाना चाहिए।
- फ़ंक्शन main() के मुख्य भाग का प्रारंभ.
- एक स्टैक ऑब्जेक्ट st बनाएँ.
- स्टैक में तत्व 32 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
- स्टैक में तत्व 21 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
- स्टैक में तत्व 39 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
- स्टैक में तत्व 89 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
- स्टैक में तत्व 25 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
- कंसोल पर कुछ पाठ प्रिंट करें.
- स्टैक में उपरोक्त सम्मिलित ऑपरेशन निष्पादित करने के लिए createStack फ़ंक्शन को कॉल करें।
- कंसोल पर अन्य पाठ के साथ स्टैक का आकार प्रिंट करें।
- कंसोल पर स्टैक के शीर्ष पर स्थित तत्व को प्रिंट करें।
- कंसोल पर कुछ पाठ प्रिंट करें.
- स्टैक के शीर्ष पर मौजूद तत्व को हटाएँ। फिर यह स्टैक में बचे हुए तत्वों को वापस कर देगा।
- उपरोक्त कार्यों को निष्पादित करने के लिए createStack फ़ंक्शन को कॉल करें।
- प्रोग्राम को सफलतापूर्वक पूरा होने पर मान लौटाना होगा।
- फ़ंक्शन main() के मुख्य भाग का अंत.
एम्प्लेस() और स्वैप()
ये अन्य इनबिल्ट स्टैक फ़ंक्शन हैं:
- emplace()- निर्माण करता है फिर स्टैक के शीर्ष पर नया तत्व सम्मिलित करता है।
- स्वैप()- स्टैक की सामग्री को दूसरे स्टैक की सामग्री के साथ बदलता है।
उदाहरण 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st1; stack<int> st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में स्टैक हेडर फ़ाइल शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में cstdlib हेडर फ़ाइल शामिल करें।
- अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
- main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक इस फ़ंक्शन के मुख्य भाग में जोड़ा जाएगा।
- पूर्णांक मानों को संग्रहीत करने के लिए st1 नामक स्टैक घोषित करें।
- पूर्णांक मानों को संग्रहीत करने के लिए st2 नामक स्टैक घोषित करें।
- st12 नामक स्टैक में पूर्णांक 1 को सम्मिलित करने के लिए emplace() फ़ंक्शन का उपयोग करें।
- st19 नामक स्टैक में पूर्णांक 1 को सम्मिलित करने के लिए emplace() फ़ंक्शन का उपयोग करें।
- st20 नामक स्टैक में पूर्णांक 2 को सम्मिलित करने के लिए emplace() फ़ंक्शन का उपयोग करें।
- st23 नामक स्टैक में पूर्णांक 2 को सम्मिलित करने के लिए emplace() फ़ंक्शन का उपयोग करें।
- दो स्टैक, st1 और st2 की सामग्री को स्वैप करने के लिए स्वैप() फ़ंक्शन का उपयोग करें। स्टैक st1 की सामग्री को स्टैक st2 में ले जाना चाहिए। स्टैक st2 की सामग्री को स्टैक st1 में ले जाना चाहिए।
- कंसोल पर कुछ पाठ प्रिंट करें.
- यह जाँचने के लिए कि स्टैक st1 रिक्त नहीं है, while कथन और empty() फ़ंक्शन का उपयोग करें।
- कंसोल पर स्टैक st1 की सामग्री को प्रिंट करें। कंसोल पर प्रिंट करते समय " " स्टैक तत्वों के बीच स्थान जोड़ता है।
- शीर्ष तत्व को हटाने के लिए स्टैक st1 पर pop() फ़ंक्शन निष्पादित करें।
- while कथन के मुख्य भाग का अंत.
- कंसोल पर कुछ टेक्स्ट प्रिंट करें। endl एक है C++ अंतिम पंक्ति के लिए कीवर्ड। यह माउस कर्सर को अगली पंक्ति पर ले जाता है ताकि वहाँ से मुद्रण शुरू हो सके।
- यह जाँचने के लिए कि स्टैक st2 रिक्त नहीं है, while कथन और empty() फ़ंक्शन का उपयोग करें।
- कंसोल पर स्टैक st2 की सामग्री को प्रिंट करें। कंसोल पर प्रिंट करते समय " " स्टैक तत्वों के बीच स्थान जोड़ता है।
- शीर्ष तत्व को हटाने के लिए स्टैक st2 पर pop() फ़ंक्शन निष्पादित करें।
- while कथन के मुख्य भाग का अंत.
- main() फ़ंक्शन के मुख्य भाग का अंत.
STL में स्टैक
एसटीएल (मानक टेम्पलेट लाइब्रेरी) टेम्पलेट क्लासों के साथ आता है जो सामान्य जानकारी प्रदान करते हैं C++ डेटा संरचनाएँ। इसलिए, स्टैक को STL में भी लागू किया जा सकता है। हम बस इस लाइब्रेरी को अपने कोड में शामिल करते हैं और स्टैक को परिभाषित करने के लिए इसका उपयोग करते हैं।
stack<T> st;
उपरोक्त सिंटैक्स डेटा प्रकार T के तत्वों के लिए स्टैक st घोषित करता है।
उदाहरण 4:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); cout << st.size(); }
आउटपुट:
कोड का स्क्रीनशॉट यहां दिया गया है:
कोड स्पष्टीकरण:
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में स्टैक हेडर फ़ाइल शामिल करें।
- इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में cstdlib हेडर फ़ाइल शामिल करें।
- अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
- main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
- पूर्णांक डेटा संग्रहीत करने के लिए स्टैक st घोषित करें।
- स्टैक में तत्व 12 जोड़ें.
- स्टैक में तत्व 19 जोड़ें.
- स्टैक में तत्व 20 जोड़ें.
- कंसोल पर स्टैक के शीर्ष पर स्थित तत्व को प्रिंट करें।
- कंसोल पर स्टैक का आकार प्रिंट करें.
- फ़ंक्शन main() के मुख्य भाग का अंत.
सारांश
- स्टैक एक डेटा संरचना है जो LIFO (लास्ट इन फर्स्ट आउट) तकनीक पर आधारित होती है।
- std::stack केवल एक छोर से ही आइटम जोड़ने और हटाने की अनुमति देता है।
- std::stack वर्ग एक कंटेनर एडाप्टर है, जो समान डेटा प्रकार के आइटम रखता है।
- एक स्टैक विभिन्न अनुक्रम कंटेनरों से बनाया जा सकता है।
- यदि आप कोई कंटेनर उपलब्ध नहीं कराते हैं, तो डिफ़ॉल्ट रूप से डेक कंटेनर का उपयोग किया जाएगा।
- पुश() फ़ंक्शन स्टैक में आइटम सम्मिलित करने के लिए है।
- पॉप() फ़ंक्शन चरण से शीर्ष आइटम को हटाने के लिए है।
- empty() फ़ंक्शन यह जाँचने के लिए है कि स्टैक खाली है या नहीं।