Advertisement
Guest User

mojErweiterung

a guest
Nov 23rd, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.49 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. typedef struct Element_s
  6. {
  7.     char name[256];
  8.     //long duration; //Sekunden;
  9.     char interpreteur[256];
  10.     struct Element_s *next;
  11.     struct Element_s *prev;
  12. } Element_t;
  13.  
  14. void read_in(Element_t *item);
  15. Element_t *allocate();
  16. Element_t *push_back(Element_t *list);
  17. Element_t *find_end(Element_t *list);
  18. void cleanup_list(Element_t **list);
  19. void print_element(Element_t *element);
  20. void print_list(Element_t *list);
  21. void print_list_reverse(Element_t *list);
  22. Element_t *elementAt(Element_t *list, long index);
  23. long elementsCount(Element_t *list);
  24. Element_t *insertFirst(Element_t *list);
  25. Element_t *deleteAt(Element_t *list, long index);
  26. void print_list_random(Element_t *list);
  27.  
  28.  
  29. int main()
  30. {
  31.     long i, j;
  32.     Element_t *liste = 0;
  33.  
  34.     liste = push_back(liste);
  35.     liste = push_back(liste);
  36.     liste = push_back(liste);
  37.  
  38.     printf("\nListing: ");
  39.     print_list(liste);
  40.  
  41.     printf("\n\nUmgekehrte Reihenfolge: \n");
  42.     print_list_reverse(liste);
  43.  
  44.     printf("\nPrint Element at: ");
  45.     scanf("%ld", &i);
  46.     print_element(elementAt(liste, i));
  47.  
  48.     printf("\nElements count : %ld\n", elementsCount(liste));
  49.  
  50.     while(getchar() != '\n');
  51.     printf("Insert a song on the first place: -> \n");
  52.     liste = insertFirst(liste);
  53.     print_list(liste);
  54.  
  55.     printf("\nDelete Element at: ");
  56.     scanf("%ld", &j);
  57.     liste = deleteAt(liste, j);
  58.     print_list(liste);
  59.  
  60.     printf("\n---------Random list:---------");
  61.     print_list_random(liste);
  62.  
  63.     cleanup_list(&liste);
  64.  
  65.     return 0;
  66. }
  67.  
  68.  
  69. void read_in(Element_t *item)
  70. {
  71.     printf("Name: ");
  72.     fgets(item->name, 256, stdin);
  73.  
  74.     printf("Interpreteur: ");
  75.     fgets(item->interpreteur, 256, stdin);
  76.     //while(getchar() != '\n');
  77.  
  78. }
  79.  
  80. Element_t *allocate()
  81. {
  82.     Element_t *element = malloc(sizeof(Element_t));
  83.  
  84.     if(element == 0)
  85.     {
  86.         fprintf(stderr, "Error! No memory available!");
  87.         //return 0;
  88.     }
  89.     else
  90.     {
  91.         read_in(element);
  92.         element->prev = 0;
  93.         element->next = 0;
  94.     }
  95.     return element;
  96. }
  97.  
  98. Element_t *find_end(Element_t *list)
  99. {
  100.         while(list->next != 0)
  101.             list = list->next;
  102.         return list;
  103. }
  104.  
  105. Element_t *push_back(Element_t *list)
  106. {
  107.     Element_t *element = allocate();
  108.  
  109.     if (element == 0)
  110.     {
  111.         fprintf(stderr, "Error: No memory allocated for push_back!\n");
  112.         return list;
  113.     }
  114.  
  115.     if(list != 0)
  116.     {
  117.         Element_t *end = find_end(list);
  118.         element->prev = end;
  119.         end->next = element;
  120.     }
  121.     else
  122.     {
  123.         list = element;
  124.     }
  125.     return list;
  126. }
  127.  
  128. void cleanup_list(Element_t **list)
  129. {
  130.     Element_t *s = *list;
  131.     Element_t *t = s;
  132.  
  133.     while(t != 0)
  134.     {
  135.         t = t->next;
  136.         free(s);
  137.         s = t;
  138.     }
  139.     printf("\nMemory freed.\n");
  140. }
  141.  
  142. void print_element(Element_t *element)
  143. {
  144.     if(element != 0)
  145.     {
  146.     printf("\nName: %s", element->name);
  147.     printf("Interpreteur: %s", element->interpreteur);
  148.     }
  149.     else
  150.     {printf("\nDie Stelle ist leer!");
  151.     exit(-1);}
  152. }
  153.  
  154. void print_list(Element_t *list)
  155. {
  156.     long i=0;
  157.     while(list != 0)
  158.     {
  159.         i++;
  160.         printf("\nSong %ld .", i);
  161.         print_element(list);
  162.         list = list->next;
  163.     }
  164.  
  165. }
  166.  
  167. void print_list_reverse(Element_t *list)
  168. {
  169.    /* if(list != 0)
  170.     {
  171.         print_list_reverse(list->next);
  172.         print_element(list);
  173.     }
  174.   */long i = 1;
  175.     list = find_end(list);
  176.     while (list != 0)
  177.     {
  178.         printf("\nSong %ld .", i);
  179.         printf("\nName: %s", list->name);
  180.         printf("Interpreteur: %s", list->interpreteur);
  181.         list = list->prev;
  182.         i++;
  183.     }
  184. }
  185.  
  186. Element_t *elementAt(Element_t *list, long index)
  187. {
  188.     if(list == 0)
  189.     {
  190.         printf("\tSong does not exist.\n");
  191.         return 0;
  192.     }
  193.  
  194.     long i = 0;
  195.  
  196.     while (list != 0)
  197.     {
  198.         i++;
  199.         if (index == i)
  200.             return list;
  201.         else
  202.         list = list->next;
  203.     }
  204.     //return list;
  205. }
  206.  
  207. long elementsCount(Element_t *list)
  208. {
  209.     long i = 0;
  210.     while (list != 0)
  211.     {
  212.         list = list->next;
  213.         i++;
  214.     }
  215.     return i;
  216. }
  217.  
  218. Element_t *insertFirst(Element_t *list)
  219. {
  220.     Element_t *element = allocate();
  221.     if (element == 0)
  222.     {
  223.         fprintf(stderr, "Error: No memory allocated for insert_fisrt!\n");
  224.         return list;
  225.     }
  226.  
  227.     if(list == 0)
  228.     {
  229.         list = element;
  230.     }
  231.     else
  232.     {
  233.         element->next = list;
  234.         list->prev = element;
  235.     }
  236.     return element;
  237.  
  238. }
  239.  
  240. Element_t *deleteAt(Element_t *list, long index)
  241. {
  242.     //long i = 0;
  243.     list = elementAt(list, index);
  244.  
  245.     if(list->prev == 0)
  246.         {
  247.             list->next->prev = 0;
  248.             list = list->next;
  249.         }
  250.  
  251.     else if(list->next == 0)
  252.     {
  253.         list->prev->next = 0;
  254.         while(list->prev != 0)
  255.         {
  256.             list = list->prev;
  257.         }
  258.     }
  259.  
  260.     else
  261.     {
  262.         list->prev->next = list->next;
  263.         list->next->prev = list->prev;
  264.  
  265.         while(list->prev != 0)
  266.         {
  267.             list = list->prev;
  268.         }
  269.     }
  270.     return list;
  271. }
  272.  
  273. void print_list_random(Element_t *list)
  274. {
  275.     if(list != 0)
  276.     {
  277.         if(rand() > RAND_MAX/2 )
  278.         {
  279.             print_list_random(list->next);
  280.             print_element(list);
  281.         }
  282.         else
  283.         {
  284.             print_element(list);
  285.             print_list_random(list->next);
  286.         }
  287.     }
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement