c++ - मैं उलझन में हूँ कि मैं कैसे एक लिंक की सूची का उपयोग कर एक स्टैक पर+ऑपरेटर ओवरलोडिंग के बारे में जाना होगा



linked-list stack (1)

क्या यह इसके बारे में जाने का सही तरीका है?

आप s के शीर्ष से वस्तुओं को धकेल रहे हैं, और इसका अर्थ है कि एस के आइटम t पर दिखाई देंगे, लेकिन रिवर्स ऑर्डर में वे जो s थे यदि आप चाहते हैं कि यह है, तो आपका कार्यान्वयन ठीक है, लेकिन ऐसी स्थिति के बारे में सोचना मुश्किल है जहां यह व्यवहार उपयोगी या अपेक्षित होगा। ऊपर से नीचे तक की ओर खींचने से समस्या ठीक हो जाएगी, लेकिन यह एक विकल्प नहीं है यदि आपको सख्ती से स्टैक ऑपरेशन को छोडना पड़े। एक और विकल्प जो केवल स्टैक परिचालन का उपयोग करता है, पहले मध्यवर्ती स्टैक पर एक बार उन्हें एक करके धकेलने के लिए पहले रिवर्स s है, और फिर t पर धकेलने से फिर उल्टा होता है।

सबसे पहले, मुझे पता है कि सामान्य रूप से एक लिंक्ड सूची का उपयोग करके यह कैसे करना है, जिसे मैं नीचे पेस्ट कर दूंगा:

    List operator+(const List& l) const
    {
        // copy the first list
        List t = *this;
        Node *n = l.head;

        // iterate through the second list and copy each element to the new list
        while (n != NULL && !t.IsFull())
        {
            t.InsertAfter(n->data);
            n = n->link;
        }

        return t;
    }

अब मेरे स्टैक में मेरे पास ऐसा कुछ है जो इस तरह दिखता है:

Stack operator+(const Stack& s) const
    {
        // copy the first list
        Stack t = *this;
        Node *n = s.top;

        // iterate through the second list and copy each element to the new list
        while (n != NULL && !t.IsFull())
        {
            t.Push(n->data);
            n = n->link;
        }

        return t;
    }

मेरा प्रश्न मुझे लगता है, क्या यह इसके बारे में जाने का सही तरीका होगा? और अगर मैं इस प्रश्न का शीर्षक बहुत स्पष्ट नहीं है, तो पहले से माफी मांगना चाहूंगा, मुझे यह भी पता चलाना चाहिए कि यह कैसे शब्द है

संपादित करें:

मैं कालेब के जवाब के संदर्भ में इस तरह दिखने वाली एक पाश के साथ आया हूं:

        Stack t = *this;
        Stack u = *this;
        Node *n = s.top;
while (n != NULL && !t.IsFull())
        {
            t.Push(n->data);
            u.Push(n->data);
            n = n->link;
        }

        return t;
    }




stack