Advertisement
osmangoni

dubly linked list

Feb 26th, 2020
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.62 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct Node node;
  4. struct Node
  5. {
  6.     int data;
  7.     node *pre;
  8.     node *next;
  9. };
  10. node *head=NULL;
  11. void forward_display()
  12. {
  13.     node *temp=head;
  14.     printf("FORWARD DISPLAY: \n");
  15.     while(temp!=NULL)
  16.     {
  17.         printf("%d->",temp->data);
  18.         temp=temp->next;
  19.     }
  20.     printf("\n");
  21. }
  22. void reverse_display()
  23. {
  24.     node *temp=head;
  25.     printf("REVERSE DISPLAY: \n");
  26.     while(temp->next!=NULL) temp=temp->next;
  27.     node *temp1=temp;
  28.     while(temp1!=NULL)
  29.     {
  30.         printf("%d->",temp1->data);
  31.         temp1=temp1->pre;
  32.     }
  33.     printf("\n");
  34. }
  35. node *get_node(int data)
  36. {
  37.     node *newnode=(node*)malloc(sizeof(node));
  38.     newnode->pre=NULL;
  39.     newnode->data=data;
  40.     newnode->next=NULL;
  41.     return newnode;
  42. }
  43. void first_insert(int data)
  44. {
  45.     node *newnode=get_node(data);
  46.     if(head==NULL)
  47.     {
  48.         head=newnode;
  49.         return;
  50.     }
  51.     head->pre=newnode;
  52.     newnode->next=head;
  53.     head=newnode;
  54. }
  55. void last_insert(int data)
  56. {
  57.     node *newnode=get_node(data);
  58.     if(head==NULL)
  59.     {
  60.         head=newnode;
  61.         return;
  62.     }
  63.     node *temp=head;
  64.     while(temp->next!=NULL)
  65.     {
  66.         temp=temp->next;
  67.     }
  68.     newnode->pre=temp;
  69.     temp->next=newnode;
  70. }
  71. void middle_insert(int data,int n)
  72. {
  73.     node *newnode=get_node(data);
  74.     node *temp=head;
  75.     while(temp!=NULL)
  76.     {
  77.         if(temp->data==n) break;
  78.         temp=temp->next;
  79.     }
  80.     node *temp1;
  81.     temp1=temp->next;
  82.     temp->next=newnode;
  83.     newnode->next=temp1;
  84.     newnode->pre=temp;
  85. }
  86. void delete_node(int n)
  87. {
  88.     node *temp=head,*temp1;
  89.     int i,count=0;
  90.     while(temp!=NULL)
  91.     {
  92.         count++;
  93.         if(temp->data==n) break;
  94.         temp=temp->next;
  95.     }
  96.     temp1=head;
  97.     if(count==1)
  98.     {
  99.        head=temp1->next;
  100.        head->pre=NULL;
  101.        free(temp1);
  102.        return;
  103.     }
  104.     for(i=0;i<(count-2);i++)
  105.     {
  106.         temp1=temp1->next;
  107.     }
  108.     node *temp2=temp1->next;
  109.     temp1->next=temp2->next;
  110.     temp2->pre=temp1;
  111.     free(temp2);
  112. }
  113. int main()
  114. {
  115.     first_insert(5);
  116.     first_insert(8);
  117.     first_insert(7);
  118.     first_insert(1);
  119.     forward_display();
  120.     reverse_display();
  121.     last_insert(4);
  122.     first_insert(3);
  123.     first_insert(9);
  124.     last_insert(11);
  125.     last_insert(44);
  126.     last_insert(45);
  127.     forward_display();
  128.     reverse_display();
  129.     middle_insert(6,4);
  130.     forward_display();
  131.     reverse_display();
  132.     delete_node(9);
  133.     forward_display();
  134.     reverse_display();
  135.     delete_node(45);
  136.     forward_display();
  137.     reverse_display();
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement