ढेर में C++ उदाहरण के साथ एस.टी.एल.

⚡ स्मार्ट सारांश

ढेर में C++ STL एक LIFO कंटेनर एडाप्टर को लागू करता है जो एक ही छोर से तत्वों को जोड़ता और हटाता है, रैप करता हैping क्रमबद्ध डेटा को प्रबंधित करने के लिए डेक, वेक्टर या सूची जैसे अंतर्निहित अनुक्रम कंटेनर।

  • 🔘 LIFO सिद्धांत: std::stack लास्ट इन फर्स्ट आउट क्रम का पालन करता है, इसलिए सबसे हाल ही में पुश किया गया तत्व हमेशा सबसे पहले हटाया जाता है।
  • 📦 कंटेनर एडाप्टर: एक स्टैक मौजूदा अनुक्रम कंटेनर को रैप करता है और जब कोई कंटेनर प्रकार प्रदान नहीं किया जाता है तो डिफ़ॉल्ट रूप से डेक्यू का उपयोग करता है।
  • मुख्य परिचालन: पुश, पॉप और टॉप फ़ंक्शन क्रमशः आइटम डालने, सबसे ऊपर वाले आइटम को हटाने और सबसे ऊपर वाले आइटम को पढ़ने का काम करते हैं।
  • 🔍 राज्य द्वारा जाँच: एम्प्टी और साइज फंक्शन यह बताते हैं कि स्टैक में एलिमेंट हैं या नहीं और वर्तमान में उसमें कितने एलिमेंट मौजूद हैं।
  • 🔁 अतिरिक्त कार्य: एम्प्लेस और स्वैप फ़ंक्शन एक एलिमेंट को उसी स्थान पर बनाते हैं और दो स्टैक की सामग्री का आदान-प्रदान करते हैं।
  • 🤖 एआई सहायता: GitHub Copilot जैसे AI कोडिंग सहायक एक छोटी टिप्पणी से स्टैक पुश, पॉप और ट्रैवर्सल के लिए आवश्यक कोड तैयार करते हैं।

ढेर में C++ एसटीएल

std::stack क्या है?

स्टैक एक डेटा संरचना है जो LIFO (लास्ट इन फर्स्ट आउट) तकनीक के आधार पर संचालित होती है। std::stack तत्वों को केवल एक छोर से जोड़ने और हटाने की अनुमति देता है।

std::stack क्लास एक कंटेनर एडॉप्टर है। कंटेनर ऑब्जेक्ट समान डेटा प्रकार का डेटा रखते हैं। आप विभिन्न अनुक्रम कंटेनरों से स्टैक बना सकते हैं। यदि कोई कंटेनर प्रदान नहीं किया जाता है, तो डिफ़ॉल्ट रूप से डेक्यू कंटेनर का उपयोग किया जाएगा। कंटेनर एडॉप्टर इटरेटर का समर्थन नहीं करते हैं, इसलिए इनका उपयोग डेटा में हेरफेर करने के लिए नहीं किया जा सकता है।

स्टैक सिंटैक्स

स्टैक बनाने के लिए, हमें निम्न को शामिल करना होगा हमारे कोड में हेडर फ़ाइल। फिर हम std::stack को परिभाषित करने के लिए इस सिंटैक्स का उपयोग करते हैं:

template <class Type, class Container = deque<Type> > class stack;
  • प्रकार - std::stack में मौजूद तत्व का प्रकार है। यह कोई भी मान्य हो सकता है C++ प्रकार या यहां तक ​​कि एक उपयोगकर्ता-परिभाषित प्रकार।
  • कंटेनर - अंतर्निहित कंटेनर ऑब्जेक्ट का प्रकार है।

सदस्य प्रकार

स्टैक सदस्य प्रकार इस प्रकार हैं:

  • मान प्रकार– पहला टेम्पलेट पैरामीटर, T. यह तत्व प्रकारों को दर्शाता है।
  • कंटेनर_प्रकार– दूसरा टेम्पलेट पैरामीटर, कंटेनर। यह अंतर्निहित कंटेनर प्रकार को दर्शाता है।
  • आकार_प्रकार– अहस्ताक्षरित पूर्णांक प्रकार।

Operaस्टैक में

A C++ स्टैक निम्नलिखित बुनियादी कार्यों का समर्थन करता है:

  • धक्का – यह स्टैक में एक आइटम जोड़ता/डालता है।
  • पॉप – यह स्टैक से एक आइटम हटाता है/पॉप करता है।
  • झांकना – स्टैक से आइटम हटाए बिना, स्टैक के सबसे ऊपर वाले आइटम को लौटाता है।
  • पूर्ण है – यह जांचता है कि स्टैक भरा हुआ है या नहीं।
  • खाली है – यह जांचता है कि स्टैक खाली है या नहीं।

