ভূমিকা
একটি লিঙ্ক করা তালিকা হল একটি ডেটা স্ট্রাকচার যাতে নোডের একটি ক্রম থাকে, প্রতিটিতে একটি মান থাকে এবং অনুক্রমের পরবর্তী নোডের একটি রেফারেন্স থাকে। অ্যারেগুলির বিপরীতে, লিঙ্কযুক্ত তালিকাগুলির সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না, যা নির্দিষ্ট ক্রিয়াকলাপের জন্য তাদের আরও নমনীয় এবং দক্ষ করে তোলে। এই নিবন্ধে, আমরা লিঙ্কড তালিকার সুবিধা এবং অসুবিধাগুলি এবং পাইথনে কীভাবে প্রয়োগ করতে পারি তা অন্বেষণ করব।
সুচিপত্র
লিঙ্ক করা তালিকার সুবিধা এবং অসুবিধা
লিঙ্ক করা তালিকা অন্যান্য ডেটা স্ট্রাকচারের তুলনায় বেশ কিছু সুবিধা প্রদান করে। প্রথমত, তারা উপাদানগুলির দক্ষ সন্নিবেশ এবং মুছে ফেলার অনুমতি দেয়, কারণ তাদের শুধুমাত্র প্রতিবেশী নোডগুলির রেফারেন্স আপডেট করার প্রয়োজন হয়। এটি লিঙ্কডলিস্টগুলিকে এমন পরিস্থিতিগুলির জন্য আদর্শ করে তোলে যেখানে ঘন ঘন পরিবর্তন প্রত্যাশিত হয়৷ অতিরিক্তভাবে, লিঙ্কডলিস্টগুলি গতিশীলভাবে আকারে বৃদ্ধি বা সঙ্কুচিত হতে পারে, অ্যারেগুলির বিপরীতে, যার একটি নির্দিষ্ট আকার রয়েছে।
যাইহোক, লিঙ্কড তালিকার কিছু অসুবিধাও আছে। অ্যারেগুলির বিপরীতে, লিঙ্কযুক্ত তালিকাগুলি উপাদানগুলিতে র্যান্ডম অ্যাক্সেস সমর্থন করে না, যার অর্থ একটি নির্দিষ্ট সূচকে একটি উপাদান অ্যাক্সেস করার জন্য শুরু থেকে তালিকাটি অতিক্রম করা প্রয়োজন। এর ফলে কিছু ক্রিয়াকলাপের জন্য ধীর কর্মক্ষমতা হতে পারে। তদুপরি, লিঙ্ক করা তালিকাগুলির পরবর্তী নোডগুলির রেফারেন্সগুলি সংরক্ষণ করার জন্য অতিরিক্ত মেমরির প্রয়োজন, যা ছোট ডেটাসেটের জন্য অদক্ষ হতে পারে।
পাইথনে লিঙ্কযুক্ত তালিকা বাস্তবায়ন করা
পাইথন লিঙ্ক করা তালিকা বাস্তবায়নের জন্য একটি নমনীয় এবং স্বজ্ঞাত উপায় প্রদান করে। তিনটি প্রধান প্রকারের লিঙ্কযুক্ত তালিকা রয়েছে: একক লিঙ্কযুক্ত তালিকা, দ্বিগুণ লিঙ্কযুক্ত তালিকা এবং সার্কুলার লিঙ্কড তালিকা। আসুন বিস্তারিতভাবে তাদের প্রতিটি অন্বেষণ করা যাক.
এককভাবে লিঙ্ক করা তালিকা
একটি একক লিঙ্কযুক্ত তালিকায় নোড থাকে যেখানে প্রতিটি নোডে একটি মান থাকে এবং অনুক্রমের পরবর্তী নোডের একটি রেফারেন্স থাকে। পাইথনে আপনি কীভাবে এককভাবে লিঙ্কযুক্ত তালিকা তৈরি করতে পারেন তা এখানে:
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
বড় ডেটাসেট পরিচালনা করা
বড় ডেটাসেটের সাথে কাজ করার সময় লিঙ্কযুক্ত তালিকাগুলিও কার্যকর। অ্যারেগুলির বিপরীতে, লিঙ্কযুক্ত তালিকাগুলির সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না। এর মানে হল যে লিঙ্ক করা তালিকাগুলি রিসাইজ বা পুনঃঅবস্থানের প্রয়োজন ছাড়াই বিভিন্ন আকারের ডেটাসেটগুলি দক্ষতার সাথে পরিচালনা করতে পারে।
উদাহরণ স্বরূপ, ধরা যাক আমাদের কাছে লক্ষ লক্ষ রেকর্ডের ডেটাসেট রয়েছে এবং আমাদের ক্রিয়াকলাপ যেমন সন্নিবেশ, মুছে ফেলা বা ট্রাভার্সাল করতে হবে। এই কাজের জন্য একটি অ্যারে ব্যবহার করা অকার্যকর হতে পারে কারণ এটি সন্নিবেশ বা মুছে ফেলার সময় উপাদানগুলি স্থানান্তরিত করার প্রয়োজন হয়৷ যাইহোক, একটি লিঙ্ক করা তালিকার সাথে, আমরা সহজেই পয়েন্টার আপডেট করে উপাদানগুলি সন্নিবেশ বা মুছে ফেলতে পারি, যার ফলে দ্রুত অপারেশন হয়।
গ্রাফ ট্রাভার্সাল অ্যালগরিদম
গ্রাফ ট্রাভার্সাল অ্যালগরিদম, যেমন ব্রেডথ-ফার্স্ট সার্চ (বিএফএস) এবং ডেপথ-ফার্স্ট সার্চ (ডিএফএস), লিঙ্ক করা তালিকা ব্যবহার করেও প্রয়োগ করা যেতে পারে। গ্রাফ ট্রাভার্সালে, আমরা একটি নির্দিষ্ট ক্রমে একটি গ্রাফের প্রতিটি শীর্ষ বা নোড পরিদর্শন করি।
লিঙ্ক করা তালিকাগুলি একটি গ্রাফের সংলগ্ন তালিকার প্রতিনিধিত্ব করতে ব্যবহার করা যেতে পারে, যেখানে লিঙ্ক করা তালিকার প্রতিটি নোড একটি শীর্ষবিন্দুকে প্রতিনিধিত্ব করে এবং এর সন্নিহিত শীর্ষগুলি লিঙ্কযুক্ত তালিকা নোড হিসাবে সংরক্ষণ করা হয়। এই উপস্থাপনা গ্রাফটির দক্ষ ট্রাভার্সাল এবং অন্বেষণের জন্য অনুমতি দেয়।
বহুপদী প্রতিনিধিত্ব
লিঙ্কযুক্ত তালিকাগুলি বহুপদকে দক্ষতার সাথে উপস্থাপন করতে ব্যবহার করা যেতে পারে। গণিতে, বহুপদ হল ভেরিয়েবল এবং সহগ নিয়ে গঠিত অভিব্যক্তি। একটি বহুপদীর প্রতিটি পদ একটি লিঙ্কযুক্ত তালিকায় একটি নোড হিসাবে উপস্থাপন করা যেতে পারে, যেখানে সহগ এবং সূচক ডেটা হিসাবে সংরক্ষণ করা হয়।
সংযুক্ত তালিকা ব্যবহার করে, আমরা সহজেই বহুপদে ক্রিয়াকলাপ সম্পাদন করতে পারি, যেমন যোগ, বিয়োগ এবং গুণ। এই ক্রিয়াকলাপগুলি সম্পাদন করার জন্য নোডগুলিকে ম্যানিপুলেট করা যেতে পারে, যার ফলে বহুপদগুলির একটি সংক্ষিপ্ত এবং দক্ষ উপস্থাপনা হয়।
সঙ্গীত এবং ভিডিও প্লেলিস্ট
লিঙ্ক করা তালিকাগুলি সাধারণত সঙ্গীত এবং ভিডিও প্লেয়ারগুলিতে প্লেলিস্টগুলি প্রয়োগ করতে ব্যবহৃত হয়। প্রতিটি গান বা ভিডিও একটি লিঙ্ক করা তালিকায় একটি নোড হিসাবে উপস্থাপন করা যেতে পারে, যেখানে ডেটা মিডিয়া ফাইল সম্পর্কে তথ্য ধারণ করে এবং পয়েন্টার প্লেলিস্টের পরবর্তী গান বা ভিডিওতে নির্দেশ করে।
প্লেলিস্টগুলির জন্য লিঙ্ক করা তালিকাগুলি ব্যবহার করে গান বা ভিডিওগুলির মধ্যে সহজে নেভিগেশন করার অনুমতি দেয়৷ আমরা সহজে পয়েন্টার আপডেট করে প্লেলিস্ট থেকে গান যোগ করতে বা অপসারণ করতে পারি, একটি বিরামহীন ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।
উপসংহার
উপসংহারে, লিঙ্কযুক্ত তালিকাগুলি বহুমুখী ডেটা স্ট্রাকচার যা বিভিন্ন ডোমেনে অ্যাপ্লিকেশন খুঁজে পায়। এগুলি স্ট্যাক এবং সারিগুলি বাস্তবায়ন করতে, বড় ডেটাসেটগুলি পরিচালনা করতে, গ্রাফ ট্র্যাভারসাল সম্পাদন করতে, বহুপদকে উপস্থাপন করতে এবং প্লেলিস্ট তৈরি করতে ব্যবহার করা যেতে পারে। লিঙ্কযুক্ত তালিকাগুলি তাদের গতিশীল মেমরি বরাদ্দ এবং নোডগুলির সহজ ম্যানিপুলেশন ব্যবহার করে এই সমস্যাগুলির কার্যকর সমাধান প্রদান করে।
লিঙ্কযুক্ত তালিকার অ্যাপ্লিকেশনগুলি বোঝার মাধ্যমে, আমাদের প্রোগ্রামগুলির জন্য ডেটা স্ট্রাকচার নির্বাচন করার সময় আমরা জ্ঞাত সিদ্ধান্ত নিতে পারি। এটি ডেটা পরিচালনা, অ্যালগরিদম বাস্তবায়ন বা ব্যবহারকারী-বান্ধব ইন্টারফেস তৈরি করা হোক না কেন, লিঙ্ক করা তালিকাগুলি প্রোগ্রামারের টুলকিটে একটি মূল্যবান টুল অফার করে।
সুতরাং, পরের বার যখন আপনি একটি সমস্যার সম্মুখীন হবেন যার জন্য দক্ষ সন্নিবেশ, মুছে ফেলা বা ট্রাভার্সাল প্রয়োজন, আপনার সমাধানকে সহজ করতে এবং আপনার কোড অপ্টিমাইজ করতে লিঙ্ক করা তালিকাগুলি ব্যবহার করার কথা বিবেচনা করুন৷
আপনি এখানে পাইথন তালিকা সম্পর্কিত আরও নিবন্ধ পড়তে পারেন:
সচরাচর জিজ্ঞাস্য
উত্তর: একটি লিঙ্কযুক্ত তালিকা হল নোডগুলির সমন্বয়ে গঠিত একটি ডেটা কাঠামো, যেখানে প্রতিটি নোডে একটি মান থাকে এবং ক্রমানুসারে পরবর্তী নোডের একটি রেফারেন্স (বা লিঙ্ক) থাকে।
উত্তর: লিঙ্কযুক্ত তালিকাগুলি দক্ষ সন্নিবেশ এবং মুছে ফেলার ক্রিয়াকলাপ, গতিশীল আকার পরিবর্তন করে এবং সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না।
উত্তর: লিঙ্কযুক্ত তালিকাগুলিতে এলোমেলো অ্যাক্সেস নেই, উপাদান অ্যাক্সেসের জন্য ট্রাভার্সাল প্রয়োজন। তারা রেফারেন্স সংরক্ষণের জন্য অতিরিক্ত মেমরিও গ্রহণ করে, যা ছোট ডেটাসেটের জন্য অদক্ষ হতে পারে।
উত্তর: লিঙ্ক করা তালিকার প্রধান প্রকারগুলি হল একক লিঙ্কযুক্ত তালিকা, দ্বিগুণ লিঙ্কযুক্ত তালিকা এবং সার্কুলার লিঙ্কড তালিকা।
উত্তর: ডায়নামিক রিসাইজিং এবং ঘন ঘন সন্নিবেশ বা মুছে ফেলার সাথে ডিল করার সময় লিঙ্ক করা তালিকাগুলি অ্যারের চেয়ে বেশি মেমরি-দক্ষ, কারণ তাদের সংলগ্ন মেমরি বরাদ্দের প্রয়োজন হয় না।
সংশ্লিষ্ট
- এসইও চালিত বিষয়বস্তু এবং পিআর বিতরণ। আজই পরিবর্ধিত পান।
- PlatoData.Network উল্লম্ব জেনারেটিভ Ai. নিজেকে ক্ষমতায়িত করুন। এখানে প্রবেশ করুন.
- প্লেটোএআইস্ট্রিম। Web3 ইন্টেলিজেন্স। জ্ঞান প্রসারিত. এখানে প্রবেশ করুন.
- প্লেটোইএসজি। কার্বন, ক্লিনটেক, শক্তি, পরিবেশ সৌর, বর্জ্য ব্যবস্থাপনা. এখানে প্রবেশ করুন.
- প্লেটো হেলথ। বায়োটেক এবং ক্লিনিক্যাল ট্রায়াল ইন্টেলিজেন্স। এখানে প্রবেশ করুন.
- উত্স: https://www.analyticsvidhya.com/blog/2024/02/linked-lists-in-python/
- : হয়
- :না
- :কোথায়
- 1
- 10
- 16
- 48
- 5
- 9
- a
- সম্পর্কে
- বিমূর্ত
- প্রবেশ
- অ্যাক্সেস করা
- মিটমাট করা
- যোগ
- যোগ
- যোগ
- উপরন্তু
- সম্ভাষণ
- সংলগ্ন
- সুবিধাদি
- আলগোরিদিম
- সব
- বরাদ্দ করা
- বণ্টন
- অনুমতি
- অনুমতি
- এছাড়াও
- an
- এবং
- কোন
- আবেদন
- অ্যাপ্লিকেশন
- রয়েছি
- বিন্যাস
- প্রবন্ধ
- প্রবন্ধ
- AS
- At
- পিছনে
- ভিত্তি
- BE
- কারণ
- শুরু
- উত্তম
- মধ্যে
- উভয়
- বিরতি
- কিন্তু
- by
- CAN
- কিছু
- পরিবর্তন
- বৈশিষ্ট্য
- চেক
- পরীক্ষণ
- পছন্দ
- নির্বাচন
- বিজ্ঞপ্তি
- শ্রেণী
- কোড
- সহগ
- সাধারণ
- সাধারণভাবে
- তুলনা করা
- সংক্ষিপ্ত
- উপসংহার
- বিবেচনা
- গঠিত
- গঠিত
- গ্রাস করা
- আধার
- ধারণ
- বিপরীত হত্তয়া
- গণনা
- সৃষ্টি
- তৈরি করা হচ্ছে
- কঠোর
- বর্তমান
- উপাত্ত
- ডেটাসেট
- ডিলিং
- সিদ্ধান্ত
- Def
- নির্ধারণ করা
- মুছে ফেলা
- নির্ভর করে
- আকাঙ্ক্ষিত
- বিস্তারিত
- বিভিন্ন
- সরাসরি
- অভিমুখ
- দিকনির্দেশ
- do
- ডোমেইনের
- দোকর
- প্রগতিশীল
- পরিবর্তনশীল
- প্রতি
- সহজে
- সহজ
- কার্যকরীভাবে
- দক্ষতা
- দক্ষ
- দক্ষতার
- পারেন
- উপাদান
- উপাদান
- আর
- খালি
- সাক্ষাৎ
- শেষ
- নথিভুক্ত করা
- সমগ্র
- বিশেষত
- থার (eth)
- এমন কি
- উদাহরণ
- সীমা অতিক্রম করা
- প্রত্যাশিত
- অভিজ্ঞতা
- অন্বেষণ
- অন্বেষণ করুণ
- ঘাতক
- এক্সপ্রেশন
- অতিরিক্ত
- মিথ্যা
- দ্রুত
- ফাইল
- আবিষ্কার
- আবিষ্কার
- প্রথম
- স্থায়ী
- নমনীয়
- অনুসরণ
- জন্য
- পাওয়া
- ঘন
- ঘনঘন
- থেকে
- সদর
- তদ্ব্যতীত
- ভাল
- চিত্রলেখ
- হত্তয়া
- হাত
- হাতল
- আছে
- মাথা
- এখানে
- উচ্চ
- কিভাবে
- কিভাবে
- যাহোক
- HTTPS দ্বারা
- আদর্শ
- if
- বাস্তবায়ন
- বাস্তবায়িত
- বাস্তবায়ন
- in
- সূচক
- ইন্ডিসিস
- অদক্ষ
- তথ্য
- অবগত
- ইন্টারফেসগুলি
- স্বজ্ঞাত
- জড়িত
- IT
- এর
- পরিচিত
- রং
- বড়
- গত
- লম্বা
- উপজীব্য
- LINK
- সংযুক্ত
- তালিকা
- পাখি
- প্রধান
- করা
- তৈরি করে
- মেকিং
- পরিচালক
- কাজে ব্যবহৃত
- দক্ষতা সহকারে হস্তচালন
- অংক
- সর্বোচ্চ প্রস্থ
- মে..
- অর্থ
- মানে
- মিডিয়া
- স্মৃতি
- মধ্যম
- লক্ষ লক্ষ
- পরিবর্তন
- অধিক
- সেতু
- পদক্ষেপ
- গুণ
- সঙ্গীত
- ন্যাভিগেশন
- প্রয়োজন
- চাহিদা
- প্রতিবেশী
- পরবর্তী
- নোড
- নোড
- না
- সংখ্যা
- of
- অর্পণ
- on
- ONE
- কেবল
- অপারেশনস
- অপ্টিমিজ
- or
- ক্রম
- অন্যান্য
- আমাদের
- বাইরে
- শেষ
- সম্পাদন করা
- কর্মক্ষমতা
- সম্পাদিত
- Plato
- প্লেটো ডেটা ইন্টেলিজেন্স
- প্লেটোডাটা
- খেলোয়াড়দের
- বিন্দু
- পয়েন্ট
- বহুপদী
- polynomials
- অবস্থান
- ব্যবহারিক
- বাস্তবিক দরখাস্তগুলো
- আগে
- নীতি
- সমস্যা
- সমস্যা
- প্রোগ্রাম
- প্রদান
- উপলব্ধ
- প্রদানের
- পাইথন
- বৃদ্ধি
- এলোমেলো
- পরিসর
- নাগাল
- পৌঁছেছে
- পড়া
- রেকর্ড
- উল্লেখ
- রেফারেন্স
- সংশ্লিষ্ট
- অপসারণ
- অপসারিত
- চিত্রিত করা
- প্রতিনিধিত্ব
- প্রতিনিধিত্ব
- প্রতিনিধিত্ব করে
- প্রয়োজন
- আবশ্যকতা
- প্রয়োজন
- ফল
- ফলে এবং
- প্রত্যাবর্তন
- বিপরীত
- অধিকার
- একই
- বলা
- পরিস্থিতিতে
- নির্বিঘ্ন
- সার্চ
- অনুসন্ধানের
- দ্বিতীয়
- আত্ম
- ক্রম
- স্থল
- সেট
- বিভিন্ন
- শিফটিং
- অনুরূপ
- সহজতর করা
- কেবল
- আয়তন
- মাপ
- ছোট
- সমাধান
- সলিউশন
- কিছু
- গান
- নির্দিষ্ট
- গাদা
- স্ট্যাক
- শুরু হচ্ছে
- দোকান
- সঞ্চিত
- গঠন
- কাঠামো
- বিয়োগ
- এমন
- উপযুক্ত
- সমর্থন
- করা SVG
- বিনিময়
- কার্য
- মেয়াদ
- শর্তাবলী
- চেয়ে
- যে
- সার্জারির
- গ্রাফ
- তাদের
- তাহাদিগকে
- সেখানে।
- এইগুলো
- তারা
- এই
- তিন
- সময়
- থেকে
- টুল
- টুলকিট
- শীর্ষ
- তর্ক করা
- সত্য
- দুই
- আদর্শ
- ধরনের
- বোধশক্তি
- অসদৃশ
- পর্যন্ত
- আপডেট
- আপডেট
- ব্যবহৃত
- দরকারী
- ব্যবহারকারী
- ব্যবহারকারীর অভিজ্ঞতা
- ব্যবহারকারী বান্ধব
- ব্যবহার
- দামি
- মূল্য
- ভেরিয়েবল
- বিভিন্ন
- অসমজ্ঞ্জস
- বহুমুখ কর্মশক্তিসম্পন্ন
- ভিডিও
- Videos
- দেখুন
- vs
- উপায়..
- we
- কি
- কখন
- যেহেতু
- কিনা
- যে
- যখন
- ইচ্ছা
- সঙ্গে
- ছাড়া
- হয়া যাই ?
- আপনি
- আপনার
- zephyrnet