PRAKTIKUM 10: Menerapkan struktur data linked list dalam pemrograman

 V. Prosedur Praktikum

Praktekan Latihan Berikut:

Soal Praktek 1: Sistem Manajemen Buku

1) 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.


Soal Praktek 2: Sistem Antrian Pasien Rumah Sakit

2) 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.


Soal Praktek 3: Sistem Pencatatan Transaksi Penjualan

3) 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.

1. Jawaban Soal Praktek 1: Sistem Manajemen Buku

▪ Buka Text Editor Code::Blocks,

▪ Pilih menu klik file → New→Empty File

▪ Ketikan koding di bawah ini

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


// Struktur data untuk buku

struct Buku {

    char judul[100];        // Menyimpan judul buku

    char penulis[100];      // Menyimpan nama penulis

    int tahunTerbit;        // Menyimpan tahun terbit buku

    struct Buku* next;      // Pointer untuk menunjuk ke buku berikutnya dalam linked list

};


// 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);  // Membaca judul dengan spasi

                printf("Masukkan Nama Penulis: ");

                scanf(" %[^\n]s", penulis);  // Membaca penulis dengan spasi

                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);  // Membaca judul yang akan dihapus

                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;

}

▪ Klik menu file Save, ketikan nama
▪ Klik Build →Build and Run atau icon
▪ berikut hasilnya

Program di atas merupakan implementasi sederhana dari sistem

manajemen buku menggunakan linked list dalam bahasa C. Program

ini memungkinkan pengguna untuk menambahkan buku baru ke dalam

linked list, menghapus buku berdasarkan judul, dan menampilkan

seluruh daftar buku yang ada.

Berikut adalah penjelasan singkat tentang struktur dan fungsi

utama dalam program:

Struktur Buku:

• Merupakan struktur data yang merepresentasikan sebuah buku

dengan tiga atribut: judul (judul), penulis (penulis), dan

tahun terbit (tahunTerbit).

• Memiliki pointer next yang menunjuk ke buku berikutnya dalam

linked list.

Fungsi tambahBuku():

• Membuat node baru untuk buku yang ingin ditambahkan.

• Mengisi informasi buku seperti judul, penulis, dan tahun

terbit.

• Menambahkan buku baru ke akhir linked list.

Fungsi hapusBuku():

• Mengecek apakah linked list kosong atau tidak.

• Jika buku yang ingin dihapus merupakan buku pertama dalam

linked list, maka buku tersebut dihapus dan kepala linked

list diubah.

• Jika buku yang ingin dihapus berada di tengah atau akhir

linked list, maka buku tersebut dihapus dan pointer next

sebelumnya diubah.

Fungsi tampilkanBuku():

• Menampilkan seluruh informasi buku dalam linked list.

• Menggunakan perulangan untuk mengunjungi setiap node buku

dalam linked list dan mencetak informasinya.

Fungsi hapusSemuaBuku():

• Menghapus seluruh node buku dalam linked list.

• Menggunakan perulangan untuk mengunjungi setiap node dan

membebaskan memori yang dialokasikan.

Fungsi main():

• Berfungsi sebagai menu utama program.

• Menggunakan perulangan do-while untuk menampilkan menu dan

menerima input dari pengguna.

• Berdasarkan pilihan pengguna, fungsi-fungsi yang sesuai

dipanggil untuk menjalankan operasi yang diinginkan.

• Program akan berjalan terus menerus hingga pengguna memilih

opsi keluar (0).

Program ini memberikan pengguna kontrol penuh dalam mengelola

buku-buku dalam sistem manajemen buku menggunakan operasi

linked list seperti menambahkan, menghapus, dan menampilkan

buku.


2. Jawaban Soal Praktek 2: Sistem Antrian Pasien Rumah Sakit

▪ Buka Text Editor Code::Blocks,

▪ Pilih menu klik file → New→Empty File

▪ Ketikan koding di bawah ini

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


// Struktur data pasien

struct Pasien {

    char nama[50];             // Nama pasien

    int nomorRekamMedis;       // Nomor rekam medis pasien

    char jenisPenyakit[50];    // Jenis penyakit pasien

    struct Pasien* next;       // Pointer untuk menunjuk ke pasien berikutnya dalam antrian

};


// Fungsi untuk menambahkan pasien ke dalam linked list antrian