स्टैक कार्यान्वयन

निम्नलिखित चरण दर्शाते हैं कि आइटम को स्टैक में डालने और फिर निकालने पर स्टैक का शीर्ष भाग कैसे स्थानांतरित होता है:

चरण 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();
	}
}

आउटपुट:

पुश() और पॉप()

कोड का स्क्रीनशॉट यहां दिया गया है:

पुश() और पॉप()

Code स्पष्टीकरण:

  1. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
  2. इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में स्टैक हेडर फ़ाइल शामिल करें।
  3. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
  4. main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के भीतर जोड़ा जाना चाहिए।
  5. पूर्णांक मानों को संग्रहीत करने के लिए एक स्टैक st बनाएं.
  6. स्टैक में मान 10 डालने के लिए push() फ़ंक्शन का उपयोग करें।
  7. स्टैक में मान 20 डालने के लिए push() फ़ंक्शन का उपयोग करें।
  8. स्टैक में मान 30 डालने के लिए push() फ़ंक्शन का उपयोग करें।
  9. स्टैक में मान 40 डालने के लिए push() फ़ंक्शन का उपयोग करें।
  10. स्टैक से शीर्ष तत्व, अर्थात 40 को हटाने के लिए pop() फ़ंक्शन का उपयोग करें। अब शीर्ष तत्व 30 हो जाता है।
  11. स्टैक से शीर्ष तत्व, अर्थात 30 को हटाने के लिए pop() फ़ंक्शन का उपयोग करें। अब शीर्ष तत्व 20 हो जाता है।
  12. स्टैक खाली है या नहीं, यह जाँचने के लिए while लूप और empty() फ़ंक्शन का उपयोग करें। ! NOT ऑपरेटर है।
  13. कंसोल पर स्टैक की वर्तमान सामग्री को प्रिंट करना।
  14. स्टैक पर pop() फ़ंक्शन को कॉल करें.
  15. while लूप के मुख्य भाग का अंत.
  16. main() फ़ंक्शन बॉडी का अंत.

खाली(), आकार(), शीर्ष()

स्टैक में इनबिल्ट फ़ंक्शन होते हैं जिनका उपयोग आप स्टैक और उसके मानों के साथ खेलने के लिए कर सकते हैं। इनमें शामिल हैं:

  • खाली()– यह जांचता है कि स्टैक खाली है या नहीं।
  • आकार ()– यह स्टैक का आकार लौटाता है, यानी स्टैक में मौजूद तत्वों की संख्या।
  • ऊपर()– यह स्टैक के शीर्ष पर स्थित तत्व तक पहुँचता है।

उदाहरण 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;
}

आउटपुट:

खाली(), आकार(), शीर्ष()

कोड का स्क्रीनशॉट यहां दिया गया है:

खाली(), आकार(), शीर्ष()

Code स्पष्टीकरण:

  1. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
  2. इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में स्टैक हेडर फ़ाइल शामिल करें।
  3. हमारे प्रोग्राम में std नामस्थान को शामिल करें ताकि हम इसे कॉल किए बिना इसके क्लासों का उपयोग कर सकें।
  4. createStack फ़ंक्शन बनाएँ जिसका उपयोग हम स्टैक mystack बनाने के लिए कर सकते हैं। स्टैक पूर्णांकों का एक सेट रखेगा।
  5. createStack फ़ंक्शन के मुख्य भाग का आरंभ.
  6. mystack डेटाटाइप का एक उदाहरण बनाएं और इसे ms नाम दें।
  7. स्टैक खाली है या नहीं, यह जांचने के लिए while लूप और empty() फ़ंक्शन का उपयोग करें।
  8. while लूप के मुख्य भाग का प्रारंभ.
  9. स्टैक के शीर्ष पर संग्रहीत top() फ़ंक्शन का उपयोग करें। \t वर्ण एक नया टैब बनाएगा।
  10. स्टैक के शीर्ष पर स्थित तत्व को हटाने के लिए pop() फ़ंक्शन का उपयोग करें।
  11. while लूप के मुख्य भाग का अंत.
  12. कंसोल पर एक रिक्त पंक्ति प्रिंट करें.
  13. createStack फ़ंक्शन के मुख्य भाग का अंत.
  14. main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को main() फ़ंक्शन के बॉडी में जोड़ा जाना चाहिए।
  15. फ़ंक्शन main() के मुख्य भाग का प्रारंभ.
  16. एक स्टैक ऑब्जेक्ट st बनाएँ.
  17. स्टैक में तत्व 32 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
  18. स्टैक में तत्व 21 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
  19. स्टैक में तत्व 39 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
  20. स्टैक में तत्व 89 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
  21. स्टैक में तत्व 25 को सम्मिलित करने के लिए push() फ़ंक्शन का उपयोग करें।
  22. कंसोल पर कुछ पाठ प्रिंट करें.
  23. स्टैक में उपरोक्त सम्मिलित ऑपरेशन निष्पादित करने के लिए createStack फ़ंक्शन को कॉल करें।
  24. कंसोल पर अन्य पाठ के साथ स्टैक का आकार प्रिंट करें।
  25. कंसोल पर स्टैक के शीर्ष पर स्थित तत्व को प्रिंट करें।
  26. कंसोल पर कुछ पाठ प्रिंट करें.
  27. स्टैक के शीर्ष पर मौजूद तत्व को हटाएँ। फिर यह स्टैक में बचे हुए तत्वों को वापस कर देगा।
  28. उपरोक्त कार्यों को निष्पादित करने के लिए createStack फ़ंक्शन को कॉल करें।
  29. प्रोग्राम को सफलतापूर्वक पूरा होने पर मान लौटाना होगा।
  30. फ़ंक्शन main() के मुख्य भाग का अंत.

