মজার ও সহজ প্রোগ্রামিং, পাইথন প্রোগ্রামিং [পর্ব-২৯] :: পাইথনে কিছু হালকা পাতলা ডাটা স্ট্রাকচার

0
693

সবার মঙ্গল কামনা করে আজকের পাইথন এর পর্ব শুরু করছি । আজকে আমি পাইথনের কিছু হালকা পাতলা ডাটা স্ট্রাকচার নিয়ে আলোচনা করব । তো , আসুন শুরু করা যাক । আমাদের আজকের প্রথম বিষয় হল “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()

আশা করি বিষয়টা আপনারা বুঝতে পেরেছেন । না বুঝলে কমেন্ট করুন ।

পরের পর্বে আরও কিছূ ডাটা স্ট্রাকচার নিয়ে লিখব ।  আর পাইথনের যেকোন সমস্যার সমাধান পেতে আমাদের পাইখন বাংলাগ্রুপে জয়েন করুন ।

Please comment Here (ভাল লাগলে কমেন্ট করুন)