void tambahPasien(struct Pasien** head, char nama[], int nomorRekamMedis, char jenisPenyakit[]) {

    // Membuat node baru untuk pasien

    struct Pasien* newPasien = (struct Pasien*)malloc(sizeof(struct Pasien));


    // Mengisi informasi pasien

    strcpy(newPasien->nama, nama);

    newPasien->nomorRekamMedis = nomorRekamMedis;

    strcpy(newPasien->jenisPenyakit, jenisPenyakit);

    newPasien->next = NULL;


    // Jika antrian kosong, pasien menjadi pasien pertama

    if (*head == NULL) {

        *head = newPasien;

    } else {

        // Jika antrian tidak kosong, mencari posisi akhir antrian

        struct Pasien* temp = *head;

        while (temp->next != NULL) {

            temp = temp->next;

        }

        // Menambahkan pasien baru ke akhir antrian

        temp->next = newPasien;

    }


    printf("Pasien '%s' telah ditambahkan ke antrian.\n", nama);

}


// Fungsi untuk memanggil pasien berikutnya dalam antrian

void panggilPasien(struct Pasien** head) {

    if (*head == NULL) {

        // Jika antrian kosong, tidak ada pasien yang dipanggil

        printf("Antrian kosong. Tidak ada pasien yang dipanggil.\n");

    } else {

        // Menghapus pasien pertama dari antrian

        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);  // Menghapus data pasien yang telah dipanggil

    }

}


// Fungsi untuk menampilkan seluruh pasien dalam antrian

void tampilkanAntrian(struct Pasien* head) {

    if (head == NULL) {

        // Jika antrian kosong, tidak ada pasien yang ditampilkan

        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;

        }

    }

}


// Fungsi untuk menghapus seluruh pasien dalam antrian

void hapusAntrian(struct Pasien** head) {

    struct Pasien* current = *head;

    struct Pasien* next;


    while (current != NULL) {

        next = current->next;

        free(current);

        current = next;

    }


    *head = NULL;  // Mengatur head ke NULL setelah seluruh antrian dihapus

    printf("Seluruh antrian telah dihapus.\n");

}


int main() {

    struct Pasien* antrian = NULL;  // Inisialisasi antrian pasien sebagai 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: ");

        scanf("%d", &pilihan);


        switch (pilihan) {

            case 1: {

                char nama[50];

                int nomorRekamMedis;

                char jenisPenyakit[50];


                printf("\nTambah Pasien ke Antrian\n");

                printf("Masukkan Nama Pasien: ");

                scanf("%s", nama);  // Membaca nama pasien

                printf("Masukkan Nomor Rekam Medis: ");

                scanf("%d", &nomorRekamMedis);  // Membaca nomor rekam medis

                printf("Masukkan Jenis Penyakit: ");

                scanf("%s", jenisPenyakit);  // Membaca jenis penyakit


                tambahPasien(&antrian, nama, nomorRekamMedis, jenisPenyakit);

                break;

            }

            case 2: {

                printf("\nPanggil Pasien berikutnya\n");

                panggilPasien(&antrian);  // Memanggil pasien berikutnya

                break;

            }

            case 3: {

                printf("\nTampilkan Seluruh Pasien dalam Antrian\n");

                tampilkanAntrian(antrian);  // Menampilkan seluruh pasien dalam antrian

                break;

            }

            case 0: {

                printf("\nProgram selesai.\n");

                break;

            }

            default:

                printf("\nPilihan tidak valid. Silakan pilih opsi yang benar.\n");

        }

    } while (pilihan != 0);


    // Menghapus seluruh pasien dalam antrian sebelum program berakhir

    hapusAntrian(&antrian);


    return 0;

}


▪ Klik menu file Save, ketikan nama

▪ Klik Build →Build and Run atau icon

▪ berikut hasilnya



Program di atas menggunakan linked list untuk

mengimplementasikan sistem antrian pasien di rumah sakit.

Berikut penjelasan singkat tentang program tersebut:

1) Struktur Pasien:

✓ Merupakan struktur data yang merepresentasikan sebuah pasien

dengan tiga atribut: nama (nama), nomor rekam medis

(nomorRekamMedis), dan jenis penyakit (jenisPenyakit).

✓ Memiliki pointer next yang menunjuk ke pasien berikutnya

dalam linked list.

2) Fungsi tambahPasien():

✓ Membuat node baru untuk pasien yang ingin ditambahkan.

