Guest User

Untitled

a guest
May 23rd, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.33 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct slistEl
  5. {
  6.     struct  slistEl * next;
  7.     int data;
  8. };
  9.  
  10.  
  11. unsigned l_size(struct slistEl * p)
  12. {
  13.     int c = 0;
  14.  
  15.     while (p)
  16.     {
  17.         c++;    
  18.         p = p->next;
  19.     }
  20.     return c;
  21. }
  22.  
  23.  
  24. void l_printl(struct slistEl * p)
  25. {
  26.     int i;  
  27.  
  28.     printf("Number of elements : %d", l_size(p));
  29.  
  30.  
  31.  
  32.     for (i = 1; p; p = p->next)
  33.         printf("Element #%d  data %d\n", i++, p->data);
  34. }
  35.  
  36.  
  37. void l_push_front(struct slistEl **  head, int v)
  38. {
  39.     struct slistEl * p;
  40.  
  41.     p = (struct slistEl*) malloc(sizeof(struct slistEl));  
  42.     p->data = v;  
  43.     p->next = *head;
  44.     *head = p;
  45. }
  46.  
  47.  
  48. void l_push_back(struct slistEl ** head, int v)
  49. {
  50.     struct slistEl *p, *e;
  51.  
  52.     e = (struct slistEl*) malloc(sizeof(struct slistEl));  
  53.     e->next = NULL;  
  54.     e->data = v;
  55.     p = *head;
  56.     if (p)
  57.     {
  58.         while (p->next) p = p->next;
  59.         p->next = e;
  60.     }
  61.     else *head = e;
  62. }
  63.  
  64.  
  65. void l_insert_before(struct slistEl *  head, struct slistEl * e, int v)
  66. {
  67.     struct slistEl * p = head;
  68.  
  69.     if (p == e) l_push_front(&head, v);
  70.     else
  71.     {
  72.         while (p->next != e) p = p->next;
  73.         p->next = (struct slistEl*) malloc(sizeof(struct slistEl));
  74.         p->next->next = e;
  75.         p->next->data = v;
  76.     }
  77. }
  78.  
  79.  
  80. void l_insert_after(struct slistEl * e, int v)
  81. {
  82.     struct slistEl * p = (struct slistEl*) malloc(sizeof(struct slistEl));
  83.  
  84.     p->next = e->next;
  85.     p->data = v;
  86.     e->next = p;
  87. }
  88.  
  89.  
  90. void l_pop_front(struct slistEl **  head)
  91. {
  92.     struct  slistEl * p = *head;
  93.  
  94.     if (p)
  95.     {
  96.         *head = p->next;  
  97.         free(p);        
  98.     }
  99. }
  100.  
  101.  
  102. void l_pop_back(struct slistEl *  head)
  103. {
  104.     struct  slistEl * p = head;
  105.  
  106.     if (p)
  107.     {
  108.         if (p->next)
  109.         {
  110.             while (p->next->next) p = p->next;
  111.             free(p->next);
  112.             p->next = NULL;
  113.         }
  114.         else
  115.         {
  116.             head = NULL;
  117.             free(p);
  118.            
  119.         }
  120.     }
  121. }
  122.  
  123.  
  124. void l_remove(struct slistEl * head, struct slistEl * e)
  125. {
  126.     struct slistEl * p;
  127.  
  128.     if (head == e) l_pop_front(&head);
  129.     else
  130.     {
  131.         p = head;
  132.         while (p->next != e) p = p->next;
  133.         p->next = e->next;
  134.         free(e);
  135.     }
  136. }
  137.  
  138. int main()
  139. {
  140.    
  141.     struct slistEl * L = NULL;
  142.     struct slistEl * e;        
  143.     int i;
  144.     for (i = 1; i <= 7; i++) l_push_back(&L, i);
  145.     l_printl(L);
  146.     e = L;
  147.     for (i = 1; i <= 3; i++) e = e->next;
  148.  
  149.     l_insert_before(L, e, 8);
  150.     l_insert_after(e, 5);
  151.     l_printl(L);
  152.     l_remove(L, e);
  153.     l_printl(L);
  154.     l_pop_front(&L);
  155.     l_printl(L);
  156.     l_pop_back(L);
  157.     l_printl(L);
  158. }
Advertisement
Add Comment
Please, Sign In to add comment