mihainan

Nan Mihai - Structuri de date (liste simplu inlantuite)

Mar 31st, 2014
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct Element
  5. {
  6.     int val;
  7.     struct Element* next;
  8. }Element;
  9.  
  10. typedef Element* List;
  11.  
  12. List init(int val)
  13. {
  14.     List lista;
  15.     lista = (Element *) malloc(sizeof(Element));
  16.     lista->val = val;
  17.     lista->next = NULL;
  18.     return lista;
  19. }
  20.  
  21. /*
  22. //recursiv
  23. List append(List l, int val)
  24. {
  25.     List temp, aux;
  26.     aux = l;
  27.     temp = (Element *) malloc(sizeof(Element));
  28.     temp->val = val;
  29.     temp->next = NULL;
  30.     if(aux != NULL)
  31.     {
  32.         aux=aux->next;
  33.         return append(aux, val);
  34.     }
  35.     if(aux == NULL)
  36.     {
  37.         aux->next = temp;
  38.         return l;
  39.     }
  40. }*/
  41.  
  42.  
  43.  
  44.  
  45. List append(List l, int val)
  46. {
  47.     List aux;
  48.     if(l == NULL)
  49.     {
  50.         aux = (Element *) malloc(sizeof(Element));
  51.         aux->val = val;
  52.         aux->next = NULL;
  53.         return aux;
  54.     }
  55.     else
  56.     {
  57.         if(l->next==NULL)
  58.         {
  59.             l->next=init(val);
  60.             return l;
  61.         }
  62.         else
  63.         {
  64.             l->next = append(l->next, val);
  65.             return l;
  66.         }
  67.     }
  68. }
  69.  
  70.  
  71. //recursiv
  72. /*void print(List l)
  73. {
  74.     if(l != NULL)
  75.     {
  76.         printf("%d ", l->val);
  77.         l = l->next;
  78.         print(l);
  79.     }
  80.     else
  81.     {
  82.         printf("\n");
  83.     }
  84. }*/
  85.  
  86. //iterativ
  87. void print(List l)
  88. {
  89.     while(l != NULL)
  90.     {
  91.         printf("%d ", l->val);
  92.         l = l->next;
  93.     }
  94.     printf("\n");
  95. }
  96.  
  97. int len(List l)
  98. {
  99.     if(l == NULL)
  100.         return 0;
  101.     else
  102.     {
  103.         l=l->next;
  104.         return 1+len(l);
  105.     }
  106. }
  107.  
  108. List prepend(List l, int val)
  109. {
  110.     List temp;
  111.     temp = (Element *) malloc(sizeof(Element));
  112.     temp->val = val;
  113.     temp->next = l;
  114.     l = temp;
  115.     return l;
  116. }
  117.  
  118. List delLast(List l)
  119. {
  120.     List temp;
  121.     temp = l;
  122.     while(temp->next->next != NULL)
  123.     {
  124.         temp = temp->next;
  125.     }
  126.     temp->next = NULL;
  127.     return l;
  128. }
  129.  
  130. List delFirst(List l)
  131. {
  132.     if(l != NULL)
  133.     {
  134.         l=l->next;
  135.     }
  136.     else
  137.     {
  138.         l = NULL;
  139.     }
  140.     return l;
  141. }
  142.  
  143. int ultimulElement(List l)
  144. {
  145.     int ultim;
  146.     while(l->next != NULL)
  147.     {
  148.         l = l->next;
  149.     }
  150.     ultim = l->val;
  151.     return ultim;
  152. }
  153.  
  154. List insert(List l, int val)
  155. {
  156.     int ult;
  157.     Element *p1, *p2, *p;
  158.     if(l == NULL)
  159.     {
  160.         l = (Element *) malloc(sizeof(Element));
  161.         l->val = val;
  162.         l->next = NULL;
  163.         return l;
  164.     }
  165.     else
  166.     {
  167.         ult = ultimulElement(l);
  168.         if(ult <= val)
  169.         {
  170.             l = append(l, val);
  171.         }
  172.         else
  173.         {
  174.    
  175.                 p1 = NULL;
  176.                 p2 = l;  
  177.             for( ; p2->val < val; p2 = p2->next)
  178.                 {
  179.                     p1 = p2;
  180.                 if(p2->next->next == NULL)
  181.                     {
  182.                             p2 = p2->next;  
  183.                     break;
  184.                     }
  185.                 }
  186.                 p = (Element *)malloc(sizeof(Element));
  187.             p->val = val;
  188.             p->next = p2;
  189.             if (p1 == NULL)
  190.                         l = p;
  191.             else
  192.                     p1->next = p;
  193.             return l;
  194.         }
  195.     }
  196. }
  197.  
  198.  
  199.  
  200. List freeList(List l)
  201. {
  202.     List tmp;
  203.  
  204.     while (l != NULL)
  205.         {
  206.            tmp = l;
  207.            l = l->next;
  208.            free(tmp);
  209.         }
  210.     return l;
  211. }
  212.  
  213. int main()
  214. {
  215.     int dim, ultim;
  216.     List l;
  217.     l = NULL;
  218.     int n;
  219.     l = init(-9);
  220.     print(l);
  221.     scanf("%d", &n);
  222.     while (n!= 0) {
  223.         l = prepend(l, n);
  224.         scanf("%d", &n);
  225.     }
  226.     print(l);
  227.     dim = len(l);
  228.     printf("Dimensiunea listei este %d!\n", dim);
  229.     printf("Eliminare ultimul!\n");
  230.     l = delLast(l);
  231.     print(l);
  232.     printf("Eliminare primul!\n");
  233.     l = delFirst(l);
  234.     print(l);
  235.     printf("Adaugare la sfarsit!\n");
  236.     l = append(l, 10);
  237.     print(l);
  238.     printf("Ultimul element!\n");
  239.     ultim = ultimulElement(l);
  240.     printf("Ultimul element este %d!\n", ultim);
  241.     printf("Inserare element!\n");
  242.     l = insert(l, 55);
  243.     print(l);
  244.     return 0;
  245. }
Advertisement
Add Comment
Please, Sign In to add comment