Stack Class: সম্পূর্ণ ইমপ্লিমেন্টেশন
স্ট্যাক (Stack) হলো LIFO (Last-In-First-Out) ডেটা স্ট্রাকচার। নিচে সম্পূর্ণ ফিচারসহ Stack ক্লাস দেওয়া হলো।
সম্পূর্ণ Stack Class কোড
class Stack {
constructor(maxSize = 10) {
// ডিফল্ট ম্যাক্স সাইজ ১০
this.maxSize = maxSize;
// ইন্টারন্যাল স্টোরেজ
this.container = [];
}
// কন্টেন্টস ডিসপ্লে
display() {
console.log(this.container);
}
// স্ট্যাক খালি কিনা
isEmpty() {
return this.container.length === 0;
}
// স্ট্যাক ফুল কিনা
isFull() {
return this.container.length >= this.maxSize;
}
// এলিমেন্ট যোগ করুন (টপে)
push(element) {
if (this.isFull()) {
console.log("Stack Overflow! স্ট্যাক ফুল।");
return false;
}
this.container.push(element);
return true;
}
// এলিমেন্ট সরান (টপ থেকে)
pop() {
if (this.isEmpty()) {
console.log("Stack Underflow! স্ট্যাক খালি।");
return undefined;
}
return this.container.pop();
}
// টপ এলিমেন্ট দেখুন (রিমুভ ছাড়া)
peek() {
if (this.isEmpty()) {
console.log("Stack Underflow! স্ট্যাক খালি।");
return undefined;
}
return this.container[this.container.length - 1];
}
// স্ট্যাক খালি করুন
clear() {
this.container = [];
}
// বর্তমান সাইজ
size() {
return this.container.length;
}
}
ব্যবহারের উদাহরণ
const stack = new Stack(3);
stack.push(10);
stack.push(20);
stack.push(30);
stack.display(); // [ 10, 20, 30 ]
console.log("Peek:", stack.peek()); // 30
console.log("Pop:", stack.pop()); // 30
stack.display(); // [ 10, 20 ]
console.log("Size:", stack.size()); // 2
stack.clear();
stack.display(); // []
console.log("Is Empty:", stack.isEmpty()); // true
স্ট্যাক অপারেশন সারাংশ
| মেথড | কাজ | রিটার্ন | কমপ্লেক্সিটি |
|---|---|---|---|
push() |
টপে এলিমেন্ট যোগ | Boolean (সাফল্য) | O(1) |
pop() |
টপ এলিমেন্ট সরিয়ে রিটার্ন | এলিমেন্ট / undefined | O(1) |
peek() |
টপ এলিমেন্ট দেখান (রিমুভ নেই) | এলিমেন্ট / undefined | O(1) |
isEmpty() |
খালি চেক | Boolean | O(1) |
isFull() |
ফুল চেক | Boolean | O(1) |
clear() |
সকল এলিমেন্ট মুছে ফেলা | undefined | O(1) |
size() |
বর্তমান সাইজ | Number | O(1) |
স্ট্যাকের বাস্তব ব্যবহার
- ফাংশন কল স্ট্যাক: রিকার্সন, এক্সিকিউশন কনটেক্সট।
- অনডু/রিডো: এডিটর, ব্রাউজার ইতিহাস।
- এক্সপ্রেশন ইভ্যালুয়েশন: পোস্টফিক্স/ইনফিক্স পার্সিং।
- ব্যাকট্র্যাকিং অ্যালগরিদম: মেজ সল্ভিং, N-Queens।
- সিনট্যাক্স পার্সিং: ব্র্যাকেট ম্যাচিং, HTML ট্যাগ ভ্যালিডেশন।
জাভাস্ক্রিপ্ট নেটিভ অ্যারে হিসেবে স্ট্যাক
const stack = [];
stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.push(3); // [1, 2, 3]
console.log(stack[stack.length - 1]); // Peek: 3
console.log(stack.pop()); // Pop: 3
console.log(stack); // [1, 2]
নেটিভ অ্যারে push/pop O(1) দিয়ে স্ট্যাক আচরণ করে। ক্লাস ব্যবহার করলে ক্যাপাসিটি লিমিট, এরর হ্যান্ডলিং, সেমান্টিক্স পাওয়া যায়।