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

C++-তে লিংকড লিস্ট থেকে K দিয়ে বিভাজ্য সর্বোচ্চ ও ন্যূনতম এলিমেন্ট বের করা


লিংকড লিস্ট হলো একটি লিনিয়ার ডেটা স্ট্রাকচার যেখানে এলিমেন্টগুলো পয়েন্টার দিয়ে লিঙ্ক করা থাকে। প্রতিটি নোডে একটি ডেটা পার্ট এবং পরের নোডের পয়েন্টার থাকে। এলিমেন্টগুলো মেমরিতে নন-কন্টিগিউাস লোকেশন নিতে পারে।

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

ইনপুট

SList: 5->2->10->12->3->20->7, K=5

আউটপুট

Maximum element divisible by K: 20
Minimum element divisible by K: 5

ব্যাখ্যা − হেড নোড থেকে ট্রাভার্স করে প্রতিটি নোডের ডেটা K দিয়ে ভাগ করে রিমেইন্ডার ০ কিনা চেক করুন। ৫, ১০, ২০ — এই তিনটি ৫ দিয়ে বিভাজ্য। 그중 সর্বনিম্ন ৫ এবং সর্বোচ্চ ২০।

ইনপুট

SList: 12->2->5->18->3->144->7, K=4

আউটপুট

Maximum element divisible by K: 144
Minimum element divisible by K: 12

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • একটি লিংকড লিস্ট নোড ক্লাস তৈরি করুন (SLLnode) যেটিতে info এবং next পয়েন্টার থাকে।
  • একটি লিংকড লিস্ট ক্লাস তৈরি করুন (SLList) যেটিতে head পয়েন্টার থাকে।
  • addtohead(int) ফাংশন দিয়ে লিস্টে নোড যোগ করুন।
  • Divisible(SLLnode*, int) ফাংশন কল করুন যা হেড নোড এবং K নেয়।
  • ফাংশনের ভিতরে maxD এবং minD ভ্যারিয়েবল দিয়ে সর্বোচ্চ ও ন্যূনতম মান ট্র্যাক করুন। maxD -1 এবং minD ৯৯৯৯ দিয়ে ইনিশিয়ালাইজ করুন।
  • হেড নোড থেকে লিস্ট ট্রাভার্স করুন। প্রতিটি নোডের info K দিয়ে বিভাজ্য কিনা চেক করুন। যদি হয়, তবে maxD ও minD আপডেট করুন।
  • শেষে maxD এবং minD প্রিন্ট করুন।

উদাহরণ

#include <iostream>
using namespace std;

class SLLnode {
public:
    int info;
    SLLnode* next;
    SLLnode(int e, SLLnode* ptr = nullptr) : info(e), next(ptr) {}
};

class SLList {
public:
    SLLnode* head;
    SLList() : head(nullptr) {}
    void addtohead(int el) { head = new SLLnode(el, head); }
};

void Divisible(SLLnode* head, int K) {
    int minD = 9999;
    int maxD = -1;
    SLLnode* start = head;
    for (; start != nullptr; start = start->next) {
        if ((start->info < minD) && (start->info % K == 0))
            minD = start->info;
        if ((start->info > maxD) && (start->info % K == 0))
            maxD = start->info;
    }
    cout << "Max Element divisible by K: " << maxD << endl;
    cout << "Min Element divisible by K: " << minD;
}

int main() {
    SLList LIST;
    LIST.addtohead(50);
    LIST.addtohead(21);
    LIST.addtohead(32);
    LIST.addtohead(45);
    LIST.addtohead(11);
    LIST.addtohead(23);
    LIST.addtohead(90);
    LIST.addtohead(56);
    int K = 5;
    Divisible(LIST.head, K);
    return 0;
}

আউটপুট

Max Element divisible by K: 90
Min Element divisible by K: 45
  1. C++ ব্যবহার করে N কে ২৫ দিয়ে বিভাজ্য করার ন্যূনতম মুভ সংখ্যা

  2. C++-এ m টিমে n মানুষের ন্যূনতম ও সর্বোচ্চ জোড়া সংখ্যা

  3. C++-এ সিংলি সার্কুলার লিংকড লিস্টে ন্যূনতম ও সর্বোচ্চ মান বের করা

  4. C++-এ সিঙ্গলি লিংকড লিস্ট-এ ন্যূনতম এবং সর্বোচ্চ প্রাইম নম্বর বের করা