পাইথনে লিঙ্ক করা তালিকা

পাইথনে লিঙ্ক করা তালিকা

উত্স নোড: 3093495

ভূমিকা

একটি লিঙ্ক করা তালিকা হল একটি ডেটা স্ট্রাকচার যাতে নোডের একটি ক্রম থাকে, প্রতিটিতে একটি মান থাকে এবং অনুক্রমের পরবর্তী নোডের একটি রেফারেন্স থাকে। অ্যারেগুলির বিপরীতে, লিঙ্কযুক্ত তালিকাগুলির সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না, যা নির্দিষ্ট ক্রিয়াকলাপের জন্য তাদের আরও নমনীয় এবং দক্ষ করে তোলে। এই নিবন্ধে, আমরা লিঙ্কড তালিকার সুবিধা এবং অসুবিধাগুলি এবং পাইথনে কীভাবে প্রয়োগ করতে পারি তা অন্বেষণ করব।

লিঙ্কযুক্ত তালিকা

সুচিপত্র

লিঙ্ক করা তালিকার সুবিধা এবং অসুবিধা

লিঙ্ক করা তালিকা অন্যান্য ডেটা স্ট্রাকচারের তুলনায় বেশ কিছু সুবিধা প্রদান করে। প্রথমত, তারা উপাদানগুলির দক্ষ সন্নিবেশ এবং মুছে ফেলার অনুমতি দেয়, কারণ তাদের শুধুমাত্র প্রতিবেশী নোডগুলির রেফারেন্স আপডেট করার প্রয়োজন হয়। এটি লিঙ্কডলিস্টগুলিকে এমন পরিস্থিতিগুলির জন্য আদর্শ করে তোলে যেখানে ঘন ঘন পরিবর্তন প্রত্যাশিত হয়৷ অতিরিক্তভাবে, লিঙ্কডলিস্টগুলি গতিশীলভাবে আকারে বৃদ্ধি বা সঙ্কুচিত হতে পারে, অ্যারেগুলির বিপরীতে, যার একটি নির্দিষ্ট আকার রয়েছে।

যাইহোক, লিঙ্কড তালিকার কিছু অসুবিধাও আছে। অ্যারেগুলির বিপরীতে, লিঙ্কযুক্ত তালিকাগুলি উপাদানগুলিতে র্যান্ডম অ্যাক্সেস সমর্থন করে না, যার অর্থ একটি নির্দিষ্ট সূচকে একটি উপাদান অ্যাক্সেস করার জন্য শুরু থেকে তালিকাটি অতিক্রম করা প্রয়োজন। এর ফলে কিছু ক্রিয়াকলাপের জন্য ধীর কর্মক্ষমতা হতে পারে। তদুপরি, লিঙ্ক করা তালিকাগুলির পরবর্তী নোডগুলির রেফারেন্সগুলি সংরক্ষণ করার জন্য অতিরিক্ত মেমরির প্রয়োজন, যা ছোট ডেটাসেটের জন্য অদক্ষ হতে পারে।

পাইথনে লিঙ্কযুক্ত তালিকা বাস্তবায়ন করা

পাইথন লিঙ্ক করা তালিকা বাস্তবায়নের জন্য একটি নমনীয় এবং স্বজ্ঞাত উপায় প্রদান করে। তিনটি প্রধান প্রকারের লিঙ্কযুক্ত তালিকা রয়েছে: একক লিঙ্কযুক্ত তালিকা, দ্বিগুণ লিঙ্কযুক্ত তালিকা এবং সার্কুলার লিঙ্কড তালিকা। আসুন বিস্তারিতভাবে তাদের প্রতিটি অন্বেষণ করা যাক.

লিঙ্ক করা তালিকার ধরন

এককভাবে লিঙ্ক করা তালিকা

একটি একক লিঙ্কযুক্ত তালিকায় নোড থাকে যেখানে প্রতিটি নোডে একটি মান থাকে এবং অনুক্রমের পরবর্তী নোডের একটি রেফারেন্স থাকে। পাইথনে আপনি কীভাবে এককভাবে লিঙ্কযুক্ত তালিকা তৈরি করতে পারেন তা এখানে:

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

class Linked List:
    def __init__(self):
        self.head = None

এককভাবে লিঙ্কযুক্ত তালিকা তৈরি করা

