Stack: Peek Operation (টপ এলিমেন্ট দেখা)
Peek মানে স্ট্যাকের টপ (শেষে যোগ করা) এলিমেন্টটি রিমুভ না করে শুধু মান রিটার্ন করা। এটি স্ট্যাকের বর্তমান স্টেট চেক করার জন্য ব্যবহার হয়।
Peek মেথড ইমপ্লিমেন্টেশন
class Stack {
constructor(maxSize = 10) {
this.maxSize = maxSize;
this.container = [];
}
isEmpty() {
return this.container.length === 0;
}
// Peek Implementation
peek() {
if (this.isEmpty()) {
console.log("Stack Underflow! স্ট্যাক খালি।");
return undefined;
}
// শেষ এলিমেন্ট (টপ) রিটার্ন
return this.container[this.container.length - 1];
}
// Helper methods
push(element) { /* ... */ }
pop() { /* ... */ }
display() { console.log(this.container); }
}
টেস্টিং উদাহরণ
const s = new Stack(3);
// খালি স্ট্যাকে peek
s.peek(); // আউটপুট: "Stack Underflow!..." + undefined
s.push(10);
s.push(20);
console.log("Peek:", s.peek()); // 20 (টপ এলিমেন্ট)
s.display(); // [ 10, 20 ] — স্ট্যাক অপরিবর্তিত
console.log("Peek again:", s.peek()); // 20 (আবারই একই)
Peek vs Pop
| অপারেশন | কাজ | রিটার্ন | স্ট্যাক সাইজ |
|---|---|---|---|
| peek() | টপ এলিমেন্ট দেখায় | এলিমেন্ট মান | অপরিবর্তিত |
| pop() | টপ এলিমেন্ট সরিয়ে ফেলে | সরানো এলিমেন্ট | ১ কমে যায় |
ব্যবহার ক্ষেত্র (Use Cases)
- এক্সপ্রেশন ইভ্যালুয়েশন: অপারেটর প্রেসিডেন্স চেক (পার্সিং-এ)।
- ব্যাকট্র্যাকিং: পরবর্তী মুভ চেক করা (কমিট ছাড়া)।
- UI স্টেট: "Current tool/color" দেখানো।
- ডিবাগিং: স্ট্যাক কন্টেন্ট ইনস্পেক্ট।
- কন্ডিশনাল পপ: শর্ত পূরণ হলে পপ, না হলে শুধু পিক।
Edge Case Handling
peek() {
if (this.isEmpty()) {
// Option 1: Throw error (Recommended for production)
throw new Error("Stack Underflow: Cannot peek empty stack");
// Option 2: Return undefined (Simple)
// return undefined;
// Option 3: Return null
// return null;
}
return this.container[this.container.length - 1];
}
TypeScript টিপ: রিটার্ন টাইপ T | undefined বা T (with assertion) ব্যবহার করুন।