লিঙ্কড লিস্ট হল একটি ডেটা স্ট্রাকচার যা উপাদানগুলি (নোড) লিঙ্কের মাধ্যমে সংযুক্ত থাকে। প্রতিটি নোডে একটি ডেটা এবং পরবর্তী নোডের জন্য একটি রেফারেন্স (পয়েন্টার) থাকে। লিঙ্কড লিস্টের কিছু মৌলিক অপারেশন হল ইনসার্ট, ডিলিট এবং সার্চ। নিচে এই অপারেশনগুলোর বিস্তারিত আলোচনা করা হলো।
লিঙ্কড লিস্টের গঠন
প্রথমে, একটি লিঙ্কড লিস্টের নোডের গঠন এবং লিঙ্কড লিস্ট তৈরি করা যাক।
class Node:
def __init__(self, data):
self.data = data
self.next = None # পরবর্তী নোডের জন্য পয়েন্টার
class LinkedList:
def __init__(self):
self.head = None # লিঙ্কড লিস্টের মাথা
১. ইনসার্ট অপারেশন (Insert Operation)
নতুন নোড যুক্ত করার জন্য লিঙ্কড লিস্টে বিভিন্ন উপায়ে ইনসার্ট করা যেতে পারে:
১.১ মাথায় ইনসার্ট (Insert at Head)
def insert_at_head(self, data):
new_node = Node(data) # নতুন নোড তৈরি
new_node.next = self.head # নতুন নোডের পরবর্তী নোড পুরানো মাথা
self.head = new_node # মাথা নতুন নোডকে নির্দেশ করে
১.২ শেষে ইনসার্ট (Insert at Tail)
def insert_at_tail(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node # যদি মাথা খালি হয়, নতুন নোড মাথা হয়
return
last_node = self.head
while last_node.next:
last_node = last_node.next # শেষ নোডে পৌঁছান
last_node.next = new_node # নতুন নোড যুক্ত করুন
২. ডিলিট অপারেশন (Delete Operation)
লিঙ্কড লিস্ট থেকে একটি নির্দিষ্ট নোড মুছে ফেলার জন্য ডিলিট অপারেশন ব্যবহার করা হয়।
২.১ নির্দিষ্ট নোড ডিলিট (Delete Specific Node)
def delete_node(self, key):
current_node = self.head
# যদি মাথা নিজেই মুছে ফেলতে হয়
if current_node and current_node.data == key:
self.head = current_node.next # মাথাকে আপডেট করুন
current_node = None # নোড মুছুন
return
# অন্য নোড মুছে ফেলুন
previous_node = None
while current_node and current_node.data != key:
previous_node = current_node
current_node = current_node.next
# যদি নোড না পাওয়া যায়
if not current_node:
return
previous_node.next = current_node.next # নোডটি বাদ দিন
current_node = None # নোড মুছুন
৩. সার্চ অপারেশন (Search Operation)
লিঙ্কড লিস্টে একটি নির্দিষ্ট মান খুঁজে বের করার জন্য সার্চ অপারেশন ব্যবহার করা হয়।
সার্চ অপারেশন
def search(self, key):
current_node = self.head
while current_node:
if current_node.data == key:
return True # পাওয়া গেছে
current_node = current_node.next
return False # পাওয়া যায়নি
লিঙ্কড লিস্টের উদাহরণ
এখন একটি সম্পূর্ণ উদাহরণ দিয়ে দেখানো যাক, যেখানে ইনসার্ট, ডিলিট এবং সার্চ অপারেশন একত্রে ব্যবহার করা হয়েছে।
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def insert_at_head(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
def insert_at_tail(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
last_node = self.head
while last_node.next:
last_node = last_node.next
last_node.next = new_node
def delete_node(self, key):
current_node = self.head
if current_node and current_node.data == key:
self.head = current_node.next
current_node = None
return
previous_node = None
while current_node and current_node.data != key:
previous_node = current_node
current_node = current_node.next
if not current_node:
return
previous_node.next = current_node.next
current_node = None
def search(self, key):
current_node = self.head
while current_node:
if current_node.data == key:
return True
current_node = current_node.next
return False
def print_list(self):
current_node = self.head
while current_node:
print(current_node.data, end=" -> ")
current_node = current_node.next
print("None")
# উদাহরণ ব্যবহারের জন্য
linked_list = LinkedList()
linked_list.insert_at_head(10)
linked_list.insert_at_tail(20)
linked_list.insert_at_tail(30)
print("Linked List:")
linked_list.print_list() # 10 -> 20 -> 30 -> None
linked_list.delete_node(20)
print("After deleting 20:")
linked_list.print_list() # 10 -> 30 -> None
print("Search for 30:", linked_list.search(30)) # True
print("Search for 20:", linked_list.search(20)) # False
উপসংহার
লিঙ্কড লিস্টে ইনসার্ট, ডিলিট এবং সার্চ অপারেশনগুলি একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচারের কার্যকারিতা প্রদর্শন করে। এগুলো বিভিন্ন পরিস্থিতিতে ডেটা সংরক্ষণ এবং পরিচালনার জন্য ব্যবহৃত হয়। লিঙ্কড লিস্টের এই মৌলিক অপারেশনগুলোকে ব্যবহার করে আপনি ডেটার প্রয়োজনীয়তা অনুযায়ী কোড তৈরি করতে পারেন।
Read more