একটি একক লিঙ্কযুক্ত তালিকা তৈরি করতে, আমাদের একটি নোড ক্লাস সংজ্ঞায়িত করতে হবে যা তালিকার প্রতিটি নোডকে প্রতিনিধিত্ব করে। প্রতিটি নোডে একটি মান এবং পরবর্তী নোডের একটি রেফারেন্স রয়েছে। লিংকড লিস্ট ক্লাস নোডের ধারক হিসেবে কাজ করে, হেড অ্যাট্রিবিউট তালিকার প্রথম নোডের দিকে নির্দেশ করে।

এককভাবে লিঙ্কযুক্ত তালিকায় নোড সন্নিবেশ করা হচ্ছে

একটি একক লিঙ্কযুক্ত তালিকায় নোডগুলি সন্নিবেশ করাতে প্রতিবেশী নোডগুলির রেফারেন্স আপডেট করা জড়িত। তালিকার শুরুতে একটি নোড সন্নিবেশ করার একটি উদাহরণ এখানে:

def insert_at_beginning(self, value):
    new_node = Node(value)
    new_node.next = self.head
    self.head = new_node

এককভাবে লিঙ্ক করা তালিকা থেকে নোড মুছে ফেলা হচ্ছে

একটি একক লিঙ্কযুক্ত তালিকা থেকে নোডগুলি মুছে ফেলার জন্য প্রতিবেশী নোডগুলির রেফারেন্স আপডেট করা প্রয়োজন৷ এখানে একটি নির্দিষ্ট মান সহ একটি নোড মুছে ফেলার একটি উদাহরণ:

def delete_node(self, value):
    current = self.head
    if current.value == value:
        self.head = current.next
    else:
        while current.next:
            if current.next.value == value:
                current.next = current.next.next
                break
            current = current.next

এককভাবে লিঙ্ক করা তালিকায় অনুসন্ধান করা হচ্ছে

একটি একক লিঙ্কযুক্ত তালিকায় একটি নির্দিষ্ট মান অনুসন্ধান করার জন্য মানটি পাওয়া না যাওয়া বা তালিকার শেষ না হওয়া পর্যন্ত তালিকাটি অতিক্রম করা জড়িত। এখানে একটি মান অনুসন্ধানের একটি উদাহরণ:

def search(self, value):
    current = self.head
    while current:
        if current.value == value:
            return True
        current = current.next
    return False

একটি একক লিঙ্ক তালিকা উল্টানো

একটি একক লিঙ্কযুক্ত তালিকা উল্টানোর জন্য পূর্ববর্তী নোডের দিকে নির্দেশ করার জন্য প্রতিটি নোডের রেফারেন্স আপডেট করতে হবে। এখানে একটি একক লিঙ্কযুক্ত তালিকা বিপরীত করার একটি উদাহরণ রয়েছে:

def reverse(self):
    previous = None
    current = self.head
    while current:
        next_node = current.next
        current.next = previous
        previous = current
        current = next_node
    self.head = previous

দ্বিগুণ লিঙ্কযুক্ত তালিকা

একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা একটি একক লিঙ্কযুক্ত তালিকার অনুরূপ, তবে প্রতিটি নোডে পরবর্তী নোড এবং অনুক্রমের পূর্ববর্তী নোড উভয়েরই একটি রেফারেন্স রয়েছে। এটি উভয় দিকে দক্ষ ট্রাভার্সালের জন্য অনুমতি দেয়। পাইথনে আপনি কীভাবে একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা তৈরি করতে পারেন তা এখানে:

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None
        self.previous = None

class DoublyLinked List:
    def __init__(self):
        self.head = None

একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা তৈরি করা

একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা তৈরি করতে, আমরা একটি নোড ক্লাস সংজ্ঞায়িত করি যাতে একটি মান, পরবর্তী নোডের একটি রেফারেন্স এবং পূর্ববর্তী নোডের একটি রেফারেন্স থাকে। DoublyLinked List ক্লাসটি নোডগুলির জন্য ধারক হিসাবে কাজ করে, হেড অ্যাট্রিবিউটটি তালিকার প্রথম নোডের দিকে নির্দেশ করে।

একটি দ্বিগুণ লিঙ্কযুক্ত তালিকায় নোড সন্নিবেশ করা হচ্ছে

দ্বিগুণ লিঙ্কযুক্ত তালিকায় নোডগুলি সন্নিবেশ করাতে প্রতিবেশী নোডগুলির রেফারেন্স আপডেট করা জড়িত। তালিকার শুরুতে একটি নোড সন্নিবেশ করার একটি উদাহরণ এখানে:

