#include #include #include #include "c.h" void readfromkeyboard(Element_t *item) { if(!item) { fprintf(stderr, "Nullpointer"); exit(-1); } fprintf(stderr, "Waehle Song:"); fgets(item->songtitle, 255, stdin); *strrchr(item->songtitle, '\n')=0; fprintf(stderr, "Waehle interpreter:"); fgets(item->interpreter, 255, stdin); *strrchr(item->interpreter, '\n')=0; } Element_t *allocateElement() { Element_t *elem = malloc(sizeof(Element_t)); if (elem == 0) { fprintf(stderr, "Error:␣no␣memory␣available!\n"); return 0; } readfromkeyboard(elem); elem->next = 0; return elem; } void freeList(Element_t **list) { Element_t *next; Element_t *list2=*list; while (list2 != 0) { next = list2->next; free(list2); list2=next; } list2=0; } Element_t *insertLast(Element_t *list) { Element_t *elem = allocateElement(); if (list != 0) /* es wurde eine Liste uebergeben */ { Element_t *end = find_end(list); /* Ende finden */ end->next = elem; /* neues Element an das Ende anfuegen */ } else list = elem; /* elem ist neue Liste */ return list; } Element_t *find_end(Element_t *list) { while (list->next != 0) list = list->next; return list; } void print_singleElement(Element_t *element) { printf("%s-%s\n", element->songtitle, element->interpreter); } void print_entireList(Element_t *list) { printf("-------Liste-------\n"); long i=0; while(list) { i++; printf("%ld. ", i); print_singleElement(list); list = list->next; } printf("\nendd-------Liste-------"); } /*void print_list(Element_t *list) { printf("----------␣Single␣Linked␣List␣---------\n"); while (list != 0) { printf("%ld\n", list->value); list = list->next; } printf("---------------------------------------\n"); } */ void print_list_reverse(Element_t *list) { if(list->next!=0) print_list_reverse(list->next); print_singleElement(list); //list=list->next; } Element_t *elementAt(Element_t *list, long index) { Element_t *l =list; long i; for(i=0; inext; return l; } long elementsCount(Element_t *list) { if(list==0) return 0; long i=1; while(list->next) { list=list->next; i++; } return i; } Element_t *removeFirst(Element_t *list) { Element_t *begin = list; while (list != 0) { if (list->next != 0) /* Das gesuchte Element ist erreicht */ { begin = list->next; /* Sichern des Rests der liste, falls */ /* das erste Element geloescht wird */ free(list); /* Element freigeben */ return begin; } else /* nicht gefunden */ { list = list->next; } } fprintf(stderr, "Error:␣element␣not␣found!\n"); return begin; } void insertAt(Element_t *list, long insertAfter) { Element_t *elem; if (list != 0) { list = elementAt(list,insertAfter); if (list != 0) { elem = allocateElement(); /* neues Element anlegen */ if (elem == 0) { fprintf(stderr, "Error:␣no␣memory␣allocated␣for␣push_front!\n"); // return list; } elem->next = list->next; /* Nachfolger von list als Nachfolger */ /* von elem setzen */ list->next = elem; /* elem als Nachfolger von list festlegen */ } else fprintf(stderr, "Element␣not␣found\n"); } } void print_list_random(Element_t *list) { if( list->next) { if(rand()<266666) { print_list_random(list->next); fprintf(stdout, "%s\t%s\n", list->songtitle, list->interpreter); } else{ fprintf(stdout, "%s\t%s\n", list->songtitle, list->interpreter); print_list_random(list->next);} } else{ fprintf(stdout, "%s\t%s\n", list->songtitle, list->interpreter); } }