EldiraSesto

Uebung 2, ABC einfachverkett

Nov 4th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. typedef struct Element_s {
  7. char songtitle[256], interpreter[256];
  8. struct Element_s *next;
  9. } Element_t;
  10.  
  11. void getline (char sentence[], int lngth){
  12. char c;
  13. int i=0;
  14. do{
  15. c = getchar();
  16. }while(c=='\n');
  17. while(c!='\n' && i<lngth){
  18.     sentence[i] = c;
  19.     c=getchar();
  20.     i++;
  21.  
  22. }
  23. }
  24.  
  25. void readFromKeyboard(Element_t *item){
  26. if(item==0) return;
  27. printf("Unesite ime pjesme: ");
  28. getline(item->songtitle, 255);
  29. printf("Unesite ime pjevaca: ");
  30. getline(item->interpreter, 255);
  31.  
  32.  
  33. }
  34.  
  35. Element_t *allocateElement(){
  36.     Element_t *elem = malloc(sizeof(Element_t));
  37.     if(elem==0){
  38.         printf("Greskaaaa...");
  39.         return 0;
  40.     }
  41.     readFromKeyboard(elem);
  42.     elem->next=0;
  43.     return elem;
  44.  
  45.  
  46. }
  47.  
  48. Element_t *find_End(Element_t *list){
  49. Element_t *end;
  50. if(list==0){
  51.     printf("Prazna lista...");
  52.     return 0;
  53. }
  54. while(list!=0){
  55.         end=list;
  56. list=list->next;
  57.  
  58. }
  59.  
  60. return end;
  61. }
  62.  
  63. Element_t *insertLast(Element_t *list){
  64. Element_t *elem = allocateElement();
  65. Element_t *end;
  66. if(elem ==0){
  67.         printf("Greskaaaa...");
  68.         return 0;
  69.  
  70. }
  71. if(list!=0){
  72. end=find_End(list);
  73. end->next=elem;
  74. }
  75. else{
  76.     list=elem;
  77. }
  78. return list;
  79. }
  80.  
  81. Element_t *insertFirst(Element_t *list, Element_t *element){
  82. if(list!=0){
  83.     element->next=list;
  84.     return element;
  85. }
  86. else{
  87.     list=element;
  88.     return element;
  89. }
  90.  
  91. return element;
  92.  
  93. }
  94.  
  95. void freeList(Element_t **list){
  96. Element_t *list2;
  97. list2=*list;
  98. if(list2==0 || list==0){
  99.     printf("Prazna listaa...");
  100.     return ;
  101. }
  102. Element_t *next;
  103. while(list2!=0){
  104.     next=list2->next;
  105.     free(list2);
  106.     list2=next;
  107. }
  108. *list=0;
  109. }
  110.  
  111. void print_singleElement(Element_t *element){
  112. if(element ==0){
  113.     printf("Prazan element...");
  114.     return;
  115. }
  116. printf("%s ", element->songtitle);
  117. printf("%s \n", element->interpreter);
  118. }
  119.  
  120. void print_entireList(Element_t *list){
  121. if(list==0){
  122.     printf("Prazna lista...");
  123.     return;
  124. }
  125. int i=1;
  126. while(list!=0){
  127.     printf("%d. ", i);
  128.     print_singleElement(list);
  129.     list=list->next;
  130.     i++;
  131. }
  132. }
  133. long dajVelicinu(Element_t *list){
  134.     if(list==0){
  135.         printf("Prazna listaa...");
  136.         return 0;
  137.     }
  138.     long i=0;
  139.     while(list!=0){
  140.         list=list->next;
  141.         i++;
  142.     }
  143.  
  144.     return i;
  145. }
  146.  
  147. void print_list_reverse(Element_t *list){
  148. if(list==0){
  149.     printf("Prazna listaaa...");
  150.     return;
  151. }
  152. if(list->next != 0)
  153.         print_list_reverse(list->next);
  154.  
  155.     print_singleElement(list);
  156.  
  157. }
  158.  
  159. Element_t *get_element(Element_t *list, long index){
  160.     long duzina = dajVelicinu(list);
  161.     if(index>duzina) return 0;
  162.     long i = 1;
  163.     while(list->next != 0){
  164.         if(i==index){
  165.             return list;
  166.         }
  167.         list=list->next;
  168.         i++;
  169.     }
  170.     return 0;
  171. }
  172.  
  173. void print_list_random(Element_t *list)
  174. {
  175.     long laenge = dajVelicinu(list);
  176.     long feld[laenge];
  177.     int i;
  178.     long repeat = 0;
  179.     long zahl;
  180.     long stelle = 0;
  181.  
  182.     for(i = 0; i < laenge; i++)
  183.     {
  184.         feld[i] = -1;
  185.     }
  186.  
  187.     while(stelle < laenge)
  188.     {
  189.         zahl = (rand()%laenge);
  190.         repeat = 0;
  191.  
  192.         for(i = 0; i < laenge; i++)
  193.         {
  194.             if(zahl == feld[i])
  195.             {
  196.                 repeat = 1;
  197.             }
  198.         }
  199.  
  200.         if(repeat == 0)
  201.         {
  202.             feld[stelle] = zahl;
  203.             stelle++;
  204.         }
  205.     }
  206.  
  207.     for(i = 0; i < laenge; i++)
  208.     {
  209.         print_singleElement(get_element(list,feld[i]));
  210.     }
  211. }
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218. int main()
  219. {
  220.     /*Element_t *list = 0;
  221.     Element_t *elem = allocateElement();
  222.  
  223.     int velicina;
  224.     list=insertLast(list);
  225.     list=insertLast(list);
  226.     list=insertLast(list);
  227.  
  228.     print_entireList(list);
  229.     list=insertFirst(list, elem);
  230.     print_entireList(list);
  231.     printf("Reverse: ");
  232.     print_list_reverse(list);
  233.     printf("Random: ");
  234.     print_list_random(list);
  235.  
  236.     freeList(&list);*/
  237.  
  238.  
  239.     int w = 1;
  240.     Element_t *list=0;
  241.     Element_t *elem = allocateElement();
  242.  
  243.     while(w!=0){
  244.     printf("Menu:\n");
  245.     printf("1.Dodaj element na kraj: \n");
  246.     printf("2.Dodaj element na pocetak: \n");
  247.     printf("3. Isprintaj listu: \n");
  248.     printf("4. Isprintaj naopako: \n");
  249.     printf("5. Ispintaj random: \n");
  250.     printf("6. Izbrisi listu: \n");
  251.     printf("0. Kraj programa. ");
  252.     scanf("%d", &w);
  253.  
  254.         switch(w){
  255.     case 1:
  256.         list=insertLast(list);
  257.         break;
  258.  
  259.     case 2:
  260.         list=insertFirst(list, elem);
  261.         break;
  262.  
  263.     case 3:
  264.         print_entireList(list);
  265.         break;
  266.  
  267.     case 4:
  268.         print_list_reverse(list);
  269.         break;
  270.     case 5:
  271.          print_list_random(list);
  272.          break;
  273.     case 6:
  274.         freeList(&list);
  275.         break;
  276.     case 0:
  277.         break;
  278.     default:
  279.     printf("Falsche Eingabe\n");
  280.     break;
  281.         }
  282.  
  283.  
  284.  
  285.     }
  286.  
  287.     freeList(&list);
  288.     return 0;
  289. }
Advertisement
Add Comment
Please, Sign In to add comment