কম্পিউটার টিউটোরিয়াল

পাইথনে সার্কুলার লিঙ্কড লিস্টে একটি এলিমেন্ট খুঁজে বের করার প্রোগ্রাম


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

সার্কুলার লিঙ্কড লিস্টে হেড (head) এবং টেইল (tail) একে অপরের সাথে সংযুক্ত থাকে, ফলে এটি একটি বৃত্ত আকার ধারণ করে এবং শেষ নোডে NULL মান থাকে না। একটি অন্য ক্লাস তৈরি করতে হয় যার ইনিশিয়ালাইজেশন ফাংশনে হেড নোডকে None দিয়ে ইনিশিয়ালাইজ করা হয়।

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

নিচে এর একটি উদাহরণ দেওয়া হলো:

উদাহরণ

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

class list_creation:
    def __init__(self):
        self.head = Node(None)
        self.tail = Node(None)
        self.head.next = self.tail
        self.tail.next = self.head

    def add_data(self, my_data):
        new_node = Node(my_data)
        if self.head.data is None:
            self.head = new_node
            self.tail = new_node
            new_node.next = self.head
        else:
            self.tail.next = new_node
            self.tail = new_node
            self.tail.next = self.head

    def search_value(self, elem_to_search):
        curr = self.head
        i = 1
        flag_val = False
        if self.head is None:
            print("লিস্টটি খালি")
        else:
            while True:
                if curr.data == elem_to_search:
                    flag_val = True
                    break
                curr = curr.next
                i += 1
                if curr == self.head:
                    break
            if flag_val:
                print("এলিমেন্টটি লিস্টে " + str(i) + " নম্বর পজিশনে আছে")
            else:
                print("এলিমেন্টটি লিস্টে নেই")

    def print_it(self):
        curr = self.head
        if self.head is None:
            print("লিস্টটি খালি")
            return
        else:
            print(curr.data)
            while curr.next != self.head:
                curr = curr.next
                print(curr.data)
            print("\n")

class circular_linked_list:
    my_cl = list_creation()
    print("লিস্টে নোড যোগ করা হচ্ছে")
    my_cl.add_data(21)
    my_cl.add_data(54)
    my_cl.add_data(78)
    my_cl.add_data(99)
    my_cl.add_data(27)
    print("লিস্টটি হলো:")
    my_cl.print_it()
    print("৯৯ মানটি অনুসন্ধান করা হচ্ছে")
    my_cl.search_value(99)
    print("০ মানটি অনুসন্ধান করা হচ্ছে")
    my_cl.search_value(0)

আউটপুট

লিস্টে নোড যোগ করা হচ্ছে
লিস্টটি হলো:
21
54
78
99
27

৯৯ মানটি অনুসন্ধান করা হচ্ছে
এলিমেন্টটি লিস্টে 4 নম্বর পজিশনে আছে
০ মানটি অনুসন্ধান করা হচ্ছে
এলিমেন্টটি লিস্টে নেই

ব্যাখ্যা

  • Node ক্লাস তৈরি করা হয়েছে।
  • প্রয়োজনীয় অ্যাট্রিবিউটসহ আরেকটি ক্লাস তৈরি করা হয়েছে।
  • search_value নামে একটি মেথড সংজ্ঞায়িত করা হয়েছে, যা লিঙ্কড লিস্টে নির্দিষ্ট এলিমেন্ট অনুসন্ধান করে।
  • print_it নামে একটি মেথড সংজ্ঞায়িত করা হয়েছে, যা সার্কুলার লিঙ্কড লিস্টের নোডগুলো প্রদর্শন করে।
  • list_creation ক্লাসের একটি অবজেক্ট তৈরি করা হয়েছে এবং ডেটা যোগ করার জন্য এর মেথডগুলো কল করা হয়েছে।
  • একটি init মেথড সংজ্ঞায়িত করা হয়েছে, যা সার্কুলার লিঙ্কড লিস্টের প্রথম এবং শেষ নোডকে None দিয়ে ইনিশিয়ালাইজ করে।
  • search_value মেথডটি কল করা হয়েছে।
  • এটি লিস্টের মাধ্যমে ইটারেট করে এবং খুঁজে বের করার জন্য দরকার এলিমেন্টটি পাওয়া গেলে তা চেক করে।
  • যদি পাওয়া যায়, তবে এর ইনডেক্স প্রদর্শন করা হয়।
  • এটি কনসোলে print_it মেথড ব্যবহার করে প্রদর্শিত হয়।

  1. পাইথন প্রোগ্রাম: ডাবলি লিংকড লিস্টে একটি উপাদান সার্চ করা

  2. পাইথন প্রোগ্রাম: ডাবলি লিংকড লিস্টকে N নোড দ্বারা রোটেট করা

  3. পাইথন প্রোগ্রাম: সার্কুলার লিংকড লিস্টের উপাদানগুলো সর্ট করা

  4. পাইথনে লিনিয়ার সার্চ প্রোগ্রাম