Data Structure: Linked List-Part 5

Aug 18, 2016

Circular Header linked list 
Header linked list এর শেষ node এর link এ null value থাকে, এখন সেই শেষ node এর link এ প্রথম node এর address থাকলে সেই header linked list কে বলে circular header linked list. একটি tail pointer শেষের node কে point করে থাকবে।
সমস্যাঃ আমরা একটা circular header linked list তৈরি করতে চাই যেখানে ব্যবহারকারি (user) বলে দিবে কতটা Node থাকবে আর তাদের INFO কি কি হবে। 
সমাধান: আমরা এর আগে যেভাবে header linked list তৈরি করেছি সেইভাবেই করব, শুধু algorithm শেষ হওয়ার আগে কিছু instruction বেশি লেখব, তা হচ্ছেঃ
p↑.link←head
tail←p
এখানে p pointer টা শেষ node কে point করে আছে।

Algorithm:
This algorithm Create a circular link list where head pointer point the first node of the header linked list.
1. Read n
2. p←∧ and i ← 1
3. Repeat step 4 to 8 while i≤n
4.      New_Node(q);
5.      Read: x;
6.      q↑.INFO←x;
7.      If p=∧ then: head←q
        Else: p↑.LINK←q
8.      p←q;
9. p↑.LINK←head
10. tail←p.
11. Exit
FLOW CHART (Create a Circular Header Linked List):
সমস্যাঃ আমরা এবার circular header linked list traverse করব, আর node এর data print করব।  
Algorithm:
This algorithm traverses a circular header link list.
1. p←head
2. Write: p↑.INFO
3. p←p↑.LINK
4. Repeat step 2 and 3 while p≠head
5. Exit
Flow Chart (Traverse A Circular Linked List)

Program:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<stdio.h>
#include<stdlib.h>
struct node{
    int INFO;
    struct node *LINK;
};
int main(){
  struct node *q=NULL,*p=NULL,*head=NULL,*tail=NULL;
  int i,n,x;

  printf("Enter Number of Node: ");
  scanf("%d",&n);

  for(i=1;i<=n;i++){
    printf("Enter a value:");
    scanf("%d",&x);

    q = (struct node *)malloc(sizeof(struct node));
    q->LINK = NULL;
    q->INFO = x;

    if(p==NULL){
        head = q;
        printf("Head: %x\n",head);
    }
    else{
      p->LINK = q;
      printf("Current: %x\t INFO:%d Next: %x\n",p,p->INFO,p->LINK);
    }
    p=q;
    printf("Next: %x\t INFO:%d \n",p,p->INFO);
  }
  p->LINK=head;
  tail=p;
  /*Traverse*/
  p=head;
  if(p==NULL) printf("Empty");
  else 
   do{
     printf("%d ",p->INFO);
     p=p->LINK;
   }while(p!=head); 
  return 0;
}

No comments:

Post a Comment