Praktikum 10 (Struktur Data Linked List)
A. Persoalan
1. Sistem Manajemen Buku:
Buatlah program yang menggunakan linked list untuk mengimplementasikan sistem manajemen buku. Setiap buku memiliki informasi seperti judul, penulis, dan tahun terbit. Program tersebut harus memiliki fitur sebagai berikut:
• Menambahkan buku baru ke dalam linked list.
• Menghapus buku dari linked list berdasarkan judul.
• Menampilkan seluruh buku dalam linked list.
• Menambahkan buku baru ke dalam linked list.
• Menghapus buku dari linked list berdasarkan judul.
• Menampilkan seluruh buku dalam linked list.
2. Sistem Antrian Pasien Rumah Sakit:
Buatlah program yang menggunakan linked list untuk mengimplementasikan sistem antrian pasien di rumah sakit. Setiap pasien memiliki informasi seperti nama, nomor rekam medis, dan jenis penyakit. Program tersebut harus memiliki fitur sebagai berikut:
• Menambahkan pasien baru ke dalam linked list antrian.
• Memanggil pasien berikutnya untuk dilayani dan menghapusnya dari linked list. • Menampilkan seluruh pasien dalam linked list antrian.
• Menambahkan pasien baru ke dalam linked list antrian.
• Memanggil pasien berikutnya untuk dilayani dan menghapusnya dari linked list. • Menampilkan seluruh pasien dalam linked list antrian.
3. Sistem Pencatatan Transaksi Penjualan:
Buatlah program yang menggunakan linked list untuk mengimplementasikan
sistem pencatatan transaksi penjualan.
Setiap transaksi memiliki informasi seperti nomor transaksi, tanggal, dan total pembelian. Program
tersebut harus memiliki fitur sebagai berikut:
• Menambahkan transaksi baru
ke dalam linked list.
• Menghapus transaksi dari linked list berdasarkan nomor transaksi.
• Menampilkan seluruh transaksi dalam linked list.
Silakan implementasikan tiga soal praktek di atas menggunakan bahasa C.
• Menampilkan seluruh transaksi dalam linked list.
Silakan implementasikan tiga soal praktek di atas menggunakan bahasa C.
B. Jawaban
1. Sistem Manajemen Buku:
- Koding Bahasa C:
#include <stdio.h>#include <stdlib.h>#include <string.h>// Struktur data untuk bukustruct Buku {char judul[100];char penulis[100];int tahunTerbit;struct Buku* next;};// Fungsi untuk menambahkan buku baru ke dalam linked listvoid tambahBuku(struct Buku** head, char judul[], char penulis[], int tahunTerbit) {// Membuat node buku barustruct Buku* bukuBaru = (struct Buku*)malloc(sizeof(struct Buku));// Mengisi informasi bukustrcpy(bukuBaru->judul, judul);strcpy(bukuBaru->penulis, penulis);bukuBaru->tahunTerbit = tahunTerbit;// Mengatur next dari buku baru menjadi NULL (karena buku baru akan menjadi akhir dari linked list)bukuBaru->next = NULL;// Jika linked list masih kosong, buku baru menjadi headif (*head == NULL) {*head = bukuBaru;}// Jika linked list sudah berisi buku, mencari akhir linked list dan menghubungkannya dengan buku baruelse {struct Buku* current = *head;while (current->next != NULL) {current = current->next;}current->next = bukuBaru;}printf("Buku berhasil ditambahkan.\n");}// Fungsi untuk menghapus buku dari linked list berdasarkan judulvoid hapusBuku(struct Buku** head, char judul[]) {// Jika linked list kosongif (*head == NULL) {printf("Tidak ada buku dalam daftar.\n");return;}// Jika buku yang ingin dihapus merupakan buku pertama dalam linked listif (strcmp((*head)->judul, judul) == 0) {struct Buku* temp = *head;*head = (*head)->next;free(temp);printf("Buku berhasil dihapus.\n");return;}// Mencari buku yang ingin dihapusstruct Buku* current = *head;struct Buku* prev = NULL;while (current != NULL && strcmp(current->judul, judul) != 0) {prev = current;current = current->next;}// Jika buku tidak ditemukanif (current == NULL) {printf("Buku dengan judul '%s' tidak ditemukan.\n", judul);return;}// Menghubungkan node sebelum buku yang ingin dihapus dengan node setelahnyaprev->next = current->next;free(current);printf("Buku berhasil dihapus.\n");}// Fungsi untuk menampilkan seluruh buku dalam linked listvoid tampilkanBuku(struct Buku* head) {// Jika linked list kosongif (head == NULL) {printf("Tidak ada buku dalam daftar.\n");return;}printf("Daftar Buku:\n");printf("==========================================\n");struct Buku* current = head;while (current != NULL) {printf("Judul: %s\n", current->judul);printf("Penulis: %s\n", current->penulis);printf("Tahun Terbit: %d\n", current->tahunTerbit);printf("------------------------------------------\n");current = current->next;}}// Fungsi untuk menghapus seluruh linked list bukuvoid hapusSemuaBuku(struct Buku** head) {struct Buku* current = *head;struct Buku* next;while (current != NULL) {next = current->next;free(current);current = next;}*head = NULL;printf("Seluruh buku berhasil dihapus.\n");}int main() {struct Buku* daftarBuku = NULL;int pilihan;char judul[100];char penulis[100];int tahunTerbit;do {printf("========== Sistem Manajemen Buku ==========\n");printf("1. Tambah Buku\n");printf("2. Hapus Buku\n");printf("3. Tampilkan Daftar Buku\n");printf("4. Hapus Semua Buku\n");printf("0. Keluar\n");printf("Pilihan Anda: ");scanf("%d", &pilihan);switch (pilihan) {case 1:printf("Masukkan Judul Buku: ");scanf(" %[^\n]s", judul);printf("Masukkan Nama Penulis: ");scanf(" %[^\n]s", penulis);printf("Masukkan Tahun Terbit: ");scanf("%d", &tahunTerbit);tambahBuku(&daftarBuku, judul, penulis, tahunTerbit);break;case 2:printf("Masukkan Judul Buku yang Akan Dihapus: ");scanf(" %[^\n]s", judul);hapusBuku(&daftarBuku, judul);break;case 3:tampilkanBuku(daftarBuku);break;case 4:hapusSemuaBuku(&daftarBuku);break;case 0:printf("Terima kasih!\n");break;default:printf("Pilihan tidak valid. Silakan coba lagi.\n");}printf("\n");} while (pilihan != 0);// Menghapus seluruh linked list buku sebelum program berakhirhapusSemuaBuku(&daftarBuku);return 0;} - Hasil:
2. Sistem Antrian Pasien Rumah Sakit:
- Koding Bahasa C:#include <stdio.h>#include <stdlib.h>#include <string.h>struct Pasien {char nama[50];int nomorRekamMedis;char jenisPenyakit[50];struct Pasien* next;};void tambahPasien(struct Pasien** head, char nama[], int nomorRekamMedis, char jenisPenyakit[]) {struct Pasien* newPasien = (struct Pasien*)malloc(sizeof(struct Pasien));strcpy(newPasien->nama, nama);newPasien->nomorRekamMedis = nomorRekamMedis;strcpy(newPasien->jenisPenyakit, jenisPenyakit);newPasien->next = NULL;if (*head == NULL) {*head = newPasien;} else {struct Pasien* temp = *head;while (temp->next != NULL) {temp = temp->next;}temp->next = newPasien;}printf("Pasien '%s' telah ditambahkan ke antrian.\n", nama);}void panggilPasien(struct Pasien** head) {if (*head == NULL) {printf("Antrian kosong. Tidak ada pasien yang dipanggil.\n");} else {struct Pasien* temp = *head;*head = (*head)->next;printf("Pasien '%s' dengan nomor rekam medis %d dipanggil untuk dilayani.\n", temp->nama, temp->nomorRekamMedis);free(temp);}}void tampilkanAntrian(struct Pasien* head) {if (head == NULL) {printf("Antrian kosong. Tidak ada pasien yang ditampilkan.\n");} else {printf("Daftar Pasien dalam Antrian:\n");while (head != NULL) {printf("Nama: %s, Nomor Rekam Medis: %d, Jenis Penyakit: %s\n", head->nama, head->nomorRekamMedis, head->jenisPenyakit);head = head->next;}}}void hapusAntrian(struct Pasien** head) {struct Pasien* current = *head;struct Pasien* next;while (current != NULL) {next = current->next;free(current);current = next;}*head = NULL;}int main() {struct Pasien* antrian = NULL;int pilihan;do {printf("\n----- Sistem Antrian Pasien Rumah Sakit -----\n");printf("1. Tambah Pasien ke Antrian\n");printf("2. Panggil Pasien berikutnya\n");printf("3. Tampilkan Seluruh Pasien dalam Antrian\n");printf("0. Keluar\n");printf("Pilihan Anda: ");if (scanf("%d", &pilihan) != 1) {printf("Error saat membaca input.\n");break;}getchar(); // Menangkap newline (\n) setelah membaca angkaswitch (pilihan) {case 1: {char nama[50];int nomorRekamMedis;char jenisPenyakit[50];printf("\nTambah Pasien ke Antrian\n");printf("Masukkan Nama Pasien: ");fgets(nama, sizeof(nama), stdin);nama[strcspn(nama, "\n")] = '\0'; // Menghapus newline dari inputprintf("Masukkan Nomor Rekam Medis: ");if (scanf("%d", &nomorRekamMedis) != 1) {printf("Error saat membaca Nomor Rekam Medis.\n");break;}getchar(); // Menangkap newline (\n) setelah membaca angkaprintf("Masukkan Jenis Penyakit: ");fgets(jenisPenyakit, sizeof(jenisPenyakit), stdin);jenisPenyakit[strcspn(jenisPenyakit, "\n")] = '\0'; // Menghapus newline dari inputtambahPasien(&antrian, nama, nomorRekamMedis, jenisPenyakit);break;}case 2:printf("\nPanggil Pasien berikutnya\n");panggilPasien(&antrian);break;case 3:printf("\nTampilkan Seluruh Pasien dalam Antrian\n");tampilkanAntrian(antrian);break;case 0:printf("\nProgram selesai.\n");break;default:printf("\nPilihan tidak valid. Silakan pilih opsi yang benar.\n");}} while (pilihan != 0);hapusAntrian(&antrian);return 0;}
- Hasil:
3. Sistem Pencatatan Transaksi Penjualan:
- Koding Bahasa C:#include <stdio.h>#include <stdlib.h>#include <string.h>// Struktur data untuk transaksitypedef struct {int nomorTransaksi;char tanggal[20];float totalPembelian;} Transaksi;// Struktur data untuk node linked listtypedef struct Node {Transaksi data;struct Node* next;} Node;// Fungsi untuk menambahkan transaksi baru ke dalam linked listvoid tambahTransaksi(Node** head, Transaksi transaksi) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = transaksi;newNode->next = *head;*head = newNode;printf("Transaksi dengan nomor %d ditambahkan.\n", transaksi.nomorTransaksi);}// Fungsi untuk menghapus transaksi dari linked list berdasarkan nomor transaksivoid hapusTransaksi(Node** head, int nomorTransaksi) {Node* current = *head;Node* prev = NULL;while (current != NULL && current->data.nomorTransaksi != nomorTransaksi) {prev = current;current = current->next;}if (current == NULL) {printf("Transaksi dengan nomor %d tidak ditemukan.\n", nomorTransaksi);return;}if (prev == NULL) {*head = current->next;} else {prev->next = current->next;}free(current);printf("Transaksi dengan nomor %d dihapus.\n", nomorTransaksi);}// Fungsi untuk menampilkan seluruh transaksi dalam linked listvoid tampilkanTransaksi(Node* head) {if (head == NULL) {printf("Tidak ada transaksi dalam daftar.\n");return;}printf("Daftar Transaksi:\n");while (head != NULL) {Transaksi transaksi = head->data;printf("Nomor Transaksi: %d, Tanggal: %s, Total Pembelian: %.2f\n", transaksi.nomorTransaksi, transaksi.tanggal, transaksi.totalPembelian);head = head->next;}}// Fungsi untuk menghapus seluruh linked list transaksivoid hapusSemuaTransaksi(Node** head) {Node* current = *head;Node* next;while (current != NULL) {next = current->next;free(current);current = next;}*head = NULL;printf("Seluruh transaksi berhasil dihapus.\n");}int main() {Node* daftarTransaksi = NULL;int pilihan;do {printf("\n========== Sistem Pencatatan Transaksi Penjualan ==========\n");printf("1. Tambah Transaksi\n");printf("2. Hapus Transaksi\n");printf("3. Tampilkan Seluruh Transaksi\n");printf("4. Hapus Semua Transaksi\n");printf("0. Keluar\n");printf("Pilihan Anda: ");scanf("%d", &pilihan);switch (pilihan) {case 1: {Transaksi transaksi;printf("\nTambah Transaksi Baru\n");printf("Nomor Transaksi: ");scanf("%d", &transaksi.nomorTransaksi);printf("Tanggal: ");scanf("%s", transaksi.tanggal);printf("Total Pembelian: ");scanf("%f", &transaksi.totalPembelian);tambahTransaksi(&daftarTransaksi, transaksi);break;}case 2: {int nomorTransaksi;printf("\nHapus Transaksi\n");printf("Masukkan Nomor Transaksi yang akan dihapus: ");scanf("%d", &nomorTransaksi);hapusTransaksi(&daftarTransaksi, nomorTransaksi);break;}case 3:printf("\nTampilkan Seluruh Transaksi\n");tampilkanTransaksi(daftarTransaksi);break;case 4:hapusSemuaTransaksi(&daftarTransaksi);break;case 0:printf("Terima kasih!\n");break;default:printf("Pilihan tidak valid. Silakan coba lagi.\n");}} while (pilihan != 0);// Menghapus seluruh linked list transaksi sebelum program berakhirhapusSemuaTransaksi(&daftarTransaksi);return 0;}
- Hasil:
Praktikum 11 (Struktur Data Tree)
A. Persoalan
1. Sistem Manajemen Buku:
Buatlah program yang menggunakan struktur data tree untuk mengimplementasikan sistem manajemen buku. Setiap buku memiliki informasi seperti judul, penulis, dan tahun terbit. Program tersebut harus memiliki fitur sebagai berikut:
• Menambahkan buku baru ke dalam struktur data tree.
• Menghapus buku dari struktur data tree berdasarkan judul.
• Menampilkan seluruh buku dalam struktur data tree.
• Menambahkan buku baru ke dalam struktur data tree.
• Menghapus buku dari struktur data tree berdasarkan judul.
• Menampilkan seluruh buku dalam struktur data tree.
2. Sistem Organisasi Perusahaan:
Buatlah program yang menggunakan struktur data tree untuk mengimplementasikan sistem organisasi perusahaan. Setiap simpul dalam tree mewakili seorang karyawan dan memiliki informasi seperti nama, ID, jabatan, dan gaji. Program tersebut harus memiliki fitur sebagai berikut:
• Menambahkan karyawan baru ke dalam struktur data tree.
• Menghapus karyawan dari struktur data tree berdasarkan ID.
• Menampilkan seluruh karyawan dalam struktur data tree.
• Menambahkan karyawan baru ke dalam struktur data tree.
• Menghapus karyawan dari struktur data tree berdasarkan ID.
• Menampilkan seluruh karyawan dalam struktur data tree.
3. Sistem Pohon Keluarga:
Buatlah program yang menggunakan struktur data tree untuk mengimplementasikan sistem pohon keluarga. Setiap simpul dalam tree mewakili seorang anggota keluarga dan memiliki informasi seperti nama, usia, dan hubungan dengan anggota keluarga lainnya. Program tersebut harus memiliki fitur sebagai berikut:
• Menambahkan anggota keluarga baru ke dalam struktur data tree.
• Menghapus anggota keluarga dari struktur data tree berdasarkan nama.
•Menampilkan seluruh anggota keluarga dalam struktur data tree.
Dengan melakukan praktek pada soal-soal di atas, Anda akan memperoleh pemahaman yang baik tentang implementasi struktur data tree dalam bahasa C dan bagaimana memanfaatkannya dalam pemecahan masalah nyata.
• Menambahkan anggota keluarga baru ke dalam struktur data tree.
• Menghapus anggota keluarga dari struktur data tree berdasarkan nama.
•Menampilkan seluruh anggota keluarga dalam struktur data tree.
Dengan melakukan praktek pada soal-soal di atas, Anda akan memperoleh pemahaman yang baik tentang implementasi struktur data tree dalam bahasa C dan bagaimana memanfaatkannya dalam pemecahan masalah nyata.
B. Jawaban
1. Sistem Manajemen Buku:
- Koding Bashasa C:#include <stdio.h>#include <stdlib.h>#include <string.h>// Definisi struktur data untuk bukutypedef struct Buku {char judul[100];char penulis[100];int tahunTerbit;struct Buku* left;struct Buku* right;} Buku;// Fungsi untuk membuat simpul baru pada treeBuku* createNode(char judul[], char penulis[], int tahunTerbit) {Buku* newNode = (Buku*)malloc(sizeof(Buku));if (newNode == NULL) {printf("Gagal melakukan alokasi memori.\n");exit(EXIT_FAILURE);}strcpy(newNode->judul, judul);strcpy(newNode->penulis, penulis);newNode->tahunTerbit = tahunTerbit;newNode->left = newNode->right = NULL;return newNode;}// Fungsi untuk menambahkan buku baru ke dalam treeBuku* tambahBuku(Buku* root, char judul[], char penulis[], int tahunTerbit) {if (root == NULL) {return createNode(judul, penulis, tahunTerbit);}// Jika judul buku lebih kecil, tambahkan ke subtree kiriif (strcmp(judul, root->judul) < 0) {root->left = tambahBuku(root->left, judul, penulis, tahunTerbit);}// Jika judul buku lebih besar, tambahkan ke subtree kananelse if (strcmp(judul, root->judul) > 0) {root->right = tambahBuku(root->right, judul, penulis, tahunTerbit);}return root;}// Fungsi untuk mencari buku berdasarkan judulBuku* cariBuku(Buku* root, char judul[]) {if (root == NULL || strcmp(judul, root->judul) == 0) {return root;}// Jika judul buku lebih kecil, cari di subtree kiriif (strcmp(judul, root->judul) < 0) {return cariBuku(root->left, judul);}// Jika judul buku lebih besar, cari di subtree kananelse {return cariBuku(root->right, judul);}}// Fungsi untuk mencari buku dengan judul terkecil (paling kiri)Buku* findMinBuku(Buku* root) {Buku* current = root;while (current && current->left != NULL) {current = current->left;}return current;}// Fungsi untuk menghapus buku dari tree berdasarkan judulBuku* hapusBuku(Buku* root, char judul[]) {if (root == NULL) {return root;}// Cari buku dengan judul yang sesuaiif (strcmp(judul, root->judul) < 0) {root->left = hapusBuku(root->left, judul);} else if (strcmp(judul, root->judul) > 0) {root->right = hapusBuku(root->right, judul);} else {// Jika buku ditemukan, lakukan penghapusanif (root->left == NULL && root->right == NULL) {free(root);root = NULL;} else if (root->left == NULL) {Buku* temp = root;root = root->right;free(temp);} else if (root->right == NULL) {Buku* temp = root;root = root->left;free(temp);} else {Buku* temp = findMinBuku(root->right);strcpy(root->judul, temp->judul);strcpy(root->penulis, temp->penulis);root->tahunTerbit = temp->tahunTerbit;root->right = hapusBuku(root->right, temp->judul);}}return root;}// Fungsi untuk menampilkan buku dalam tree secara inordervoid tampilkanBuku(Buku* root) {if (root != NULL) {tampilkanBuku(root->left);printf("Judul: %s\n", root->judul);printf("Penulis: %s\n", root->penulis);printf("Tahun Terbit: %d\n", root->tahunTerbit);printf("----------------------\n");tampilkanBuku(root->right);}}int main() {Buku* root = NULL;// Tambahkan buku-buku awal ke dalam treeroot = tambahBuku(root, "Harry Potter", "J.K. Rowling", 1997);root = tambahBuku(root, "The Hobbit", "J.R.R. Tolkien", 1937);root = tambahBuku(root, "To Kill a Mockingbird", "Harper Lee", 1960);// Tampilkan seluruh buku dalam treeprintf("Daftar Buku:\n");tampilkanBuku(root);// Tambahkan buku baru ke dalam treeroot = tambahBuku(root, "1984", "George Orwell", 1949);// Tampilkan kembali seluruh buku dalam tree setelah penambahanprintf("Daftar Buku setelah penambahan:\n");tampilkanBuku(root);// Hapus buku berdasarkan judulroot = hapusBuku(root, "The Hobbit");// Tampilkan kembali seluruh buku dalam tree setelah penghapusanprintf("Daftar Buku setelah penghapusan:\n");tampilkanBuku(root);return 0;}
- Hasil:
2. Sistem Organisasi Perusahaan:
- Koding Bashasa C:#include <stdio.h>#include <stdlib.h>#include <string.h>// Struktur data untuk merepresentasikan karyawantypedef struct Karyawan {char nama[50];int ID;char jabatan[50];double gaji;struct Karyawan* left;struct Karyawan* right;} Karyawan;// Fungsi untuk membuat simpul karyawan baruKaryawan* buatKaryawan(char nama[], int ID, char jabatan[], double gaji) {Karyawan* karyawan = (Karyawan*)malloc(sizeof(Karyawan));if (karyawan == NULL) {printf("Gagal melakukan alokasi memori.\n");exit(EXIT_FAILURE);}strcpy(karyawan->nama, nama);karyawan->ID = ID;strcpy(karyawan->jabatan, jabatan);karyawan->gaji = gaji;karyawan->left = NULL;karyawan->right = NULL;return karyawan;}// Fungsi untuk menambahkan karyawan ke dalam treeKaryawan* tambahKaryawan(Karyawan* root, char nama[], int ID, char jabatan[], double gaji) {if (root == NULL) {return buatKaryawan(nama, ID, jabatan, gaji);}if (ID < root->ID) {root->left = tambahKaryawan(root->left, nama, ID, jabatan, gaji);} else if (ID > root->ID) {root->right = tambahKaryawan(root->right, nama, ID, jabatan, gaji);}return root;}// Fungsi untuk mencari karyawan berdasarkan IDKaryawan* cariKaryawan(Karyawan* root, int ID) {if (root == NULL || root->ID == ID) {return root;}if (ID < root->ID) {return cariKaryawan(root->left, ID);}return cariKaryawan(root->right, ID);}// Fungsi untuk menampilkan seluruh karyawan dalam tree secara inordervoid tampilkanKaryawan(Karyawan* root) {if (root != NULL) {tampilkanKaryawan(root->left);printf("Nama: %s\n", root->nama);printf("ID: %d\n", root->ID);printf("Jabatan: %s\n", root->jabatan);printf("Gaji: %.2lf\n", root->gaji);printf("----------------------\n");tampilkanKaryawan(root->right);}}// Fungsi untuk menghapus karyawan dari tree berdasarkan IDKaryawan* hapusKaryawan(Karyawan* root, int ID) {if (root == NULL) {return root;}if (ID < root->ID) {root->left = hapusKaryawan(root->left, ID);} else if (ID > root->ID) {root->right = hapusKaryawan(root->right, ID);} else {if (root->left == NULL) {Karyawan* temp = root->right;free(root);return temp;} else if (root->right == NULL) {Karyawan* temp = root->left;free(root);return temp;}Karyawan* temp = root->right;while (temp && temp->left != NULL) {temp = temp->left;}strcpy(root->nama, temp->nama);root->ID = temp->ID;strcpy(root->jabatan, temp->jabatan);root->gaji = temp->gaji;root->right = hapusKaryawan(root->right, temp->ID);}return root;}int main() {Karyawan* root = NULL;// Menambahkan beberapa karyawan ke dalam treeroot = tambahKaryawan(root, "Andi", 1001, "Manager", 5000.00);root = tambahKaryawan(root, "Budi", 1002, "Supervisor", 4000.00);root = tambahKaryawan(root, "Cindy", 1003, "Staff", 3000.00);root = tambahKaryawan(root, "Dewi", 1004, "Staff", 3000.00);root = tambahKaryawan(root, "Eko", 1005, "Staff", 3000.00);printf("Daftar Karyawan:\n");tampilkanKaryawan(root);// Menghapus karyawan dengan ID 1003int ID = 1003;root = hapusKaryawan(root, ID);printf("Karyawan dengan ID %d telah dihapus.\n", ID);printf("Daftar Karyawan setelah penghapusan:\n");tampilkanKaryawan(root);return 0;}
- Hasil:
3. Sistem Pohon Keluarga:
- Koding Bashasa C:#include <stdio.h>#include <stdlib.h>#include <string.h>// Struktur data untuk merepresentasikan anggota keluargatypedef struct AnggotaKeluarga {char nama[50];int usia;char hubungan[50];struct AnggotaKeluarga* anak;struct AnggotaKeluarga* saudara;} AnggotaKeluarga;// Fungsi untuk membuat simpul anggota keluarga baruAnggotaKeluarga* buatAnggotaKeluarga(char nama[], int usia, char hubungan[]) {AnggotaKeluarga* anggota = (AnggotaKeluarga*)malloc(sizeof(AnggotaKeluarga));if (anggota == NULL) {printf("Gagal melakukan alokasi memori.\n");exit(EXIT_FAILURE);}strcpy(anggota->nama, nama);anggota->usia = usia;strcpy(anggota->hubungan, hubungan);anggota->anak = NULL;anggota->saudara = NULL;return anggota;}// Fungsi untuk menambahkan anggota keluarga baru ke dalam treeAnggotaKeluarga* tambahAnggotaKeluarga(AnggotaKeluarga* root, char nama[], int usia, char hubungan[]) {if (root == NULL) {return buatAnggotaKeluarga(nama, usia, hubungan);}if (root->anak == NULL) {root->anak = tambahAnggotaKeluarga(root->anak, nama, usia, hubungan);} else {AnggotaKeluarga* temp = root->anak;while (temp->saudara != NULL) {temp = temp->saudara;}temp->saudara = tambahAnggotaKeluarga(temp->saudara, nama, usia, hubungan);}return root;}// Fungsi untuk mencari anggota keluarga berdasarkan namaAnggotaKeluarga* cariAnggotaKeluarga(AnggotaKeluarga* root, char nama[]) {if (root == NULL || strcmp(root->nama, nama) == 0) {return root;}AnggotaKeluarga* temp = root->anak;while (temp != NULL) {AnggotaKeluarga* result = cariAnggotaKeluarga(temp, nama);if (result != NULL) {return result;}temp = temp->saudara;}return NULL;}// Fungsi untuk menampilkan seluruh anggota keluarga dalam treevoid tampilkanAnggotaKeluarga(AnggotaKeluarga* root) {if (root != NULL) {printf("Nama: %s\n", root->nama);printf("Usia: %d\n", root->usia);printf("Hubungan: %s\n", root->hubungan);printf("----------------------\n");AnggotaKeluarga* temp = root->anak;while (temp != NULL) {tampilkanAnggotaKeluarga(temp);temp = temp->saudara;}}}// Fungsi untuk menghapus anggota keluarga dari tree berdasarkan namaAnggotaKeluarga* hapusAnggotaKeluarga(AnggotaKeluarga* root, char nama[]) {if (root == NULL) {return root;}if (strcmp(root->nama, nama) == 0) {return NULL;}AnggotaKeluarga* temp = root->anak;if (temp != NULL && strcmp(temp->nama, nama) == 0) {root->anak = temp->saudara;free(temp);} else {while (temp != NULL && temp->saudara != NULL) {if (strcmp(temp->saudara->nama, nama) == 0) {AnggotaKeluarga* toDelete = temp->saudara;temp->saudara = toDelete->saudara;free(toDelete);break;}temp = temp->saudara;}}temp = root->anak;while (temp != NULL) {temp->anak = hapusAnggotaKeluarga(temp->anak, nama);temp = temp->saudara;}return root;}int main() {AnggotaKeluarga* keluarga = NULL;// Menambahkan anggota keluarga baru ke dalam treekeluarga = tambahAnggotaKeluarga(keluarga, "Andi", 30, "Ayah");keluarga = tambahAnggotaKeluarga(keluarga, "Cindy", 28, "Ibu");keluarga = tambahAnggotaKeluarga(keluarga, "Budi", 10, "Anak");// Menampilkan seluruh anggota keluarga dalam treeprintf("Daftar Anggota Keluarga:\n");tampilkanAnggotaKeluarga(keluarga);// Menghapus anggota keluarga dengan nama "Cindy"char nama[] = "Cindy";keluarga = hapusAnggotaKeluarga(keluarga, nama);printf("Anggota keluarga dengan nama %s telah dihapus.\n", nama);// Menampilkan seluruh anggota keluarga setelah penghapusanprintf("Daftar Anggota Keluarga setelah penghapusan:\n");tampilkanAnggotaKeluarga(keluarga);return 0;}
- Hasil:
Tidak ada komentar:
Posting Komentar