Untitled


SUBMITTED BY: Guest

DATE: Nov. 21, 2016, 9:29 p.m.

FORMAT: C

SIZE: 5.5 kB

HITS: 633

  1. #include "header.h"
  2. void readFromKeyboard(Element_t *item)
  3. {
  4. if (!item)
  5. {
  6. fprintf(stderr, "Nullpointer in readFromKeyboard()\n");
  7. return;
  8. }
  9. fprintf(stdout, "Enter song title: ");
  10. fgets(item->songtitle,255,stdin);
  11. *strrchr(item->songtitle,'\n')=0;
  12. while (getchar() != '\n') {}
  13. fgets(item->interpreter,255,stdin);
  14. *strrchr(item->interpreter,'\n')=0;
  15. while (getchar() != '\n') {}
  16. }
  17. Element_t *allocateElement()
  18. {
  19. Element_t *new = 0;
  20. if (!(new = malloc(sizeof(Element_t))))
  21. {
  22. fprintf(stderr, "Memory allocation error in allocateElement()");
  23. exit(-1);
  24. }
  25. readFromKeyboard(new);
  26. new->next = 0;
  27. return new;
  28. }
  29. Element_t *insertLast(Element_t *list)
  30. {
  31. Element_t *new = allocateElement();
  32. if (!list)
  33. {
  34. return new;
  35. }
  36. Element_t *last = list;
  37. while(last->next)
  38. last = last->next;
  39. last->next = new;
  40. return list;
  41. }
  42. void freeList(Element_t **list)
  43. {
  44. if (!list)
  45. {
  46. fprintf(stderr, "Nullpointer in freeList()");
  47. exit(-1);
  48. }
  49. Element_t *next;
  50. while(*list)
  51. {
  52. next = list[0]->next;
  53. free(list[0]);
  54. list[0] = next;
  55. }
  56. list[0] = 0;
  57. }
  58. void print_singleElement(Element_t *element)
  59. {
  60. if (element)
  61. {
  62. fprintf(stdout, "begin-elem--------------------\n");
  63. fprintf(stdout, "%s\t%s\n", element->songtitle, element->interpreter);
  64. fprintf(stdout, "end-elem----------------------\n");
  65. }
  66. else
  67. {
  68. fprintf(stdout, "Nullpointer!\n");
  69. }
  70. }
  71. void print_entireList(Element_t *list)
  72. {
  73. while(list)
  74. {
  75. fprintf(stdout, "%s\t%s\n", list->songtitle, list->interpreter);
  76. list = list->next;
  77. }
  78. }
  79. void print_list_reverse(Element_t *list)
  80. {
  81. if (list->next)
  82. print_list_reverse(list->next);
  83. fprintf(stdout, "%s\t%s\n", list->songtitle, list->interpreter);
  84. }
  85. Element_t *elementAt(Element_t *list, long index)
  86. {
  87. if (index == 0) return list;
  88. long counter = 0;
  89. while(list->next)
  90. {
  91. list = list->next;
  92. if (++counter == index) return list;
  93. }
  94. return 0;
  95. }
  96. long elementsCount(Element_t *list)
  97. {
  98. if (!list) return 0;
  99. long counter = 1;
  100. while(list->next)
  101. {
  102. list = list->next;
  103. counter++;
  104. }
  105. return counter;
  106. }
  107. Element_t *removeFirst(Element_t *list)
  108. {
  109. Element_t *temp = list->next;
  110. free(list);
  111. return temp;
  112. }
  113. void insertAt(Element_t *list, long insertAfter)
  114. {
  115. Element_t *new = insertLast(0);
  116. Element_t *at = elementAt(list, insertAfter);
  117. new->next = at->next;
  118. at->next = new;
  119. }
  120. void print_list_random(Element_t *list)
  121. {
  122. if (list->next)
  123. {
  124. if (rand() < 16383)
  125. {
  126. print_list_random(list->next);
  127. fprintf(stdout, "%s\t%s\n", list->songtitle, list->interpreter);
  128. }
  129. else
  130. {
  131. fprintf(stdout, "%s\t%s\n", list->songtitle, list->interpreter);
  132. print_list_random(list->next);
  133. }
  134. }
  135. else
  136. {
  137. fprintf(stdout, "%s\t%s\n", list->songtitle, list->interpreter);
  138. }
  139. }
  140. void sort_list(Element_t **list)
  141. {
  142. Element_t *temp = *list;
  143. Element_t *prev;
  144. long i, j;
  145. for (j = elementsCount(*list) - 1; j > 0; j--)
  146. {
  147. i = 0;
  148. prev = 0;
  149. temp = *list;
  150. while (i < j)
  151. {
  152. //printf("\n%ld %ld\t%s\t%s", j, i, temp->songtitle, (temp->next)->songtitle);
  153. if (strcmp(temp->songtitle, (temp->next)->songtitle) > 0)
  154. {
  155. //printf("\tswap");
  156. Element_t *swap = temp->next;
  157. temp->next = swap->next;
  158. swap->next = temp;
  159. if (prev)
  160. prev->next = swap;
  161. else
  162. *list = swap;
  163. prev = swap;
  164. }
  165. else
  166. {
  167. prev = temp;
  168. temp = temp->next;
  169. }
  170. i++;
  171. }
  172. //printf("\n");
  173. //print_entireList(*list);
  174. }
  175. }
  176. int main()
  177. {
  178. srand(time(0));
  179. Element_t *list = malloc(sizeof(Element_t));
  180. strcpy(list->songtitle, "I am First!");
  181. strcpy(list->interpreter, "Hello there.");
  182. list->next = 0;
  183. Element_t *last = list;
  184. long i;
  185. for (i = 0; i < 11; i++)
  186. {
  187. Element_t *new;
  188. new = malloc(sizeof(Element_t));
  189. new->songtitle[0] = i + 'A';
  190. new->interpreter[0] = i+ 'a';
  191. new->next = 0;
  192. last->next = new;
  193. last = new;
  194. }
  195. print_entireList(list);
  196. printf("\n");
  197. printf("Reverse Print\n");
  198. print_list_reverse(list);
  199. printf("\n");
  200. printf("Single Element at NOElems - 4\n");
  201. print_singleElement(elementAt(list, elementsCount(list)-4));
  202. printf("\n");
  203. printf("Remove First\n");
  204. list = removeFirst(list);
  205. print_entireList(list);
  206. printf("\n");
  207. printf("Insert At 4\n");
  208. insertAt(list, 4);
  209. print_entireList(list);
  210. printf("\n");
  211. printf("Random Print\n");
  212. print_list_random(list);
  213. printf("\n");
  214. printf("Sort\n");
  215. sort_list(&list);
  216. print_entireList(list);
  217. printf("\n");
  218. freeList(&list);
  219. return 0;
  220. }

comments powered by Disqus