एम्प्लेस() और स्वैप()

ये अन्य इनबिल्ट स्टैक फ़ंक्शन हैं:

  • स्थान()– इसके बाद यह स्टैक के शीर्ष पर एक नया तत्व सम्मिलित करता है।
  • बदलना()– यह स्टैक की सामग्री को दूसरे स्टैक की सामग्री से बदल देता है।

उदाहरण 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();
	}
}

आउटपुट:

एम्प्लेस() और स्वैप()

कोड का स्क्रीनशॉट यहां दिया गया है:

एम्प्लेस() और स्वैप()

Code स्पष्टीकरण:

  1. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
  2. इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में स्टैक हेडर फ़ाइल शामिल करें।
  3. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में cstdlib हेडर फ़ाइल शामिल करें।
  4. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
  5. main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक इस फ़ंक्शन के मुख्य भाग में जोड़ा जाएगा।
  6. पूर्णांक मानों को संग्रहीत करने के लिए st1 नामक स्टैक घोषित करें।
  7. पूर्णांक मानों को संग्रहीत करने के लिए st2 नामक स्टैक घोषित करें।
  8. st12 नामक स्टैक में पूर्णांक 1 को सम्मिलित करने के लिए emplace() फ़ंक्शन का उपयोग करें।
  9. st19 नामक स्टैक में पूर्णांक 1 को सम्मिलित करने के लिए emplace() फ़ंक्शन का उपयोग करें।
  10. st20 नामक स्टैक में पूर्णांक 2 को सम्मिलित करने के लिए emplace() फ़ंक्शन का उपयोग करें।
  11. st23 नामक स्टैक में पूर्णांक 2 को सम्मिलित करने के लिए emplace() फ़ंक्शन का उपयोग करें।
  12. दो स्टैक, st1 और st2 की सामग्री को स्वैप करने के लिए स्वैप() फ़ंक्शन का उपयोग करें। स्टैक st1 की सामग्री को स्टैक st2 में ले जाना चाहिए। स्टैक st2 की सामग्री को स्टैक st1 में ले जाना चाहिए।
  13. कंसोल पर कुछ पाठ प्रिंट करें.
  14. यह जाँचने के लिए कि स्टैक st1 रिक्त नहीं है, while कथन और empty() फ़ंक्शन का उपयोग करें।
  15. कंसोल पर स्टैक st1 की सामग्री को प्रिंट करें। कंसोल पर प्रिंट करते समय " " स्टैक तत्वों के बीच स्थान जोड़ता है।
  16. शीर्ष तत्व को हटाने के लिए स्टैक st1 पर pop() फ़ंक्शन निष्पादित करें।
  17. while कथन के मुख्य भाग का अंत.
  18. कंसोल पर कुछ टेक्स्ट प्रिंट करें। endl एक है C++ अंतिम पंक्ति के लिए कीवर्ड। यह माउस कर्सर को अगली पंक्ति पर ले जाता है ताकि वहाँ से मुद्रण शुरू हो सके।
  19. यह जाँचने के लिए कि स्टैक st2 रिक्त नहीं है, while कथन और empty() फ़ंक्शन का उपयोग करें।
  20. कंसोल पर स्टैक st2 की सामग्री को प्रिंट करें। कंसोल पर प्रिंट करते समय " " स्टैक तत्वों के बीच स्थान जोड़ता है।
  21. शीर्ष तत्व को हटाने के लिए स्टैक st2 पर pop() फ़ंक्शन निष्पादित करें।
  22. while कथन के मुख्य भाग का अंत.
  23. 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();  
}

आउटपुट:

STL में स्टैक

कोड का स्क्रीनशॉट यहां दिया गया है:

STL में स्टैक

Code स्पष्टीकरण:

  1. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
  2. इसके फ़ंक्शन का उपयोग करने के लिए हमारे कोड में स्टैक हेडर फ़ाइल शामिल करें।
  3. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में cstdlib हेडर फ़ाइल शामिल करें।
  4. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
  5. main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
  6. पूर्णांक डेटा संग्रहीत करने के लिए स्टैक st घोषित करें।
  7. स्टैक में तत्व 12 जोड़ें.
  8. स्टैक में तत्व 19 जोड़ें.
  9. स्टैक में तत्व 20 जोड़ें.
  10. कंसोल पर स्टैक के शीर्ष पर स्थित तत्व को प्रिंट करें।
  11. कंसोल पर स्टैक का आकार प्रिंट करें.
  12. फ़ंक्शन main() के मुख्य भाग का अंत.

अक्सर पूछे जाने वाले प्रश्न

स्टैक में 'लास्ट इन फर्स्ट आउट' क्रम लागू होता है, इसलिए यह सबसे नए तत्व को पहले हटाता है। क्यू में 'फर्स्ट इन फर्स्ट आउट' क्रम लागू होता है, जिसमें सबसे पुराने तत्व को पहले हटाया जाता है। दोनों अलग-अलग प्रोसेसिंग आवश्यकताओं के लिए उपयुक्त हैं।

हाँ। std::stack अपने दूसरे टेम्पलेट तर्क के रूप में किसी भी अनुक्रम कंटेनर को स्वीकार करता है, जैसे कि std::stack >. डिफ़ॉल्ट डेक्यू अधिकांश मामलों के लिए उपयुक्त होता है, जबकि स्टैक के अनुमानित रूप से बढ़ने पर वेक्टर मेमोरी लोकैलिटी में सुधार कर सकता है।

पुश और पॉप दोनों प्रक्रियाएँ स्थिर O(1) समय में चलती हैं क्योंकि स्टैक केवल अपने शीर्ष तत्व को ही स्पर्श करता है। अंतर्निहित डेक मौजूदा तत्वों को स्थानांतरित किए बिना आइटम जोड़ता है, इसलिए स्टैक के आकार की परवाह किए बिना प्रदर्शन अनुमानित रहता है।

std::stack में कोई इटरेटर नहीं होता, इसलिए रेंज-आधारित लूप कंपाइल नहीं होगा। हर वैल्यू को पढ़ने के लिए, स्टैक की कॉपी बनाएं और कॉपी पर बार-बार top() और pop() फ़ंक्शन कॉल करें, या जब ट्रैवर्सल की आवश्यकता हो तो डेक्यू चुनें।

pop() फ़ंक्शन डिज़ाइन के अनुसार void लौटाता है, जिससे अपवाद सुरक्षा के लिए डेटा को हटाने और एक्सेस करने के बीच अंतर रहता है। एक ही चरण में पढ़ने और हटाने से डेटा खो सकता है यदि कॉपी करने में कोई त्रुटि हो, इसलिए आप पहले top() और फिर pop() को कॉल करते हैं।

नहीं। std::stack में कोई अंतर्निहित सिंक्रोनाइज़ेशन नहीं होता है, इसलिए कई थ्रेड्स से एक साथ पुश और पॉप कॉल करने पर डेटा रेस की स्थिति उत्पन्न हो जाती है। थ्रेड्स के बीच एक ही स्टैक का उपयोग करने से पहले म्यूटेक्स या किसी अन्य लॉकिंग तंत्र का उपयोग करके साझा एक्सेस को सुरक्षित करें।

जी हां। एआई कोडिंग सहायक किसी टिप्पणी या फ़ंक्शन के नाम को पढ़कर std::stack घोषणाएं, पुश और पॉप लूप और ट्रैवर्सल लॉजिक उत्पन्न करते हैं। Revजनरेट किए गए बाउंड्री चेक को देखना, जैसे कि pop() से पहले empty() टेस्ट, सुरक्षित प्रोग्रामों के लिए महत्वपूर्ण बना रहता है।

हां. गिटहब कोपिलॉट टाइप करते ही push, pop, top और empty() कॉल पूरी हो जाती हैं और कंटेनर के विकल्प सुझाए जाते हैं। यह 2026 का है। C++ कोड इंटेलिजेंस प्रतीक जागरूकता को बढ़ाता है, जिससे मल्टी-फाइल स्टैक सुझाव सुसंगत बने रहते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: