मेरे पास निम्नलिखित होमवर्क प्रश्न हैं:
दो कतारों का उपयोग करके स्टैक विधियों को धक्का (x) और पॉप () लागू करें।
यह मुझे अजीब लगता है क्योंकि:
- एक ढेर है एक (LIFO) कतार
- मैं यह नहीं देखता कि इसे लागू करने के लिए आपको दो कतारों की आवश्यकता क्यों होगी
मैंने आसपास खोज की:
और एक दो समाधान मिला। यह वही है जो मैंने समाप्त किया:
public class Stack<T> {
LinkedList<T> q1 = new LinkedList<T>();
LinkedList<T> q2 = new LinkedList<T>();
public void push(T t) {
q1.addFirst(t);
}
public T pop() {
if (q1.isEmpty()) {
throw new RuntimeException(
"Can't pop from an empty stack!");
}
while(q1.size() > 1) {
q2.addFirst( q1.removeLast() );
}
T popped = q1.pop();
LinkedList<T> tempQ = q1;
q1 = q2;
q2 = tempQ;
return popped;
}
}
लेकिन मुझे समझ में नहीं आ रहा है कि एक कतार का उपयोग करने से क्या फायदा है; दो कतार संस्करण व्यर्थ जटिल लगता है।
मान लें कि हम 2 के अधिक कुशल होने के लिए पुश का चयन करते हैं (जैसा कि मैंने ऊपर किया था), push
वही रहेगा, और pop
बस अंतिम तत्व के लिए पुनरावृति की आवश्यकता होगी, और इसे वापस करना होगा। दोनों मामलों में, push
होगा O(1)
, और pop
होगा O(n)
; लेकिन एकल कतार संस्करण काफी सरल होगा। यह केवल लूप के लिए एकल की आवश्यकता होनी चाहिए।
क्या मैं कुछ भूल रहा हूँ? यहाँ किसी भी जानकारी की सराहना की जाएगी।