সবাই আশা করি ভাল আছেন । সবার মঙ্গল কামনা করে আজকের পাইথন এর পর্ব শুরু করছি । আজকে আমি পাইথনের কিছু হালকা পাতলা ডাটা স্ট্রাকচার নিয়ে আলোচনা করব । তো , আসুন শুরু করা যাক । আমাদের আজকের প্রথম বিষয় হল “Stacks” । এটা হল আপনাদের বই রাখার তাক এর মত । আপনি যে বই টা সর্ব প্রথম তাকে রাখেন , সেটা ন্তিু অনেক নীচে চলে যায় । আর সবথেকে শেষে যে বইটা রাখেন , সেই টা সবার উপরে থাকে । ফলে আপনি যদি একটা বই তুলতে চান , তাহলে সবথেকে শেষে রাখা বইটা আগে তুলতে হবে ।
তো, স্টাক হল একটা লিস্ট । যেখানে আপনি যে ভ্যালুটা সবার আগে রাখবেন সেটা সবার শেষে রিটার্ণ করবে । আর সবার শেষে যেটা রাখবেন , সেটা সবার আগে রিটার্ণ করবে । তো , আসুন আমরা স্টাক এর একটা অ্যালগরিদম দেখি ।
আসলে ব্যাবহার না জানলে কোন জিনিস শিখে মজা পাওয়া যায় না । তাই আগে এই গুলোর ব্যাহারটা একটু বলি । ধরুন , আপনি একটা ওয়েবসাইট এ ব্রাউজ করছেন । এবার আপনি অনেক পেজ ঘুরতে ঘুরতে গিয়ে দেখরেন যে , আপনার একটু কয়েক পেজ আগে আশা দরকার । তো , আপনি নিশ্চই ব্রাউজারের ব্যাক বাটনটা চাপ দিবেন । ব্যাস । এটা আপনাকে আপনার ব্রাউজ করা সর্বশেষ পেজটা ভিউ করবে । এভাবে চাপতে থাকলে তার আগে যেটা ভিজিট করেছেন সেটা , তারপর তার আগেরটা এভাবে চলবে , এবং সবথেকে শেষে আপনি আপনার প্রথম ভিজিটেড পেজটা খুজে পাবেন । এটা মূলত স্ট্রাক এর নীতিতে কাজ করে । এরকম আরও বহু উদাহরণ আছে যেগুলো নেটে সাচর্ দিলেই পেয়ে যাবেন ।
class Stack(list): def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def push(self, items): self.items.append(items) def pop(self): if not self.isEmpty(): return self.items.pop() else: raise Exception('Stack is empty!') def peek(self): return self.items[-1] def size(self): return len(self.items) def main(): stack = Stack() stack.push(1) stack.push(2) stack.push(3) stack.push(12) print(stack.size()) print(stack.peek()) print(stack.pop()) print(stack.peek()) if __name__ == '__main__': main() <
এই প্রোগ্রামটা রান করে দেখুন । এখানে কয়েকটি ফাংশন ডিফাইন করে কাজ করা হয়েছে । পুশ টা হল স্টাক এ ডাটা পুশ করার বা প্রবেশ করানোর জন্য । আর পপ টা হল স্টাক থেকে ডাটা তোলার জন্য । পিক এর কাজও একই । এবার আাপনি ইনপুট দিয়ে চেক করুন , আপনি যে ভ্যালুটা সবার শেষে পুশ করেছিলেন সেটা সবার আগে পপ করবে । এভাবে পর পর সিরিয়ালি পপ করতে থাকবে । আর সবার শেসে পপ করবে সবার প্রথমে যে ভ্যালু রেখেছিলেন ।
এবার আমরা আরেকটা ডাটা স্ট্রাকচার জনব যার নাম হল “QUEUES” । এটা হল স্টাক এর টিক উল্টো । এখানে আপনি প্রথমে যে ভ্যালু রাখবেন , পপ করার সময় সেই ভ্যালুই প্রথমে পপ করবে । আর শেষে যে ভ্যালু রাখবেন সেটা শেষে পপ করবে এবং এইভাবে সিরিয়ালি চলতে থাকবে । আসুন , এই অ্যলগরিদমটা দেখে নিই ।
class Queue(object): def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def enqueue(self, item): self.items.insert(0, item) def dequeue(self): return self.items.pop() def size(self): return len(self.items) def peek(self): if not self.isEmpty(): return self.items[-1] else: raise Exception('Queue is empty.') def size(self): return len(self.items) def main(): queue = Queue() queue.enqueue(1) queue.enqueue(2) queue.enqueue(3) queue.enqueue(5) queue.enqueue(6) print(queue.size()) print(queue.peek()) print(queue.dequeue()) print(queue.peek()) if __name__ == '__main__': main()
দেখুন , আগের টার সাথে এটার অনেক মিল আছে । তবে আগেরটাতে ভ্যালু একটা লিস্টে র্যানডমলি এপেন্ড করা হয়েছিল , আর এখানে ভ্যালু সবসময় ০ পজিশনে ইনসার্ট করা হয়েছে । তারপর এর সাইজ , পপ , প্রভৃতির জন্য একেকটা ফাংশন লেখা হয়েছে । এভাবে আপনারা বিভিন্ন ভ্যালু ইনপুট দিয়ে এটা ট্রাই করতে থাকুন । ফলে আইডিয়া ক্লিয়ার হবে ।
এবার আমরা যেটা দেখব সেটা হল “DEQUES” । এটা হল আগরে ২ টার একটা কম্বো । আগের ২ টার কাজ এই একটা দিয়েই করা যায় । অর্থাৎ , আপনি চাইলে প্রথমে বা শেষে ভ্যালু ইনসার্ট করতে পারবেন , আবার প্রথম বা শেষ থেকে ভ্যালু পপ ও করতে পারবেন । আসুন , এর কোডটা দেখি :
class Deque(object): def __init__(self): self.items = [] def isEmpty(self): return self.items == [] #স্বাভাবিক নিয়মে ভ্যালু লিস্টে পুশ করবে def addFront(self, item): self.items.append(item) #সবসময় ভ্যালু ০ পজিশনে পুশ করবে def addRear(self, item): self.items.insert(0, item) #স্বাভাবিক নিয়মে ভ্যালু পপ করবে def removeFront(self): return self.items.pop() #সবসময় ০ পজিশন থেকে ভ্যালু পপ করবে । def removeRear(self): return self.items.pop(0) def size(self): return len(self.items) def __repr__(self): return '{}'.format(self.items) def main(): dq = Deque() dq.addFront(1) dq.addFront(2) dq.addFront(3) dq.addRear(40) dq.addRear(50) print(dq.size()) print(dq) if __name__ == '__main__': main()
আশা করি বিষয়টা আপনারা বুঝতে পেরেছেন । না বুঝলে কমেন্ট করুন ।
পরের পর্বে আরও কিছূ ডাটা স্ট্রাকচার নিয়ে লিখব । আর পাইথনের যেকোন সমস্যার সমাধান পেতে আমাদের পাইখন বাংলা গ্রুপে জয়েন করুন ।
আমি অরিন্দম পাল। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 12 বছর 6 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 81 টি টিউন ও 316 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 20 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
মানসিক ভাবে দূর্বল । কোন কাজই কনফিডেন্টলি করতে পারি না , তবুও দেখি কাজ শেষ পর্যন্ত হয়ে যায় । নিজের সম্পর্কে এক এক সময় ধারণা এক এক রকম হয় । আমার কোন বেল ব্রেক নেই । সকালে যে কাজ করব ঠিক করি , বিকালে তা করতে পারি না । নিজের...