সবাই আশা করি ভাল আছেন । সবার মঙ্গল কামনা করে আজকের পাইথন এর পর্ব শুরু করছি । আজকে আমি পাইথনের কিছু হালকা পাতলা ডাটা স্ট্রাকচার নিয়ে আলোচনা করব । তো , আসুন শুরু করা যাক । আমাদের আজকের প্রথম বিষয় হল “Stacks” । এটা হল আপনাদের বই রাখার তাক এর মত । আপনি যে বই টা সর্ব প্রথম তাকে রাখেন , সেটা ন্তিু অনেক নীচে চলে যায় । আর সবথেকে শেষে যে বইটা রাখেন , সেই টা সবার উপরে থাকে । ফলে আপনি যদি একটা বই তুলতে চান , তাহলে সবথেকে শেষে রাখা বইটা আগে তুলতে হবে ।
তো, স্টাক হল একটা লিস্ট । যেখানে আপনি যে ভ্যালুটা সবার আগে রাখবেন সেটা সবার শেষে রিটার্ণ করবে । আর সবার শেষে যেটা রাখবেন , সেটা সবার আগে রিটার্ণ করবে । তো , আসুন আমরা স্টাক এর একটা অ্যালগরিদম দেখি ।
আসলে ব্যাবহার না জানলে কোন জিনিস শিখে মজা পাওয়া যায় না । তাই আগে এই গুলোর ব্যাহারটা একটু বলি । ধরুন , আপনি একটা ওয়েবসাইট এ ব্রাউজ করছেন । এবার আপনি অনেক পেজ ঘুরতে ঘুরতে গিয়ে দেখরেন যে , আপনার একটু কয়েক পেজ আগে আশা দরকার । তো , আপনি নিশ্চই ব্রাউজারের ব্যাক বাটনটা চাপ দিবেন । ব্যাস । এটা আপনাকে আপনার ব্রাউজ করা সর্বশেষ পেজটা ভিউ করবে । এভাবে চাপতে থাকলে তার আগে যেটা ভিজিট করেছেন সেটা , তারপর তার আগেরটা এভাবে চলবে , এবং সবথেকে শেষে আপনি আপনার প্রথম ভিজিটেড পেজটা খুজে পাবেন । এটা মূলত স্ট্রাক এর নীতিতে কাজ করে । এরকম আরও বহু উদাহরণ আছে যেগুলো নেটে সাচর্ দিলেই পেয়ে যাবেন ।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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” । এটা হল স্টাক এর টিক উল্টো । এখানে আপনি প্রথমে যে ভ্যালু রাখবেন , পপ করার সময় সেই ভ্যালুই প্রথমে পপ করবে । আর শেষে যে ভ্যালু রাখবেন সেটা শেষে পপ করবে এবং এইভাবে সিরিয়ালি চলতে থাকবে । আসুন , এই অ্যলগরিদমটা দেখে নিই ।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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” । এটা হল আগরে ২ টার একটা কম্বো । আগের ২ টার কাজ এই একটা দিয়েই করা যায় । অর্থাৎ , আপনি চাইলে প্রথমে বা শেষে ভ্যালু ইনসার্ট করতে পারবেন , আবার প্রথম বা শেষ থেকে ভ্যালু পপ ও করতে পারবেন । আসুন , এর কোডটা দেখি :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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 বছর 10 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 81 টি টিউন ও 316 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 20 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
মানসিক ভাবে দূর্বল । কোন কাজই কনফিডেন্টলি করতে পারি না , তবুও দেখি কাজ শেষ পর্যন্ত হয়ে যায় । নিজের সম্পর্কে এক এক সময় ধারণা এক এক রকম হয় । আমার কোন বেল ব্রেক নেই । সকালে যে কাজ করব ঠিক করি , বিকালে তা করতে পারি না । নিজের...