fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct SinonimNode {
  6. char sinonim[50];
  7. struct SinonimNode *next;
  8. } SinonimNode;
  9.  
  10. typedef struct KamusNode {
  11. char kata[50];
  12. SinonimNode *sinonimHead;
  13. struct KamusNode *next;
  14. } KamusNode;
  15.  
  16. typedef struct Kamus {
  17. KamusNode *head;
  18. } Kamus;
  19.  
  20. Kamus* buatKamus() {
  21. Kamus *kamus = (Kamus *)malloc(sizeof(Kamus));
  22. kamus->head = NULL;
  23. return kamus;
  24. }
  25.  
  26. void tambahSinonim(SinonimNode **head, const char *sinonim) {
  27. SinonimNode *nodeBaru = (SinonimNode *)malloc(sizeof(SinonimNode));
  28. strcpy(nodeBaru->sinonim, sinonim);
  29. nodeBaru->next = NULL;
  30.  
  31. if (*head == NULL) {
  32. *head = nodeBaru;
  33. } else {
  34. SinonimNode *temp = *head;
  35. while (temp->next != NULL) {
  36. if (strcmp(temp->sinonim, sinonim) == 0) return;
  37. temp = temp->next;
  38. }
  39. if (strcmp(temp->sinonim, sinonim) != 0) {
  40. temp->next = nodeBaru;
  41. } else {
  42. free(nodeBaru);
  43. }
  44. }
  45. }
  46.  
  47. void tambah(Kamus *kamus, const char *kata, const char *sinonim) {
  48. KamusNode *temp = kamus->head;
  49.  
  50. while (temp != NULL) {
  51. if (strcmp(temp->kata, kata) == 0) {
  52. tambahSinonim(&temp->sinonimHead, sinonim);
  53. return;
  54. }
  55. temp = temp->next;
  56. }
  57.  
  58. KamusNode *nodeBaru = (KamusNode *)malloc(sizeof(KamusNode));
  59. strcpy(nodeBaru->kata, kata);
  60. nodeBaru->sinonimHead = NULL;
  61. nodeBaru->next = kamus->head;
  62. kamus->head = nodeBaru;
  63.  
  64. tambahSinonim(&nodeBaru->sinonimHead, sinonim);
  65. }
  66.  
  67. void ambilSinonim(Kamus *kamus, const char *kata) {
  68. KamusNode *temp = kamus->head;
  69.  
  70. while (temp != NULL) {
  71. if (strcmp(temp->kata, kata) == 0) {
  72. SinonimNode *sinonimTemp = temp->sinonimHead;
  73. printf("[");
  74. while (sinonimTemp != NULL) {
  75. printf("%s", sinonimTemp->sinonim);
  76. sinonimTemp = sinonimTemp->next;
  77. if (sinonimTemp != NULL) printf(", ");
  78. }
  79. printf("]\n");
  80. return;
  81. }
  82. temp = temp->next;
  83. }
  84.  
  85. printf("null / belom ditambahkan\n");
  86. }
  87.  
  88. int main() {
  89. Kamus *kamus = buatKamus();
  90.  
  91. tambah(kamus, "big", "large");
  92. tambah(kamus, "big", "great");
  93. tambah(kamus, "big", "huge");
  94. tambah(kamus, "big", "fat");
  95. tambah(kamus, "huge", "enormous");
  96. tambah(kamus, "huge", "gigantic");
  97. tambah(kamus, "tall", "big");
  98. tambah(kamus, "tall", "high");
  99. tambah(kamus, "little", "tiny");
  100. tambah(kamus, "tiny", "little");
  101.  
  102. printf("Sinonim untuk 'big' adalah: ");
  103. ambilSinonim(kamus, "big");
  104.  
  105. printf("Sinonim untuk 'huge' adalah: ");
  106. ambilSinonim(kamus, "huge");
  107.  
  108. printf("Sinonim untuk 'large' adalah: ");
  109. ambilSinonim(kamus, "large");
  110.  
  111. printf("Sinonim untuk 'tall' adalah: ");
  112. ambilSinonim(kamus, "tall");
  113.  
  114. printf("Sinonim untuk 'little' adalah: ");
  115. ambilSinonim(kamus, "little");
  116.  
  117. printf("Sinonim untuk 'tiny' adalah: ");
  118. ambilSinonim(kamus, "tiny");
  119.  
  120. printf("Sinonim untuk 'high' adalah: ");
  121. ambilSinonim(kamus, "high");
  122.  
  123. printf("Sinonim untuk 'gigantic' adalah: ");
  124. ambilSinonim(kamus, "gigantic");
  125.  
  126. printf("Sinonim untuk 'colossal' adalah: ");
  127. ambilSinonim(kamus, "colossal");
  128.  
  129. return 0;
  130. }
Success #stdin #stdout 0s 5280KB
stdin
Standard input is empty
stdout
Sinonim untuk 'big' adalah: [large, great, huge, fat]
Sinonim untuk 'huge' adalah: [enormous, gigantic]
Sinonim untuk 'large' adalah: null / belom ditambahkan
Sinonim untuk 'tall' adalah: [big, high]
Sinonim untuk 'little' adalah: [tiny]
Sinonim untuk 'tiny' adalah: [little]
Sinonim untuk 'high' adalah: null / belom ditambahkan
Sinonim untuk 'gigantic' adalah: null / belom ditambahkan
Sinonim untuk 'colossal' adalah: null / belom ditambahkan