def insert_at_beginning(self, value):
    new_node = Node(value)
    if self.head:
        self.head.previous = new_node
    new_node.next = self.head
    self.head = new_node

দ্বিগুণ লিঙ্কযুক্ত তালিকা থেকে নোড মুছে ফেলা হচ্ছে

দ্বিগুণ লিঙ্কযুক্ত তালিকা থেকে নোডগুলি মুছে ফেলার জন্য প্রতিবেশী নোডগুলির রেফারেন্স আপডেট করা প্রয়োজন৷ এখানে একটি নির্দিষ্ট মান সহ একটি নোড মুছে ফেলার একটি উদাহরণ:

def delete_node(self, value):
    current = self.head
    if current.value == value:
        self.head = current.next
        if self.head:
            self.head.previous = None
    else:
        while current.next:
            if current.next.value == value:
                current.next = current.next.next
                if current.next:
                    current.next.previous = current
                break
            current = current.next

দ্বিগুণ লিঙ্কযুক্ত তালিকায় অনুসন্ধান করা হচ্ছে

দ্বিগুণ লিঙ্কযুক্ত তালিকায় একটি নির্দিষ্ট মানের জন্য অনুসন্ধানের সাথে মানটি পাওয়া না যাওয়া পর্যন্ত বা তালিকার শেষ পর্যন্ত না পৌঁছানো পর্যন্ত তালিকাটিকে উভয় দিক দিয়ে অতিক্রম করা জড়িত৷ এখানে একটি মান অনুসন্ধানের একটি উদাহরণ:

def search(self, value):
    current = self.head
    while current:
        if current.value == value:
            return True
        current = current.next
    return False

একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা উল্টানো

একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা উল্টানোর জন্য পরবর্তী এবং পূর্ববর্তী পয়েন্টারগুলি অদলবদল করতে প্রতিটি নোডের রেফারেন্স আপডেট করতে হবে। এখানে একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা বিপরীত করার একটি উদাহরণ:

def reverse(self):
    current = self.head
    while current:
        next_node = current.next
        current.next = current.previous
        current.previous = next_node
        if not next_node:
            self.head = current
        current = next_node

সার্কুলার লিঙ্ক তালিকা

একটি বৃত্তাকার লিঙ্কযুক্ত তালিকা হল একটি একক লিঙ্কযুক্ত তালিকার একটি বৈচিত্র যেখানে শেষ নোডটি প্রথম নোডের দিকে নির্দেশ করে, একটি বৃত্তাকার কাঠামো তৈরি করে। এটি তালিকার যেকোনো নোড থেকে দক্ষ ট্রাভার্সালের জন্য অনুমতি দেয়। এখানে আপনি কিভাবে পাইথনে একটি সার্কুলার লিঙ্কড তালিকা তৈরি করতে পারেন:

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

class CircularLinked List:
    def __init__(self):
        self.head = None

একটি সার্কুলার লিঙ্কড তালিকা তৈরি করা

একটি সার্কুলার লিঙ্কড তালিকা তৈরি করতে, আমরা একটি নোড ক্লাস সংজ্ঞায়িত করি যাতে একটি মান এবং পরবর্তী নোডের একটি রেফারেন্স থাকে। CircularLinked List ক্লাসটি নোডগুলির জন্য ধারক হিসাবে কাজ করে, হেড অ্যাট্রিবিউটটি তালিকার প্রথম নোডের দিকে নির্দেশ করে। অতিরিক্তভাবে, শেষ নোডের পরবর্তী রেফারেন্সটি মাথায় সেট করা হয়, একটি বৃত্তাকার কাঠামো তৈরি করে।

একটি সার্কুলার লিঙ্ক করা তালিকায় নোড সন্নিবেশ করান

একটি সার্কুলার লিঙ্কড তালিকায় নোড সন্নিবেশ করাতে প্রতিবেশী নোডের রেফারেন্স আপডেট করা জড়িত। তালিকার শুরুতে একটি নোড সন্নিবেশ করার একটি উদাহরণ এখানে:

def insert_at_beginning(self, value):
    new_node = Node(value)
    if not self.head:
        self.head = new_node
        new_node.next = self.head
    else:
        current = self.head
        while current.next != self.head:
            current = current.next
        current.next = new_node
        new_node.next = self.head
        self.head = new_node

একটি সার্কুলার লিঙ্ক করা তালিকা থেকে নোড মুছে ফেলা হচ্ছে

একটি সার্কুলার লিঙ্কড তালিকা থেকে নোড মুছে ফেলার জন্য প্রতিবেশী নোডের রেফারেন্স আপডেট করতে হবে। এখানে একটি নির্দিষ্ট মান সহ একটি নোড মুছে ফেলার একটি উদাহরণ:

def delete_node(self, value):
    if not self.head:
        return
    current = self.head
    if current.value == value:
        while current.next != self.head:
            current = current.next
        if current == self.head:
            self.head = None
        else:
            current.next = self.head.next
            self.head = self.head.next
    else:
        previous = None
        while current.next != self.head:
            previous = current
            current = current.next
            if current.value == value:
                previous.next = current.next
                break

সার্কুলার লিঙ্ক করা তালিকায় অনুসন্ধান করা হচ্ছে

একটি সার্কুলার লিঙ্কড তালিকায় একটি নির্দিষ্ট মান অনুসন্ধান করার জন্য তালিকাটি অতিক্রম করা জড়িত যতক্ষণ না মানটি পাওয়া যায় বা সম্পূর্ণ তালিকাটি অতিক্রম করা হয়। এখানে একটি মান অনুসন্ধানের একটি উদাহরণ:

def search(self, value):
    if not self.head:
        return False
    current = self.head
    while True:
        if current.value == value:
            return True
        current = current.next
        if current == self.head:
            break
    return False

একটি সার্কুলার লিঙ্ক তালিকা উল্টানো

একটি সার্কুলার লিঙ্কড লিস্ট রিভার্স করার জন্য সার্কুলার স্ট্রাকচার রিভার্স করতে প্রতিটি নোডের রেফারেন্স আপডেট করতে হবে। এখানে একটি সার্কুলার লিঙ্কড তালিকা বিপরীত করার একটি উদাহরণ:

def reverse(self):
    if not self.head:
        return
    previous = None
    current = self.head
    next_node = current.next
    while True:
        current.next = previous
        previous = current
        current = next_node
        next_node = next_node.next
        if current == self.head:
            break
    self.head = previous

লিঙ্ক করা তালিকায় সাধারণ অপারেশন

লিঙ্কযুক্ত তালিকাগুলি বিভিন্ন সাধারণ ক্রিয়াকলাপকে সমর্থন করে যা উপাদানগুলিতে সঞ্চালিত হতে পারে। আসুন এই অপারেশনগুলির কিছু অন্বেষণ করি:

লিঙ্ক করা তালিকায় উপাদান অ্যাক্সেস করা

লিঙ্কড লিস্টে উপাদানগুলি অ্যাক্সেস করতে, আমরা হেড নোড থেকে শুরু করে তালিকাটি অতিক্রম করতে পারি এবং পরবর্তী নোডে যেতে পারি যতক্ষণ না আমরা পছন্দসই অবস্থানে পৌঁছাতে পারি। এখানে একটি নির্দিষ্ট সূচকে একটি উপাদান অ্যাক্সেস করার একটি উদাহরণ:

def get_element(self, index):
    current = self.head
    count = 0
    while current:
        if count == index:
            return current.value
        count += 1
        current = current.next
    raise IndexError("Index out of range")

একটি লিঙ্ক তালিকায় উপাদান পরিবর্তন

একটি লিঙ্কযুক্ত তালিকার উপাদানগুলি পরিবর্তন করার জন্য পছন্দসই উপাদানটি খুঁজে পেতে তালিকাটি অতিক্রম করা এবং এর মান আপডেট করা জড়িত। এখানে একটি নির্দিষ্ট সূচকে একটি উপাদান পরিবর্তন করার একটি উদাহরণ:

def modify_element(self, index, new_value):
    current = self.head
    count = 0
    while current:
        if count == index:
            current.value = new_value
            return
        count += 1
        current = current.next
    raise IndexError("Index out of range")

লিঙ্ক করা তালিকার দৈর্ঘ্য খোঁজা

একটি লিঙ্কযুক্ত তালিকার দৈর্ঘ্য খুঁজে পেতে, আমরা তালিকাটি অতিক্রম করতে পারি এবং নোডের সংখ্যা গণনা করতে পারি। এখানে একটি লিঙ্ক করা তালিকার দৈর্ঘ্য খুঁজে বের করার একটি উদাহরণ:

def get_length(self):
    current = self.head
    count = 0
    while current:
        count += 1
        current = current.next
    return count

একটি লিঙ্ক করা তালিকা খালি কিনা তা পরীক্ষা করা হচ্ছে

