কম্পিউটার

C++ এ 2D ম্যাট্রিক্স (ইটারেটিভ অ্যাপ্রোচ) থেকে একটি লিঙ্ক করা তালিকা তৈরি করুন


ধরুন আমাদের একটি ম্যাট্রিক্স আছে, আমাদের এটিকে পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করে 2d লিঙ্কযুক্ত তালিকায় রূপান্তর করতে হবে। তালিকায় ডান এবং নিচের পয়েন্টার থাকবে৷

সুতরাং, যদি ইনপুট মত হয়

10 20 30
40 50 60
70 80 90

তারপর আউটপুট হবে

C++ এ 2D ম্যাট্রিক্স (ইটারেটিভ অ্যাপ্রোচ) থেকে একটি লিঙ্ক করা তালিকা তৈরি করুন

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • real_head :=NULL

  • আকারের একটি অ্যারে head_arr সংজ্ঞায়িত করুন:m.

  • আরম্ভ করার জন্য i :=0, যখন i

    • head_arr[i] :=NULL

    • j শুরু করার জন্য :=0, যখন j করুন

      • p :=মান ম্যাট[i, j]

        সহ নতুন ট্রি নোড
      • যদি real_head শূন্য হয়, তাহলে −

        • real_head :=p

      • যদি head_arr[i] শূন্য হয়, তাহলে −

        • head_arr[i] :=p

      • অন্যথায়

        • right_ptr এর অধিকার :=p

      • right_ptr :=p

  • আরম্ভ করার জন্য i :=0, যখন i

    • p :=head_arr[i], q =head_arr[i + 1]

    • যখন (p এবং q উভয়ই শূন্য নয়), −

      করুন
      • p :=q

        এর নিচে
      • p :=p এর ডান

      • q :=q এর অধিকার

  • রিটার্ন রিয়াল হেড

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class TreeNode {
   public:
   int data;
   TreeNode *right, *down;
   TreeNode(int d){
      data = d;
      right = down = NULL;
   }
};
void show_2d_list(TreeNode* head) {
   TreeNode *right_ptr, *down_ptr = head;
   while (down_ptr) {
      right_ptr = down_ptr;
      while (right_ptr) {
         cout << right_ptr->data << " ";
         right_ptr = right_ptr->right;
      }
      cout << endl;
      down_ptr = down_ptr->down;
   }
}
TreeNode* make_2d_list(int mat[][3], int m, int n) {
   TreeNode* real_head = NULL;
   TreeNode* head_arr[m];
   TreeNode *right_ptr, *p;
   for (int i = 0; i < m; i++) {
      head_arr[i] = NULL;
      for (int j = 0; j < n; j++) {
         p = new TreeNode(mat[i][j]);
         if (!real_head)
            real_head = p;
         if (!head_arr[i])
            head_arr[i] = p;
         else
            right_ptr->right = p;
         right_ptr = p;
      }
   }
   for (int i = 0; i < m - 1; i++) {
      TreeNode *p = head_arr[i], *q = head_arr[i + 1];
      while (p && q) {
         p->down = q;
         p = p->right;
         q = q->right;
      }
   }
   return real_head;
}
int main() {
   int m = 3, n = 3;
   int mat[][3] = {
      { 10, 20, 30 },
      { 40, 50, 60 },
      { 70, 80, 90 } };
   TreeNode* head = make_2d_list(mat, m, n);
   show_2d_list(head);
}

ইনপুট

{ { 10, 20, 30 },
{ 40, 50, 60 },
{ 70, 80, 90 } }

আউটপুট

10 20 30
40 50 60
70 80 90

  1. C++ এ লিঙ্ক করা তালিকায় প্রথম অ-পুনরাবৃত্তি

  2. C++ এ একটি লিঙ্কযুক্ত তালিকা সমতল করা

  3. C++ এ বহুস্তরের লিঙ্কযুক্ত তালিকা সমতল করুন

  4. C++ এ 2D ম্যাট্রিক্স থেকে একটি লিঙ্ক করা তালিকা তৈরি করুন