Circular header linked list হতে একটি node বাদ দেওয়ার পদ্ধতি
সমস্যাঃ একটি node (যার data মান x) header linked list হতে delete (বাদ) দিতে হবে।
সমাধান:প্রথমে আমাকে linked list এর x মান বিশিষ্ট node টি খুঁজে বের করতে হবে। ধরি, LOC pointer টি নির্দিষ্ট node কে point করে থাকবে আর LOCP নির্দিষ্ট node এর পূরবর্তী node কে point করে থাকবে। x মান বিশিষ্ট যদি linked list এ না থাকে তাহলে “Not Found” দেখাবে।
শর্ত-১ linked list এ কোন node না থাকে, অর্থাৎ head←∧, তখন “Underflow/Empty” দেখাবে।
শর্ত-২ যদি head কে delete করতে হলে অর্থাৎ LOC←head or head↑.INFO = x
তাহলে instruction হবে,
head← head↑.LINK
tail↑.LINK←head
শর্ত-৩ নির্দিষ্ট node (যার data মান x) খুঁজে পাওয়া যায় তাহলে LOC≠head
LOC pointer টি নির্দিষ্ট node কে point করে থাকবে আর LOCP নির্দিষ্ট node এর পূরবর্তী node কে point করে থাকবে। তাহলে instruction হবে,
LOCP↑.LINK ← LOC↑.LINKযদি LOC tail node কে point করে থাকে তাহলে
tail←LOCP
শর্ত-৪ যদি x মান বিশিষ্ট কোন node পাওয়া না যায় অর্থাৎ LOC=head, তাহলে “Not Found” দেখাবে।
Algorithm:
This algorithm delete a node from a linked list (head pointer) which data field is x.Flow Chart:
1. If head = ∧, then: [CASE-I]
Write: Empty and exit.
2. if head↑.INFO = x, then: [CASE-II]
head← head↑.LINK, tail↑.LINK←head and exit.
3. LOC←head↑.LINK and LOCP ← head
4. Repeat step 5 while LOC≠head and LOC↑.INFO≠x
5. LOCP←LOC and LOC←LOC↑.LINK
6. IF LOC≠head then: [CASE-III]
LOCP↑.LINK←LOC↑.LINK
If LOC=tail then: tail←LOCP
ELSE: [CASE-IV]
Write: Not Found
7. Exit.
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #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,*LOC=NULL,*LOCP=NULL; int i,n=5,x; for(i=1;i<=n;i++){ q = (struct node *)malloc(sizeof(struct node)); q->LINK = NULL; q->INFO = i; if(p==NULL) head = q; else p->LINK = q; p=q; } p->LINK=head; tail=p; /*INSERTION (Successor)*/ printf("Insert the value of target node:"); scanf("%d",&x); q = (struct node *)malloc(sizeof(struct node)); q->LINK = NULL; q->INFO = 10; if(head==NULL){ printf("Empty\n"); } else if (head->INFO==x){ head = head->LINK; tail->LINK=head; } else{ LOCP=head;LOC=head->LINK; while(LOC->LINK!=head && LOC->INFO!=x){ LOCP=LOC; LOC=LOC->LINK; } if(LOC!=head){ LOCP->LINK=LOC->LINK; if(LOC==tail) tail=LOCP; } else printf("Not Found\n"); } /*Traverse the CHLL*/ p=head; do{ printf("%d ",p->INFO); p=p->LINK; }while(p!=head); return 0; } |
No comments:
Post a Comment