কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে Stack-এ Peek অপারেশন


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) ব্যবহার করুন।

  1. জাভাস্ক্রিপ্টে কিউ (Queue) থেকে ডিকিউ (Dequeue) অপারেশন

  2. জাভাস্ক্রিপ্টে PriorityQueue-এ Dequeue (Remove) অপারেশন

  3. জাভাস্ক্রিপ্টে লিংকড লিস্ট থেকে এলিমেন্ট রিমুভ করা

  4. জাভাস্ক্রিপ্টে স্ট্যাক (Stack) বাস্তবায়ন