Advertisement
Nusrat_Ullah

Double link list

Oct 29th, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.84 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct Node{
  4.     int q;
  5.     Node *pre;
  6.     Node *re;
  7. }node;
  8. node *lead;
  9. void atend(int g)
  10. {
  11.     node *sub,*an;
  12.     an=lead;
  13.     if(lead==NULL){
  14.         lead=(node*)malloc(sizeof(node));
  15.         lead->q=g;
  16.         lead->re=NULL;
  17.         lead->pre=NULL;
  18.     }
  19.     else{
  20.         sub=(node*)malloc(sizeof(node));
  21.         sub->q=g;
  22.         sub->re=NULL;
  23.         while(an->re!=NULL){
  24.             an=an->re;
  25.         }
  26.         sub->pre=an;
  27.         an->re=sub;
  28.     }
  29.     return;
  30. }
  31. void atfirst(int a)
  32. {
  33.     if(lead==NULL){
  34.         lead=(node*)malloc(sizeof(node));
  35.         lead->q=a;
  36.         lead->re=NULL;
  37.         lead->pre=NULL;
  38.         return;
  39.     }
  40.     node *sub;
  41.     sub=(node*)malloc(sizeof(node));
  42.     sub->q=a;
  43.     lead->pre=sub;
  44.     sub->pre=NULL;
  45.     sub->re=lead;
  46.     lead=sub;
  47.     return;
  48. }
  49. void atn(int v,int p)
  50. {
  51.     node *sub,*end=lead;
  52.     if(lead==NULL){
  53.         printf("List is empty. Create list by pressing 1 or 2.\n");
  54.         return;
  55.     }
  56.     sub=(node*)malloc(sizeof(node));
  57.     sub->q=v;
  58.     if(p==1){
  59.         lead->pre=sub;
  60.         sub->re=lead;
  61.         sub->pre=NULL;
  62.         lead=sub;
  63.         return;
  64.     }
  65.     p-=2;
  66.     while(p--){
  67.         end=end->re;
  68.         if(end->re==NULL)break;
  69.     }
  70.     sub->re=end->re;
  71.     sub->pre=end->re->pre;
  72.     end->re->pre=sub;
  73.     end->re=sub;
  74.     return;
  75. }
  76. void ataftern(int v,int p)
  77. {
  78.     node *sub,*end=lead;
  79.     if(lead==NULL){
  80.         printf("List is empty. Create list by pressing 1 or 2.\n");
  81.         return;
  82.     }
  83.     sub=(node*)malloc(sizeof(node));
  84.     sub->q=v;
  85.     if(p==1){
  86.         sub->re=end->re;
  87.         sub->pre=end->re->pre;
  88.         end->re->pre=sub;
  89.         end->re=sub;
  90.         return;
  91.     }
  92.     p-=1;
  93.     while(p--){
  94.         end=end->re;
  95.         if(end->re==NULL)break;
  96.     }
  97.     sub->re=end->re;
  98.     sub->pre=end->re->pre;
  99.     end->re->pre=sub;
  100.     end->re=sub;
  101.     return;
  102. }
  103. void eran(int d)
  104. {
  105.     node *nn,*sub=lead;
  106.     if(lead==NULL)return;
  107.     if(d==1){
  108.         nn=lead;
  109.         lead=nn->re;
  110.         lead->pre=NULL;
  111.         free(nn);
  112.         return;
  113.     }
  114.     d-=2;
  115.     while(d--){
  116.         if(sub->re==NULL){
  117.             printf("Not found.\n");
  118.             return;
  119.         }
  120.         sub=sub->re;
  121.     }
  122.     nn=sub->re;
  123.     sub->re=nn->re;
  124.     nn->re->pre=nn->pre;
  125.     free(nn);
  126.     return;
  127. }
  128. int lookfor(int z)
  129. {
  130.     int nt=1;
  131.     node *sub=lead;
  132.     while(sub->q!=z){
  133.         nt++;
  134.         if(sub->re==NULL)return -1;
  135.         sub=sub->re;
  136.     }
  137.     return nt;
  138. }
  139. void eravl(int z)
  140. {
  141.     node *nn,*sub=lead;
  142.     int x=lookfor(z);
  143.     if(x==-1){
  144.         printf("Not found\n");
  145.         return;
  146.     }
  147.     if(x==1){
  148.         nn=lead;
  149.         lead=nn->re;
  150.         lead->pre=NULL;
  151.         free(nn);
  152.         return;
  153.     }
  154.     x-=2;
  155.     while(x--){
  156.         sub=sub->re;
  157.     }
  158.     nn=sub->re;
  159.     sub->re=nn->re;
  160.     nn->re->pre=nn->pre;
  161.     free(nn);
  162.     return;
  163. }
  164. void listprint()
  165. {
  166.     node *sub,*rev;
  167.     sub=lead;
  168.     while(sub!=NULL){
  169.         printf("%d ",sub->q);
  170.         sub=sub->re;
  171.     }
  172.  
  173.     return;
  174. }
  175. void revlistprint()
  176. {
  177.     node *sub,*rev;
  178.     sub=lead;
  179.     while(sub->re!=NULL){
  180.         sub=sub->re;
  181.     }
  182.     rev=sub;
  183.     while(rev!=NULL){
  184.         printf("%d ",rev->q);
  185.         rev=rev->pre;
  186.     }
  187.     return;
  188. }
  189. int main()
  190. {
  191.     lead=NULL;
  192.     int z,w,r;
  193.     printf("1.Value at end\n");
  194.     printf("2.Value at first\n");
  195.     printf("3.Value at n-th place\n");
  196.     printf("4.Value at after n-th place\n");
  197.     printf("5.Delete n-th node\n");
  198.     printf("6.Delete a value\n");
  199.     printf("7.Find a value\n");
  200.     printf("8.Print the list\n");
  201.     printf("9.Print the reverse list\n");
  202.     while(scanf("%d",&z)!=EOF){
  203.         switch(z){
  204.         case 1:
  205.             scanf("%d",&w);
  206.             atend(w);
  207.             break;
  208.         case 2:
  209.             scanf("%d",&w);
  210.             atfirst(w);
  211.             break;
  212.         case 3:
  213.             printf("Value > ");
  214.             scanf("%d",&r);
  215.             printf("Which position > ");
  216.             scanf("%d",&w);
  217.             atn(r,w);
  218.             break;
  219.         case 4:
  220.             printf("Value > ");
  221.             scanf("%d",&r);
  222.             printf("After which position > ");
  223.             scanf("%d",&w);
  224.             ataftern(r,w);
  225.             break;
  226.         case 5:
  227.             scanf("%d",&r);
  228.             eran(r);
  229.             break;
  230.         case 6:
  231.             scanf("%d",&r);
  232.             eravl(r);
  233.             break;
  234.         case 7:
  235.             scanf("%d",&r);
  236.             printf("Position %d\n",lookfor(r));
  237.             break;
  238.         case 8:
  239.             listprint();
  240.             printf("\n");
  241.             break;
  242.         case 9:
  243.             revlistprint();
  244.             printf("\n");
  245.             break;
  246.         }
  247.     }
  248.     return 0;
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement