Full width home advertisement

Travel the world

Climb the mountains

Post Page Advertisement [Top]

 

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.

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.

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.

B. Jawaban

1. Sistem Manajemen Buku:

  • Koding Bahasa C:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    // Struktur data untuk buku
    struct Buku {
        char judul[100];
        char penulis[100];
        int tahunTerbit;
        struct Buku* next;
    };

    // Fungsi untuk menambahkan buku baru ke dalam linked list
    void tambahBuku(struct Buku** head, char judul[], char penulis[], int tahunTerbit) {
        // Membuat node buku baru
        struct Buku* bukuBaru = (struct Buku*)malloc(sizeof(struct Buku));

        // Mengisi informasi buku
        strcpy(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 head
        if (*head == NULL) {
            *head = bukuBaru;
        }
        // Jika linked list sudah berisi buku, mencari akhir linked list dan menghubungkannya dengan buku baru
        else {
            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 judul
    void hapusBuku(struct Buku** head, char judul[]) {
        // Jika linked list kosong
        if (*head == NULL) {
            printf("Tidak ada buku dalam daftar.\n");
            return;
        }

        // Jika buku yang ingin dihapus merupakan buku pertama dalam linked list
        if (strcmp((*head)->judul, judul) == 0) {
            struct Buku* temp = *head;
            *head = (*head)->next;
            free(temp);
            printf("Buku berhasil dihapus.\n");
            return;
        }

        // Mencari buku yang ingin dihapus
        struct Buku* current = *head;
        struct Buku* prev = NULL;
        while (current != NULL && strcmp(current->judul, judul) != 0) {
            prev = current;
            current = current->next;
        }

        // Jika buku tidak ditemukan
        if (current == NULL) {
            printf("Buku dengan judul '%s' tidak ditemukan.\n", judul);
            return;
        }

        // Menghubungkan node sebelum buku yang ingin dihapus dengan node setelahnya
        prev->next = current->next;
        free(current);
        printf("Buku berhasil dihapus.\n");
    }

    // Fungsi untuk menampilkan seluruh buku dalam linked list
    void tampilkanBuku(struct Buku* head) {
        // Jika linked list kosong
        if (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 buku
    void 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 berakhir
        hapusSemuaBuku(&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 angka

            switch (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 input

                    printf("Masukkan Nomor Rekam Medis: ");
                    if (scanf("%d", &nomorRekamMedis) != 1) {
                        printf("Error saat membaca Nomor Rekam Medis.\n");
                        break;
                    }
                    getchar();  // Menangkap newline (\n) setelah membaca angka

                    printf("Masukkan Jenis Penyakit: ");
                    fgets(jenisPenyakit, sizeof(jenisPenyakit), stdin);
                    jenisPenyakit[strcspn(jenisPenyakit, "\n")] = '\0';  // Menghapus newline dari input

                    tambahPasien(&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 transaksi
    typedef struct {
        int nomorTransaksi;
        char tanggal[20];
        float totalPembelian;
    } Transaksi;

    // Struktur data untuk node linked list
    typedef struct Node {
        Transaksi data;
        struct Node* next;
    } Node;

    // Fungsi untuk menambahkan transaksi baru ke dalam linked list
    void 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 transaksi
    void 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 list
    void 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 transaksi
    void 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 berakhir
        hapusSemuaTransaksi(&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.

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.

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. 
 

B. Jawaban

1. Sistem Manajemen Buku:

  • Koding Bashasa C:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    // Definisi struktur data untuk buku
    typedef struct Buku {
        char judul[100];
        char penulis[100];
        int tahunTerbit;
        struct Buku* left;
        struct Buku* right;
    } Buku;

    // Fungsi untuk membuat simpul baru pada tree
    Buku* 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 tree
    Buku* 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 kiri
        if (strcmp(judul, root->judul) < 0) {
            root->left = tambahBuku(root->left, judul, penulis, tahunTerbit);
        }
        // Jika judul buku lebih besar, tambahkan ke subtree kanan
        else if (strcmp(judul, root->judul) > 0) {
            root->right = tambahBuku(root->right, judul, penulis, tahunTerbit);
        }

        return root;
    }

    // Fungsi untuk mencari buku berdasarkan judul
    Buku* cariBuku(Buku* root, char judul[]) {
        if (root == NULL || strcmp(judul, root->judul) == 0) {
            return root;
        }

        // Jika judul buku lebih kecil, cari di subtree kiri
        if (strcmp(judul, root->judul) < 0) {
            return cariBuku(root->left, judul);
        }
        // Jika judul buku lebih besar, cari di subtree kanan
        else {
            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 judul
    Buku* hapusBuku(Buku* root, char judul[]) {
        if (root == NULL) {
            return root;
        }

        // Cari buku dengan judul yang sesuai
        if (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 penghapusan
            if (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 inorder
    void 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 tree
        root = 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 tree
        printf("Daftar Buku:\n");
        tampilkanBuku(root);

        // Tambahkan buku baru ke dalam tree
        root = tambahBuku(root, "1984", "George Orwell", 1949);

        // Tampilkan kembali seluruh buku dalam tree setelah penambahan
        printf("Daftar Buku setelah penambahan:\n");
        tampilkanBuku(root);

        // Hapus buku berdasarkan judul
        root = hapusBuku(root, "The Hobbit");

        // Tampilkan kembali seluruh buku dalam tree setelah penghapusan
        printf("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 karyawan
    typedef struct Karyawan {
        char nama[50];
        int ID;
        char jabatan[50];
        double gaji;
        struct Karyawan* left;
        struct Karyawan* right;
    } Karyawan;

    // Fungsi untuk membuat simpul karyawan baru
    Karyawan* 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 tree
    Karyawan* 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 ID
    Karyawan* 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 inorder
    void 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 ID
    Karyawan* 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 tree
        root = 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 1003
        int 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 keluarga
    typedef struct AnggotaKeluarga {
        char nama[50];
        int usia;
        char hubungan[50];
        struct AnggotaKeluarga* anak;
        struct AnggotaKeluarga* saudara;
    } AnggotaKeluarga;

    // Fungsi untuk membuat simpul anggota keluarga baru
    AnggotaKeluarga* 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 tree
    AnggotaKeluarga* 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 nama
    AnggotaKeluarga* 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 tree
    void 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 nama
    AnggotaKeluarga* 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 tree
        keluarga = tambahAnggotaKeluarga(keluarga, "Andi", 30, "Ayah");
        keluarga = tambahAnggotaKeluarga(keluarga, "Cindy", 28, "Ibu");
        keluarga = tambahAnggotaKeluarga(keluarga, "Budi", 10, "Anak");

        // Menampilkan seluruh anggota keluarga dalam tree
        printf("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 penghapusan
        printf("Daftar Anggota Keluarga setelah penghapusan:\n");
        tampilkanAnggotaKeluarga(keluarga);

        return 0;
    }
  • Hasil:


 

 

Tidak ada komentar:

Posting Komentar

Bottom Ad [Post Page]