Senarai Berantai/Linked List dan Contoh Programnya dalam Bahasa C

   Latihan Bahasa C #44   

LINKED LIST / SENARAI BERANTAI

Senarai Berantai adalah struktur data yang berisi kumpulan data yang disusun secara Linear dengan setiap data disimpan dalam sebuah simpul dan antara satu simpul dengan simpul yang lain dihubungkan melalui Pointer. Untuk yang belum mempelajari Pointer, silahkan kunjungi artikel tentang Pointer dan Contoh Programnya dalam Bahasa C. Senarai Berantai atau Linked List mempunyai bentuk dasar dengan sifat data disisipkan ke dalam senarai melalui salah satu ujungnya.

Operasi Dasar dalam Senarai Berantai
  1. Insert() menyatakan operasi untuk memasukkan data kedalam Senarai Berantai pada posisi yang ditunjuk oleh Pointer pertama. Operasi ini biasa dinyatakan dengan insert(S, d)
  2. Find() menyatakan operasi untuk mencari suatu data dalam Senarai Berantai. Operasi ini biasa dinyatakan dengan fungsi find(pendahulu, x). Nilai baliknya berupa True atau False.
  3. Remove() menyatakan operasi untuk menghilangkan sebuah simpul dari Senarai Berantai. Operasi ini biasa dinyatakan dengan remove(S, x).
Aplikasi Senarai Berantai
Senarai Berantai dapat digunakan untuk menyimpan data apa saja yang terkait dengan suatu daftar data. Tumpukan/Stack dan Antrian/Queue biasa diimplementasikan dengan menggunakan suatu daftar data. Berikut dibawah ini adalah Contoh Program dari Linked List/Senarai Berantai.

Kode Program Bahasa C :
#include
#include
#include
#include

using namespace std;

struct angka{
    int data;
    angka *next;
};
angka *head;
int data_kosong(){
    if (head==NULL)
        return 1;
    else return 0;
}
void data_depan(int databaru){
    angka *baru;
    baru = new angka;
    baru->data = databaru;
    baru->next = NULL;
    if (data_kosong()==1){
        head=baru;
        head->next=NULL;
    }else{
        baru->next=head;
        head=baru;
    }
    printf("\t\t\tAngka %d Berhasil di Simpan\n", databaru);
    printf("\t\t\t____________________________________________\n");
}
void tampil_data(){
    angka *bantu;
    bantu=head;
    if(data_kosong()==0){
            printf("\t\t\t--------------------------------------------\n");
            printf("\t\t\tData yang telah di Masukkan :\n\n");
            printf("\t\t\t");
        while(bantu != NULL) {
            printf(" %d ", bantu->data);
            bantu=bantu->next;
        }   printf("\n\t\t\t--------------------------------------------\n");
    } else printf("\n\t\t\tData Kosong!!!\n\n");
}
void hapus_depan() {
    angka *hapus;
    int depan;
    if (data_kosong()==0){
        if (head->next!= NULL) {
            hapus=head;
            depan=hapus->data;
            head=head->next;
            delete hapus;
        }else{
            depan=head->data;
            head=NULL;
        }
        printf("\n\t\t\tAngka %d Terhapus\n",depan);
        printf("\t\t\t--------------------------------------------\n");
    } else printf("\t\t\tData Kosong!!!\n\n");
}
void hapus_belakang(){
    angka *hapus,*bantu;
    int belakang;
    if (data_kosong()==0){
        if(head->next != NULL){
            bantu=head;
        while(bantu->next->next!=NULL){
        bantu=bantu->next;
        }
        hapus=bantu->next;
        belakang=hapus->data;
        bantu->next=NULL;
        delete hapus;
    }else{
        belakang=head->data;
        head=NULL;
        }
        printf("\n\t\t\tAngka %d Terhapus\n", belakang);
        printf("\t\t\t--------------------------------------------\n");
        }else printf("\t\t\tData Kosong!!!\n\n");
}
void hapus_data(){
    angka *hapus, *bantu;
    bantu=head;
    while(bantu !=NULL){
        hapus=bantu;
        bantu=bantu->next;
        delete hapus;
    }head=NULL;
    printf("\n\t\t\tSemua Data Terhapus\n");
    printf("\t\t\t--------------------------------------------\n");
}
void data_belakang (int databaru){
    angka *baru,*bantu;
    baru=new angka;
    baru->data=databaru;
    baru->next=NULL;
    if(data_kosong()==1){
        head=baru;
        head->next=NULL;
    }else{
        bantu=head;
    while(bantu->next!=NULL){
        bantu=bantu->next;
    }
    bantu->next = baru;
    }
    printf("\t\t\tAngka %d Berhasil di Simpan\n", databaru);
    printf("\t\t\t--------------------------------------------\n");
}
int main(){
    system("color A0");
    int databaru;
    int pilihan;
    menu :
    printf("\t\t\t____________________________________________\n");
    printf("\t\t\t----------------LINKED LIST-----------------\n\n");
    printf("\t\t\t  -MENU-\n\n");
    printf("\t\t\t1. Masukkan Data dari Depan\n");
    printf("\t\t\t2. Masukkan Data dari Belakang\n");
    printf("\t\t\t3. Tampilkan Data\n");
    printf("\t\t\t4. Hapus dari Depan\n");
    printf("\t\t\t5. Hapus dari Belakang\n");
    printf("\t\t\t6. Hapus Semua Data\n");
    printf("\t\t\t7. Keluar\n");
    printf("\t\t\t--------------------------------------------\n\n");
    while (true){
        printf("\t\t\tPilih Menu : ");scanf("%d", &pilihan);
        if(pilihan==1){
    printf("\t\t\t--------------------------------------------\n");
            printf("\t\t\tMasukkan Data : ");scanf("%d", &databaru);
            printf("\n");
            data_depan(databaru); goto menu;
        }else if (pilihan==2){
    printf("\t\t\t--------------------------------------------\n");
            printf("\t\t\tMasukkan Data : ");scanf("%d", &databaru);
            printf("\n");
            data_belakang(databaru); goto menu;
        }else if(pilihan==3){
            tampil_data(); goto menu;
        }else if(pilihan==4){
            hapus_depan(); goto menu;
        }else if(pilihan==5){
            hapus_belakang(); goto menu;
        }else if(pilihan==6){
            hapus_data(); goto menu;
        }else if(pilihan==7){
            break;
            return EXIT_SUCCESS;
        }
    }
    printf("\n\t\t\tTekan untuk Keluar...");
    printf("\n\t\t\t--------------------------------------------\n");
    printf("\t\t\t");
    getch();
}


Hasil Output dengan F9 :


Demikian postingan saya kali ini, semoga berguna dan bermanfaat bagi kita semua. Kekurangan dan kesalahan saya mohon maaf, dan jika belum paham atau ingin bertanya berikanlah komentar dibawah. Atas kunjungannya saya ucapkan Terima Kasih.

Comments

daffa said…
Bismillah,

maaf saya izin untuk cpy paste dan saya modifikasi codenya untuk tugas UAS saya, sangat bermanfaat pembahasan dan codenya. Bolehkah diizinkan, jika iya tolong jawab kak :)

Terima kasih banyak sebelumnya...

Popular posts from this blog

Pengertian dan Contoh Sederhana tentang Stack dan Queue

Permainan Logika tentang Algoritma

Cara Menyisipkan Tanggal (JCalender) di Java NetBeans dan di Simpan dalam Database