mihainan

Nan Mihai - Lab SD

Mar 18th, 2014
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.24 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct Element
  5. {
  6.     struct Element* prev;
  7.     int data;
  8.     struct Element* next;
  9. }Element;
  10.  
  11. typedef struct Element* List;
  12.  
  13. List init(int data)
  14. {
  15.     List nou;
  16.     nou = (Element *) malloc(sizeof(Element));
  17.     nou->prev = NULL;
  18.     nou->data = data;
  19.     nou->next = NULL;
  20.     return nou;
  21. }
  22.  
  23. void printList(List l)
  24. {
  25.     if(l == NULL)
  26.     {
  27.         printf("Lista este vida!");
  28.     }
  29.     else
  30.     {
  31.         while(l != NULL)
  32.         {
  33.             printf("%d ", l->data);
  34.             l = l->next;
  35.         }
  36.     }
  37.     printf("\n");
  38. }
  39.  
  40. List addFirst(List l, int data)
  41. {
  42.     List nou;
  43.     if(l != NULL)
  44.     {
  45.         nou = (Element *) malloc(sizeof(Element));
  46.         nou->prev = NULL;
  47.         nou->next = l;
  48.         nou->data = data;
  49.         l = nou;
  50.     }
  51.     else
  52.     {
  53.         l = (Element *) malloc(sizeof(Element));
  54.         l->prev = NULL;
  55.         l->data = data;
  56.         l->next = NULL;
  57.         //Sau folosind functia init
  58.     }
  59.     return l;
  60. }
  61.  
  62. List addLast(List l, int val)
  63. {
  64.     List nou, temp;
  65.     if (l==NULL)
  66.     {
  67.         l->prev = NULL;
  68.         l->data = val;
  69.         l->next = NULL;
  70.     }
  71.     else
  72.     {
  73.         nou=(Element *)malloc(sizeof(Element));
  74.         temp=l;
  75.         while(temp->next!=NULL)
  76.             temp=temp->next;
  77.         nou->data=val;
  78.         nou->next=NULL;
  79.         nou->prev=temp;
  80.         temp->next=nou;
  81.     }
  82.     return l;
  83. }
  84.  
  85. List freeList(List l)
  86. {
  87.     List temp;
  88.     if(l == NULL)
  89.     {
  90.         return NULL;
  91.     }
  92.     else
  93.     {  
  94.         temp = l;
  95.         while(l != NULL)
  96.         {
  97.             temp = l;
  98.             l = l->next;
  99.             free(temp);
  100.         }
  101.         return NULL;
  102.     }
  103. }
  104.  
  105. List delFirst(List l)
  106. {
  107.     if(l == NULL)
  108.         return NULL;
  109.     else
  110.     {
  111.         List nou;
  112.         nou = l->next;
  113.         free(l);
  114.         l = nou;
  115.         if(l != NULL)
  116.         {
  117.             l->prev = NULL;
  118.         }
  119.     }
  120.     return l;
  121. }
  122.  
  123. List delLast(List l)
  124. {
  125.     List temp, tmp;
  126.     tmp = l;
  127.     while(tmp->next != NULL)
  128.     {
  129.         tmp = tmp->next;
  130.     }
  131.     tmp->prev->next = NULL;
  132.     free(tmp->next);
  133.     return l;
  134. }
  135.  
  136.  
  137. List delODD(List l)
  138. {
  139.     List temp, tmp, x;
  140.     tmp = l;
  141.     if(l == NULL)
  142.     {
  143.         return NULL;
  144.     }
  145.     else
  146.     {
  147.         while(tmp != NULL)
  148.         {
  149.             if(tmp->data%2 == 1)
  150.             {
  151.                 if(tmp->prev == NULL)
  152.                 {
  153.                     tmp = delFirst(tmp);
  154.                 }
  155.                 else
  156.                 if(tmp->next == NULL)
  157.                 {
  158.                     tmp = delLast(tmp);
  159.                 }
  160.                 else
  161.                 {
  162.                     tmp->next->prev = tmp->prev;
  163.                     tmp->prev->next = tmp->next;
  164.                     free(tmp);
  165.                 }
  166.             }
  167.             tmp = tmp->next;
  168.         }
  169.     }
  170.     return l;
  171. }
  172.  
  173. List insertMean(List l)
  174. {
  175.     List nou, temp, x, p;
  176.     p = l;
  177.     int media; 
  178.     temp = l;
  179.     if(l == NULL)
  180.         return NULL;
  181.     else
  182.     if(l->next == NULL)
  183.         return l;
  184.     else
  185.         while(temp->next != NULL)
  186.         {
  187.             media = (temp->data + temp->next->data) / 2;
  188.             x = init(media);
  189.             x->next = temp->next;
  190.             x->prev = temp;
  191.             temp->next->prev = x;
  192.             temp->next = x;
  193.             temp = temp->next->next;
  194.         }
  195.     return p;
  196. }
  197.  
  198. /*
  199. List reverse(List list)
  200. {
  201.     List m;
  202.  
  203.     if(list == NULL && list->next == NULL)
  204.         return list;
  205.  
  206.     m = reverse( list->next );
  207.     list->next->next = list;
  208.     list->next = NULL;
  209.  
  210.     return m;
  211. }
  212. */
  213.  
  214. int ultimul_element(List l)
  215. {
  216.     while(l != NULL)
  217.     {
  218.         l = l->next;
  219.     }
  220.     return l->data;
  221. }
  222.  
  223. List reverse(List l)
  224. {
  225.     int ultim, ok;
  226.     List tmp;
  227.     ok = 0;
  228.     if(l == NULL)
  229.         return NULL;
  230.     else
  231.     {
  232.         while(l != NULL)
  233.         {
  234.             if(ok == 0)
  235.             {
  236.                 ultim = ultimul_element(l);
  237.                 tmp = (Element *) malloc(sizeof(Element));
  238.                 tmp->prev = NULL;
  239.                 tmp->next = NULL;
  240.                 tmp->data = ultim;
  241.                 l = delLast(l);
  242.             }
  243.             else
  244.             {
  245.                 ultim = ultimul_element(l);
  246.                 tmp = addLast(tmp, ultim);
  247.                 l = delLast(l);
  248.             }
  249.             ok == 1;
  250.         }
  251.         return tmp;
  252.     }
  253. }
  254.  
  255.  
  256. /*void swap(List *p, List *q) {
  257.     List temp = *p;
  258.     *p = *q;
  259.     *q = temp;
  260. }
  261.  
  262. List reverse(List l) {
  263.     List *p;
  264.     if (p == NULL)
  265.         return p;
  266.     swap(&(p->next), &(p->prev));
  267.         if (p->prev == NULL)
  268.         return p;
  269.         return reverse(p->prev);
  270. } */
  271.  
  272. int main()
  273. {
  274.     List l;
  275.     l = init(6);
  276.     printList(l);
  277.     printf("Adaugare la inceput\n");
  278.     l = addFirst(l, 10);
  279.     printList(l);
  280.     printf("Adaugare la sfarsit!\n");
  281.     l = addLast(l, 11);
  282.     l = addLast(l, 50);
  283.     l = addLast(l, 199);
  284.     l = addLast(l, 24);
  285.     l = addLast(l, 23);
  286.     l = addLast(l, 26);
  287.     l = addLast(l, 27);
  288.     printList(l);
  289.     printf("Sterge elemente impare din lista\n");
  290.     l = delODD(l);
  291.     printList(l);
  292.     printf("Inserare medie\n");
  293.     l = insertMean(l);
  294.     printList(l);
  295.     printf("Golire memorie uzitata pentru lista!\n");
  296.     l = freeList(l);
  297.     printList(l);
  298.     return 0;
  299. }
Advertisement
Add Comment
Please, Sign In to add comment