✓ Mengisi informasi pasien seperti nama, nomor rekam medis,

dan jenis penyakit.

✓ Menambahkan pasien baru ke akhir linked list antrian.

3) Fungsi panggilPasien():

✓ Mengecek apakah antrian kosong atau tidak.

✓ Jika antrian kosong, pesan akan ditampilkan.

✓ Jika antrian tidak kosong, pasien pertama dalam antrian

dipanggil dan dihapus dari linked list antrian.

4) Fungsi tampilkanAntrian():

✓ Mengecek apakah antrian kosong atau tidak.

✓ Jika antrian kosong, pesan akan ditampilkan.

✓ Jika antrian tidak kosong, menampilkan seluruh pasien dalam

antrian, termasuk informasi seperti nama, nomor rekam medis,

dan jenis penyakit.

5) Fungsi hapusAntrian():

✓ Menghapus seluruh pasien dalam antrian dengan melakukan

iterasi melalui linked list dan membebaskan setiap node.

6) Fungsi main():

✓ Menjalankan program utama dengan menggunakan sebuah loop

yang terus berjalan sampai pilihan keluar (0) dipilih.

✓ Menampilkan opsi menu kepada pengguna dan meminta input

pilihan.

✓ Memanggil fungsi-fungsi yang sesuai berdasarkan pilihan

pengguna.

Program ini memungkinkan pengguna untuk menambahkan pasien

baru ke dalam antrian, memanggil pasien berikutnya untuk

dilayani, serta menampilkan seluruh pasien dalam antrian.

Program ini juga secara otomatis menghapus seluruh pasien dalam

antrian sebelum program berakhir untuk mencegah kebocoran

memori.

Dalam implementasinya, program menggunakan linked list untuk

mengatur dan mengakses data pasien secara efisien. Setiap

pasien direpresentasikan sebagai sebuah node dalam linked

list, dan operasi-operasi seperti penambahan dan penghapusan

pasien dapat dilakukan dengan mengubah alamat pointer.


3. Jawaban Soal Praktek 3: Sistem Pencatatan Transaksi Penjualan

▪ Buka Text Editor Code::Blocks,

▪ Pilih menu klik file → New→Empty File

▪ Ketikan koding di bawah ini

#include <stdio.h>

#include <stdlib.h>


#define MAX_SIZE 100


// Struktur data untuk Proses

typedef struct {

    char nama[50];  // Nama proses

} Proses;


// Struktur data untuk Queue

typedef struct {

    Proses data[MAX_SIZE];  // Array untuk menyimpan proses

    int front;               // Indeks depan antrian

    int rear;                // Indeks belakang antrian

} Queue;


// Fungsi untuk menginisialisasi antrian

void initializeQueue(Queue *q) {

    q->front = -1;

    q->rear = -1;

}


// Fungsi untuk mengecek apakah antrian penuh

int isFull(Queue *q) {

    return (q->rear == MAX_SIZE - 1);

}


// Fungsi untuk mengecek apakah antrian kosong

int isEmpty(Queue *q) {

    return (q->front == -1 || q->front > q->rear);

}


// Fungsi untuk menambahkan proses ke dalam antrian

void enqueue(Queue *q, Proses proses) {

    if (isFull(q)) {

        printf("Antrian penuh, tidak bisa menambahkan proses.\n");

    } else {

        if (q->front == -1) {

            q->front = 0;  // Menandai bahwa antrian tidak kosong

        }

        q->rear++;  // Menaikkan indeks rear

        q->data[q->rear] = proses;  // Menambahkan proses ke dalam antrian

        printf("Proses %s ditambahkan ke dalam antrian.\n", proses.nama);

    }

}


// Fungsi untuk menghapus (mengeksekusi) proses dari antrian

void dequeue(Queue *q) {

    if (isEmpty(q)) {

        printf("Antrian kosong, tidak ada proses yang dieksekusi.\n");

    } else {

        Proses proses = q->data[q->front];

        q->front++;  // Menggeser posisi front untuk menghapus proses

        printf("Proses %s telah dieksekusi dan dikeluarkan dari antrian.\n", proses.nama);

    }

}


// Fungsi untuk menampilkan seluruh proses dalam antrian

void displayQueue(Queue *q) {

    if (isEmpty(q)) {

        printf("Antrian kosong.\n");

    } else {

        printf("Data Proses dalam Antrian:\n");

        for (int i = q->front; i <= q->rear; i++) {

            Proses proses = q->data[i];

            printf("Proses %s\n", proses.nama);

        }

    }

}


int main() {

    Queue q;

    initializeQueue(&q);  // Inisialisasi antrian kosong


    // Menambahkan beberapa proses ke dalam antrian

    Proses proses1 = {"Proses A"};

    Proses proses2 = {"Proses B"};

    Proses proses3 = {"Proses C"};


    enqueue(&q, proses1);

    enqueue(&q, proses2);

    enqueue(&q, proses3);


    // Menampilkan seluruh proses dalam antrian

    displayQueue(&q);


    // Menjalankan (menghapus) beberapa proses dari antrian

    dequeue(&q);

    dequeue(&q);


    // Menampilkan antrian setelah beberapa proses dieksekusi

    displayQueue(&q);


    return 0;

}

▪ Klik menu file Save, ketikan nama
▪ Klik Build →Build and Run atau icon
▪ berikut hasilnya

Program ini menggunakan linked list dalam bahasa C. Program
ini memiliki beberapa fitur, yaitu:
1) Fungsi tambahTransaksi():
✓ Menambahkan transaksi baru ke dalam linked list dengan
menyediakan nomor transaksi, tanggal, dan total pembelian.

✓ Transaksi baru akan ditambahkan di akhir linked list.
2) Fungsi hapusTransaksi():
✓ Menghapus transaksi dari linked list berdasarkan nomor
transaksi yang diberikan.
✓ Jika transaksi dengan nomor tersebut tidak ditemukan, pesan
akan ditampilkan.
3) Fungsi tampilkanTransaksi():
✓ Menampilkan seluruh transaksi dalam linked list, termasuk
nomor transaksi, tanggal, dan total pembelian.
✓ Jika linked list kosong, pesan akan ditampilkan.
4) Fungsi hapusLinkedlist():
✓ Membebaskan memori yang dialokasikan untuk linked list
dengan menghapus semua node.
5) Fungsi main():
✓ Menjalankan program utama dengan menggunakan sebuah loop
yang terus berjalan sampai pilihan keluar (0) dipilih.
✓ Menampilkan opsi menu kepada pengguna dan meminta input
pilihan.
✓ Memanggil fungsi yang sesuai berdasarkan pilihan pengguna.

Program ini memberikan kemampuan kepada pengguna untuk
menambahkan, menghapus, dan menampilkan transaksi penjualan
dalam sistem. Semua transaksi disimpan dalam linked list, yang
memungkinkan pengguna untuk melihat riwayat transaksi dengan
mudah.

Studi Kasus operasi dasar pada linked list
Andi memiliki sejumlah data nama-nama buah yang ingin dia kelola menggunakan linked list
dalam program C. Dia ingin membuat program yang dapat menambahkan buah baru ke dalam
linked list, menghapus buah dari linked list berdasarkan nama, dan menampilkan seluruh daftar
buah dalam linked list.
Tugas Anda adalah membuat program dalam bahasa C yang memenuhi kebutuhan Andi dengan
mengimplementasikan linked list dan fitur-fitur berikut:
1. Fungsi tambahBuah(): Menerima input nama buah dari pengguna dan menambahkannya ke
dalam linked list.
2. Fungsi hapusBuah(): Menerima input nama buah dari pengguna dan menghapus buah tersebut
dari linked list.
3. Fungsi tampilkanBuah(): Menampilkan semua buah dalam linked list.
Buatlah program yang dapat memenuhi kebutuhan Andi dengan menggunakan operasi dasar pada
linked list, yaitu penambahan (tambahBuah) dan penghapusan (hapusBuah) elemen, serta
menampilkan (tampilkanBuah) seluruh elemen dalam linked list.

1. Jawaban Soal

▪ Buka Text Editor Code::Blocks,

▪ Pilih menu klik file → New→Empty File

▪ Ketikan koding di bawah ini

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


struct Node {

    char namaBuah[50];

    struct Node* next;

};


void tambahBuah(struct Node** head, char namaBuah[]) {

    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

    strcpy(newNode->namaBuah, namaBuah);

    newNode->next = NULL;


    if (*head == NULL) {

        *head = newNode;

    } else {

        struct Node* current = *head;

        while (current->next != NULL) {

            current = current->next;

        }

        current->next = newNode;

    }


    printf("Buah '%s' berhasil ditambahkan ke dalam linked list.\n", namaBuah);

}


void hapusBuah(struct Node** head, char namaBuah[]) {

    if (*head == NULL) {

        printf("Linked list kosong. Tidak ada buah untuk dihapus.\n");

        return;

    }


    if (strcmp((*head)->namaBuah, namaBuah) == 0) {

        struct Node* temp = *head;

        *head = (*head)->next;

        free(temp);

        printf("Buah '%s' berhasil dihapus dari linked list.\n", namaBuah);

        return;

    }


    struct Node* prev = *head;

    struct Node* current = (*head)->next;

    while (current != NULL) {

        if (strcmp(current->namaBuah, namaBuah) == 0) {

            prev->next = current->next;

            free(current);

            printf("Buah '%s' berhasil dihapus dari linked list.\n", namaBuah);

            return;

        }

        prev = current;

        current = current->next;

    }


    printf("Buah '%s' tidak ditemukan dalam linked list.\n", namaBuah);

}


void tampilkanBuah(struct Node* head) {

    if (head == NULL) {

        printf("Linked list kosong. Tidak ada buah yang ditampilkan.\n");

        return;

    }


    printf("Daftar Buah dalam Linked List:\n");

    struct Node* current = head;

    while (current != NULL) {

        printf("%s\n", current->namaBuah);

        current = current->next;

    }

}


int main() {

    struct Node* head = NULL;

    int pilihan;

    char namaBuah[50];


    do {

        printf("\n");

        printf("=== Sistem Manajemen Buah ===\n");

        printf("1. Tambah Buah\n");

        printf("2. Hapus Buah\n");

        printf("3. Tampilkan Buah\n");

        printf("4. Keluar\n");

        printf("Pilih menu (1-4): ");

        scanf("%d", &pilihan);


        switch (pilihan) {

            case 1:

                printf("Masukkan nama buah yang ingin ditambahkan: ");

                scanf(" %49s", namaBuah);

                tambahBuah(&head, namaBuah);

                break;

            case 2:

                printf("Masukkan nama buah yang ingin dihapus: ");

                scanf(" %49s", namaBuah);

                hapusBuah(&head, namaBuah);

                break;

            case 3:

                tampilkanBuah(head);

                break;

            case 4:

                printf("Terima kasih. Program selesai.\n");

                break;

            default:

                printf("Pilihan tidak valid. Silakan pilih kembali.\n");

        }

    } while (pilihan != 4);


    struct Node* current = head;

    while (current != NULL) {

        struct Node* temp = current;

        current = current->next;

        free(temp);

    }


    return 0;

}

▪ Klik menu file Save, ketikan nama
▪ Klik Build →Build and Run atau icon
▪ berikut hasilnya

Program ini menggunakan linked list untuk menyimpan dan

mengelola daftar buah.

1. Fungsi tambahBuah() digunakan untuk menambahkan buah baru

ke dalam linked list. Fungsi ini akan membuat node baru,

mengisi data buah, dan menambahkannya ke akhir linked list.

2. Fungsi hapusBuah() digunakan untuk menghapus buah dari

linked list berdasarkan nama. Fungsi ini akan mencari buah

dengan nama yang sesuai, menghapusnya dari linked list, dan

membebaskan memori yang digunakan oleh node tersebut.

3. Fungsi tampilkanBuah() digunakan untuk menampilkan seluruh

daftar buah yang ada dalam linked list.

4. Pada fungsi main(), program akan menampilkan menu pilihan

kepada pengguna. Pengguna dapat memilih untuk menambahkan

buah baru, menghapus buah, menampilkan daftar buah, atau

keluar dari program.

➢ Program akan terus berjalan hingga pengguna memilih opsi

keluar (pilihan 4).

➢ Sebelum program berakhir, semua node pada linked list

akan dihapus dan memori yang digunakan akan dibebaskan.

➢ Program ini memungkinkan Andi untuk mengelola daftar buah

dengan menggunakan operasi dasar pada linked list. Andi

dapat menambahkan buah baru, menghapus buah berdasarkan

nama, dan menampilkan seluruh daftar buah yang tersedia.


Comments

Popular posts from this blog

PRAKTIKUM 11: Menggunakan struktur data tree dalam pemrograman

PRAKTIKUM 3: Menggunakan fungsi dan prosedur dalam pemrograman

1 .pengantar pemrograman