কম্পিউটার

সি ভাষা ব্যবহার করে লিঙ্ক তালিকায় উপাদান সন্নিবেশ ব্যাখ্যা করুন


লিঙ্কযুক্ত তালিকাগুলি গতিশীল মেমরি বরাদ্দ ব্যবহার করে যেমন সেগুলি সেই অনুযায়ী বৃদ্ধি পায় এবং সঙ্কুচিত হয়। তারা নোড একটি সংগ্রহ হিসাবে সংজ্ঞায়িত করা হয়. এখানে, নোডের দুটি অংশ রয়েছে, যা হল ডেটা এবং লিঙ্ক। ডেটা, লিঙ্ক এবং লিঙ্কযুক্ত তালিকার উপস্থাপনা নীচে দেওয়া হল -

সি ভাষা ব্যবহার করে লিঙ্ক তালিকায় উপাদান সন্নিবেশ ব্যাখ্যা করুন

লিঙ্ক করা তালিকার অপারেশনগুলি

সি ল্যাঙ্গুয়েজে লিংকড লিস্টে তিন ধরনের ক্রিয়াকলাপ রয়েছে, যা নিম্নরূপ −

  • সন্নিবেশ
  • মোছা
  • ট্র্যাভার্সিং

সন্নিবেশ

একটি উদাহরণ বিবেচনা করুন, যেখানে আমরা নোড 2 এবং নোড 3 এর মধ্যে নোড 5 সন্নিবেশ করি।

সি ভাষা ব্যবহার করে লিঙ্ক তালিকায় উপাদান সন্নিবেশ ব্যাখ্যা করুন

এখন, শুরুতে নোড 5 সন্নিবেশ করুন।

সি ভাষা ব্যবহার করে লিঙ্ক তালিকায় উপাদান সন্নিবেশ ব্যাখ্যা করুন

শেষে নোড 5 ঢোকান।

সি ভাষা ব্যবহার করে লিঙ্ক তালিকায় উপাদান সন্নিবেশ ব্যাখ্যা করুন

শেষে নোড 5 ঢোকান।

সি ভাষা ব্যবহার করে লিঙ্ক তালিকায় উপাদান সন্নিবেশ ব্যাখ্যা করুন

দ্রষ্টব্য:

  • নোডের নাম না থাকায় আমরা নোড 2 এর আগে নোড 5 সন্নিবেশ করাতে পারি না।
  • আমরা 2 এর আগে নোড 5 সন্নিবেশ করতে পারি, যদি এর অবস্থান দেওয়া হয়।

প্রোগ্রাম

লিংকড লিস্ট -

এ একটি এলিমেন্ট সন্নিবেশ করার জন্য সি প্রোগ্রামটি নিচে দেওয়া হল
#include <stdio.h>
#include <stdlib.h>
struct node{
   int val;
   struct node *next;
};
void print_list(struct node *head){
   printf("H->");
   while(head){
      printf("%d->", head->val);
      head = head->next;
   }
   printf("……\n\n");
}
void insert_front(struct node **head, int value){
   struct node * new_node = NULL;
   new_node = (struct node *)malloc(sizeof(struct node));
   if (new_node == NULL){
      printf(" Out of memory");
   }
   new_node->val = value;
   new_node->next = *head;
   *head = new_node;
}
void insert_end(struct node **head, int value){
   struct node * new_node = NULL;
   struct node * last = NULL;
   new_node = (struct node *)malloc(sizeof(struct node));
   if (new_node == NULL){
      printf(" Out of memory");
   }
   new_node->val = value;
   new_node->next = NULL;
   if( *head == NULL){
      *head = new_node;
      return;
   }
   last = *head;
   while(last->next) last = last->next;
   last->next = new_node;
}
void insert_after(struct node *head, int value, int after){
   struct node * new_node = NULL;
   struct node *tmp = head;
   while(tmp) {
      if(tmp->val == after) { /*found the node*/
         new_node = (struct node *)malloc(sizeof(struct node));
         if (new_node == NULL) {
            printf("Out of memory");
         }
         new_node->val = value;
         new_node->next = tmp->next;
         tmp->next = new_node;
         return;
      }
      tmp = tmp->next;
   }
}
void insert_before(struct node **head, int value, int before){
   struct node * new_node = NULL;
   struct node * tmp = *head;
   new_node = (struct node *)malloc(sizeof(struct node));
   if (new_node == NULL){
      printf("Out of memory");
      return;
   }
   new_node->val = value;
   if((*head)->val == before){
      new_node->next = *head;
      *head = new_node;
      return;
   }
   while(tmp && tmp->next) {
      if(tmp->next->val == before) {
         new_node->next = tmp->next;
         tmp->next = new_node;
         return;
      }
      tmp = tmp->next;
   }
   /*Before node not found*/
   free(new_node);
}
void main(){
   int count = 0, i, val, after, before;
   struct node * head = NULL;
   printf("Enter no: of elements: ");
   scanf("%d", &count);
   for (i = 0; i < count; i++){
      printf("Enter %dth element: ", i);
      scanf("%d", &val);
      insert_front(&head, val);
   }
   printf("starting list: ");
   print_list(head);
   printf("enter front element: ");
   scanf("%d", &val);
   insert_front(&head, val);
   printf("items after insertion: ");
   print_list(head);
   printf("enter last element: ");
   scanf("%d", &val);
   insert_end(&head, val);
   printf("items after insertion: ");
   print_list(head);
   printf("Enter an ele to insert in the list: ");
   scanf("%d", &val);
   printf("Insert after: ");
   scanf("%d", &after);
   insert_after(head, val, after);
   printf("List after insertion: ");
   print_list(head);
   printf("Enter an ele to insert in the list: ");
   scanf("%d", &val);
   printf("Insert before: ");
   scanf("%d", &before);
   insert_before(&head, val, before);
   printf("List after insertion: ");
   print_list(head);
}

আউটপুট

যখন উপরের প্রোগ্রামটি কার্যকর করা হয়, তখন এটি নিম্নলিখিত ফলাফল তৈরি করে -

Enter no: of elements: 4
Enter 0th element: 1
Enter 1th element: 2
Enter 2th element: 3
Enter 3th element: 4
starting list: H->4->3->2->1->......
enter front element: 5
items after insertion: H->5->4->3->2->1->......
enter last element: 0
items after insertion: H->5->4->3->2->1->0->......
Enter an ele to insert in the list: 6
Insert after: 0
List after insertion: H->5->4->3->2->1->0->6->......
Enter an ele to insert in the list: 7
Insert before: 5
List after insertion: H->7->5->4->3->2->1->0->6->......

  1. সি ভাষায় পয়েন্টার ব্যবহার করে গাণিতিক ক্রিয়াকলাপ ব্যাখ্যা কর?

  2. সি-তে লিঙ্ক করা তালিকা ব্যবহার করে অগ্রাধিকার সারি

  3. C ভাষায় প্রদত্ত সূচীতে লিঙ্কযুক্ত তালিকার নোডগুলি মুদ্রণ করুন

  4. প্রকৃতপক্ষে সি ভাষায় বিপরীত না করে একটি লিঙ্কযুক্ত তালিকার বিপরীত মুদ্রণ করুন