আমার নীচের হোমওয়ার্কের প্রশ্ন রয়েছে:
দুটি সারি ব্যবহার করে স্ট্যাকের পদ্ধতিগুলি পুশ (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)
; তবে একক সারির সংস্করণটি অত্যন্ত সহজতর হবে। এটি কেবল লুপের জন্য একক প্রয়োজন require
আমি কিছু অনুপস্থিত করছি? এখানে যে কোনও অন্তর্দৃষ্টি প্রশংসা করা হবে।