একটি লিঙ্কযুক্ত তালিকা খালি কিনা তা পরীক্ষা করতে, আমরা কেবল হেড নোডটি নেই কিনা তা পরীক্ষা করতে পারি। এখানে একটি লিঙ্ক করা তালিকা খালি কিনা তা পরীক্ষা করার একটি উদাহরণ রয়েছে:

def is_empty(self):
    return self.head is None

সংযুক্ত তালিকা সংযুক্ত করা

দুটি লিঙ্কযুক্ত তালিকাকে একত্রিত করতে, আমরা শেষ নোডটি খুঁজে পেতে প্রথম তালিকাটি অতিক্রম করতে পারি এবং দ্বিতীয় তালিকার শীর্ষে এর পরবর্তী রেফারেন্স আপডেট করতে পারি। এখানে দুটি লিঙ্কযুক্ত তালিকা সংযুক্ত করার একটি উদাহরণ:

def concatenate(self, other_list):
    if not self.head:
        self.head = other_list.head
    else:
        current = self.head
        while current.next:
            current = current.next
        current.next = other_list.head

লিঙ্ক করা তালিকা বনাম অ্যারে

লিঙ্ক করা তালিকা এবং অ্যারে উভয়ই সাধারণত ব্যবহৃত ডেটা স্ট্রাকচার, তবে তাদের আলাদা বৈশিষ্ট্য রয়েছে যা তাদের বিভিন্ন পরিস্থিতিতে উপযুক্ত করে তোলে। আসুন মেমরি দক্ষতা, সন্নিবেশ এবং মুছে ফেলার দক্ষতা এবং এলোমেলো অ্যাক্সেস দক্ষতার পরিপ্রেক্ষিতে লিঙ্কড তালিকা এবং অ্যারেগুলির তুলনা করি।

মেমরি দক্ষতা

লিঙ্কযুক্ত তালিকাগুলি অ্যারের চেয়ে বেশি মেমরি-দক্ষ কারণ তাদের সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না। একটি লিঙ্ক করা তালিকার প্রতিটি নোডকে শুধুমাত্র মান এবং পরবর্তী নোডের একটি রেফারেন্স সংরক্ষণ করতে হবে, যেখানে অ্যারেগুলি ব্যবহার না করা হলেও সমস্ত উপাদানের জন্য মেমরি বরাদ্দ করতে হবে।

সন্নিবেশ এবং মুছে ফেলার দক্ষতা

লিঙ্ক করা তালিকাগুলি সন্নিবেশ এবং মুছে ফেলার ক্রিয়াকলাপের ক্ষেত্রে দুর্দান্ত, বিশেষ করে যখন উপাদানগুলি ঘন ঘন তালিকার মাঝখানে থেকে যুক্ত বা সরানো হয়। একটি লিঙ্কযুক্ত তালিকায় একটি উপাদান সন্নিবেশ করা বা মুছে ফেলার জন্য শুধুমাত্র প্রতিবেশী নোডগুলির রেফারেন্সগুলি আপডেট করার প্রয়োজন হয়, যেখানে অ্যারেগুলি পরিবর্তনকে সামঞ্জস্য করার জন্য উপাদানগুলি স্থানান্তরের প্রয়োজন হতে পারে৷

র্যান্ডম অ্যাক্সেস দক্ষতা

অ্যারেগুলি তাদের সূচকগুলির উপর ভিত্তি করে উপাদানগুলিতে দক্ষ এলোমেলো অ্যাক্সেস সরবরাহ করে, কারণ তারা সরাসরি মেমরি অ্যাড্রেসিংয়ের অনুমতি দেয়। বিপরীতে, লিঙ্কযুক্ত তালিকাগুলির একটি নির্দিষ্ট সূচকে একটি উপাদান অ্যাক্সেস করার জন্য শুরু থেকে তালিকাটি অতিক্রম করতে হবে, যার ফলে র্যান্ডম অ্যাক্সেস অপারেশনগুলির জন্য ধীর কর্মক্ষমতা হয়।

সঠিক ডেটা স্ট্রাকচার নির্বাচন করা

লিঙ্কযুক্ত তালিকা এবং অ্যারেগুলির মধ্যে পছন্দটি অ্যাপ্লিকেশনের নির্দিষ্ট প্রয়োজনীয়তার উপর নির্ভর করে। যদি ঘন ঘন পরিবর্তন এবং গতিশীল আকার পরিবর্তন প্রত্যাশিত হয়, লিঙ্কযুক্ত তালিকাগুলি একটি ভাল পছন্দ। অন্যদিকে, যদি র্যান্ডম অ্যাক্সেস এবং মেমরি দক্ষতা গুরুত্বপূর্ণ হয়, অ্যারেগুলি আরও উপযুক্ত।

লিঙ্ক তালিকা অ্যাপ্লিকেশন

এখন যেহেতু আমরা লিঙ্কযুক্ত তালিকাগুলি এবং কীভাবে তারা কাজ করে সে সম্পর্কে ভাল ধারণা পেয়েছি, আসুন কিছু ব্যবহারিক অ্যাপ্লিকেশনগুলি অন্বেষণ করি যেখানে লিঙ্কযুক্ত তালিকাগুলি কার্যকরভাবে ব্যবহার করা যেতে পারে।

যোজিত তালিকা

আপনি আমাদের তালিকাভুক্ত করতে পারেন বিনামূল্যে কোর্স আজ!

স্ট্যাক এবং সারি বাস্তবায়ন

লিঙ্ক করা তালিকার সবচেয়ে সাধারণ অ্যাপ্লিকেশনগুলির মধ্যে একটি হল স্ট্যাক এবং সারিগুলি বাস্তবায়ন করা। স্ট্যাক এবং সারি উভয়ই বিমূর্ত ডেটা টাইপ যা লিঙ্ক করা তালিকা ব্যবহার করে সহজেই প্রয়োগ করা যেতে পারে।

স্ট্যাক হল একটি ডেটা স্ট্রাকচার যা লাস্ট-ইন-ফার্স্ট-আউট (LIFO) নীতি অনুসরণ করে। উপাদানগুলি যোগ করা হয় এবং একই প্রান্ত থেকে সরানো হয়, যা স্ট্যাকের শীর্ষ হিসাবে পরিচিত। লিঙ্কযুক্ত তালিকাগুলি স্ট্যাকগুলি বাস্তবায়নের একটি কার্যকর উপায় প্রদান করে কারণ আমরা সহজেই তালিকার প্রধান থেকে উপাদানগুলি যোগ বা সরাতে পারি।

পাইথনে লিঙ্কযুক্ত তালিকা ব্যবহার করে একটি স্ট্যাক বাস্তবায়নের একটি উদাহরণ এখানে রয়েছে:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Stack:
    def __init__(self):
        self.head = None

    def push(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def pop(self):
        if self.head is None:
            return None
        popped = self.head.data
        self.head = self.head.next
        return popped

অন্যদিকে, একটি সারি ফার্স্ট-ইন-ফার্স্ট-আউট (FIFO) নীতি অনুসরণ করে। উপাদানগুলি এক প্রান্তে যুক্ত করা হয়, যা পিছন হিসাবে পরিচিত, এবং অন্য প্রান্ত থেকে সরানো হয়, যা সামনে নামে পরিচিত। লিঙ্কযুক্ত তালিকাগুলি সারিগুলিকে দক্ষতার সাথে প্রয়োগ করতেও ব্যবহার করা যেতে পারে।

এখানে পাইথনে একটি লিঙ্কযুক্ত তালিকা ব্যবহার করে একটি সারি বাস্তবায়নের একটি উদাহরণ রয়েছে:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Queue:
    def __init__(self):
        self.front = None
        self.rear = None

    def enqueue(self, data):
        new_node = Node(data)
        if self.rear is None:
            self.front = new_node
            self.rear = new_node
        else:
            self.rear.next = new_node
            self.rear = new_node

    def dequeue(self):
        if self.front is None:
            return None
        dequeued = self.front.data
        self.front = self.front.next
        if self.front is None:
            self.rear = None
        return dequeued

বড় ডেটাসেট পরিচালনা করা

বড় ডেটাসেটের সাথে কাজ করার সময় লিঙ্কযুক্ত তালিকাগুলিও কার্যকর। অ্যারেগুলির বিপরীতে, লিঙ্কযুক্ত তালিকাগুলির সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না। এর মানে হল যে লিঙ্ক করা তালিকাগুলি রিসাইজ বা পুনঃঅবস্থানের প্রয়োজন ছাড়াই বিভিন্ন আকারের ডেটাসেটগুলি দক্ষতার সাথে পরিচালনা করতে পারে।

উদাহরণ স্বরূপ, ধরা যাক আমাদের কাছে লক্ষ লক্ষ রেকর্ডের ডেটাসেট রয়েছে এবং আমাদের ক্রিয়াকলাপ যেমন সন্নিবেশ, মুছে ফেলা বা ট্রাভার্সাল করতে হবে। এই কাজের জন্য একটি অ্যারে ব্যবহার করা অকার্যকর হতে পারে কারণ এটি সন্নিবেশ বা মুছে ফেলার সময় উপাদানগুলি স্থানান্তরিত করার প্রয়োজন হয়৷ যাইহোক, একটি লিঙ্ক করা তালিকার সাথে, আমরা সহজেই পয়েন্টার আপডেট করে উপাদানগুলি সন্নিবেশ বা মুছে ফেলতে পারি, যার ফলে দ্রুত অপারেশন হয়।

গ্রাফ ট্রাভার্সাল অ্যালগরিদম

গ্রাফ ট্রাভার্সাল অ্যালগরিদম, যেমন ব্রেডথ-ফার্স্ট সার্চ (বিএফএস) এবং ডেপথ-ফার্স্ট সার্চ (ডিএফএস), লিঙ্ক করা তালিকা ব্যবহার করেও প্রয়োগ করা যেতে পারে। গ্রাফ ট্রাভার্সালে, আমরা একটি নির্দিষ্ট ক্রমে একটি গ্রাফের প্রতিটি শীর্ষ বা নোড পরিদর্শন করি।

লিঙ্ক করা তালিকাগুলি একটি গ্রাফের সংলগ্ন তালিকার প্রতিনিধিত্ব করতে ব্যবহার করা যেতে পারে, যেখানে লিঙ্ক করা তালিকার প্রতিটি নোড একটি শীর্ষবিন্দুকে প্রতিনিধিত্ব করে এবং এর সন্নিহিত শীর্ষগুলি লিঙ্কযুক্ত তালিকা নোড হিসাবে সংরক্ষণ করা হয়। এই উপস্থাপনা গ্রাফটির দক্ষ ট্রাভার্সাল এবং অন্বেষণের জন্য অনুমতি দেয়।

বহুপদী প্রতিনিধিত্ব

লিঙ্কযুক্ত তালিকাগুলি বহুপদকে দক্ষতার সাথে উপস্থাপন করতে ব্যবহার করা যেতে পারে। গণিতে, বহুপদ হল ভেরিয়েবল এবং সহগ নিয়ে গঠিত অভিব্যক্তি। একটি বহুপদীর প্রতিটি পদ একটি লিঙ্কযুক্ত তালিকায় একটি নোড হিসাবে উপস্থাপন করা যেতে পারে, যেখানে সহগ এবং সূচক ডেটা হিসাবে সংরক্ষণ করা হয়।

সংযুক্ত তালিকা ব্যবহার করে, আমরা সহজেই বহুপদে ক্রিয়াকলাপ সম্পাদন করতে পারি, যেমন যোগ, বিয়োগ এবং গুণ। এই ক্রিয়াকলাপগুলি সম্পাদন করার জন্য নোডগুলিকে ম্যানিপুলেট করা যেতে পারে, যার ফলে বহুপদগুলির একটি সংক্ষিপ্ত এবং দক্ষ উপস্থাপনা হয়।

সঙ্গীত এবং ভিডিও প্লেলিস্ট

লিঙ্ক করা তালিকাগুলি সাধারণত সঙ্গীত এবং ভিডিও প্লেয়ারগুলিতে প্লেলিস্টগুলি প্রয়োগ করতে ব্যবহৃত হয়। প্রতিটি গান বা ভিডিও একটি লিঙ্ক করা তালিকায় একটি নোড হিসাবে উপস্থাপন করা যেতে পারে, যেখানে ডেটা মিডিয়া ফাইল সম্পর্কে তথ্য ধারণ করে এবং পয়েন্টার প্লেলিস্টের পরবর্তী গান বা ভিডিওতে নির্দেশ করে।

প্লেলিস্টগুলির জন্য লিঙ্ক করা তালিকাগুলি ব্যবহার করে গান বা ভিডিওগুলির মধ্যে সহজে নেভিগেশন করার অনুমতি দেয়৷ আমরা সহজে পয়েন্টার আপডেট করে প্লেলিস্ট থেকে গান যোগ করতে বা অপসারণ করতে পারি, একটি বিরামহীন ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।

উপসংহার

উপসংহারে, লিঙ্কযুক্ত তালিকাগুলি বহুমুখী ডেটা স্ট্রাকচার যা বিভিন্ন ডোমেনে অ্যাপ্লিকেশন খুঁজে পায়। এগুলি স্ট্যাক এবং সারিগুলি বাস্তবায়ন করতে, বড় ডেটাসেটগুলি পরিচালনা করতে, গ্রাফ ট্র্যাভারসাল সম্পাদন করতে, বহুপদকে উপস্থাপন করতে এবং প্লেলিস্ট তৈরি করতে ব্যবহার করা যেতে পারে। লিঙ্কযুক্ত তালিকাগুলি তাদের গতিশীল মেমরি বরাদ্দ এবং নোডগুলির সহজ ম্যানিপুলেশন ব্যবহার করে এই সমস্যাগুলির কার্যকর সমাধান প্রদান করে।

লিঙ্কযুক্ত তালিকার অ্যাপ্লিকেশনগুলি বোঝার মাধ্যমে, আমাদের প্রোগ্রামগুলির জন্য ডেটা স্ট্রাকচার নির্বাচন করার সময় আমরা জ্ঞাত সিদ্ধান্ত নিতে পারি। এটি ডেটা পরিচালনা, অ্যালগরিদম বাস্তবায়ন বা ব্যবহারকারী-বান্ধব ইন্টারফেস তৈরি করা হোক না কেন, লিঙ্ক করা তালিকাগুলি প্রোগ্রামারের টুলকিটে একটি মূল্যবান টুল অফার করে।

সুতরাং, পরের বার যখন আপনি একটি সমস্যার সম্মুখীন হবেন যার জন্য দক্ষ সন্নিবেশ, মুছে ফেলা বা ট্রাভার্সাল প্রয়োজন, আপনার সমাধানকে সহজ করতে এবং আপনার কোড অপ্টিমাইজ করতে লিঙ্ক করা তালিকাগুলি ব্যবহার করার কথা বিবেচনা করুন৷

আপনি এখানে পাইথন তালিকা সম্পর্কিত আরও নিবন্ধ পড়তে পারেন:

সচরাচর জিজ্ঞাস্য

প্রশ্ন 1: লিঙ্কযুক্ত তালিকা কী?

উত্তর: একটি লিঙ্কযুক্ত তালিকা হল নোডগুলির সমন্বয়ে গঠিত একটি ডেটা কাঠামো, যেখানে প্রতিটি নোডে একটি মান থাকে এবং ক্রমানুসারে পরবর্তী নোডের একটি রেফারেন্স (বা লিঙ্ক) থাকে।

প্রশ্ন 2: লিঙ্কযুক্ত তালিকাগুলি ব্যবহার করার সুবিধাগুলি কী কী?

উত্তর: লিঙ্কযুক্ত তালিকাগুলি দক্ষ সন্নিবেশ এবং মুছে ফেলার ক্রিয়াকলাপ, গতিশীল আকার পরিবর্তন করে এবং সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না।

প্রশ্ন 3: লিঙ্কযুক্ত তালিকাগুলির অসুবিধাগুলি কী কী?

উত্তর: লিঙ্কযুক্ত তালিকাগুলিতে এলোমেলো অ্যাক্সেস নেই, উপাদান অ্যাক্সেসের জন্য ট্রাভার্সাল প্রয়োজন। তারা রেফারেন্স সংরক্ষণের জন্য অতিরিক্ত মেমরিও গ্রহণ করে, যা ছোট ডেটাসেটের জন্য অদক্ষ হতে পারে।

প্রশ্ন 4: পাইথনে প্রধান ধরনের লিঙ্কড তালিকা কি কি?

উত্তর: লিঙ্ক করা তালিকার প্রধান প্রকারগুলি হল একক লিঙ্কযুক্ত তালিকা, দ্বিগুণ লিঙ্কযুক্ত তালিকা এবং সার্কুলার লিঙ্কড তালিকা।

প্রশ্ন 5: কোন পরিস্থিতিতে লিঙ্ক করা তালিকাগুলি অ্যারের চেয়ে বেশি মেমরি-দক্ষ?

উত্তর: ডায়নামিক রিসাইজিং এবং ঘন ঘন সন্নিবেশ বা মুছে ফেলার সাথে ডিল করার সময় লিঙ্ক করা তালিকাগুলি অ্যারের চেয়ে বেশি মেমরি-দক্ষ, কারণ তাদের সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না।

সময় স্ট্যাম্প:

থেকে আরো বিশ্লেষণ বিদ্যা