Program Linked List C++

Halo teman-teman pembaca, pada postingan kali ini saya akan membahas tentang linked list. Apakah kalian sudah pernah mendengar tentang linked list? Linked list adalah salah satu bentuk struktur data yang berisi kumpulan data yang tersusun secara sekuensial, saling berhubungan, dinamis dan terbatas. Linked list juga dapat diartikan sebagai suatu simpul (node)  yang dikaitkan dengan simpul yang lain dalam suatu urutan tertentu. Secara teori linked list adalah sejumlah node yang dihubungkan secara linier dengan bantuan pointer.

Kita harus mengenal juga struct dan pointer sebelum membuat sebuah linked list. Karena dalam membuat linked list memerlukan struct dan pointer. Struct adalah tipe data yang dapat menyimpan kumpulan variabel dengan tipe data yang sama maupun berbeda, bahkan bisa menyimpan variabel yang bertipe data array atau struct itu sendiri. Sedangkan pointer adalah sebuah variabel yang berisi alamat memori dari variabel yang lain.

Berikut ini adalah  program linked list dalam bahasa C++ yang sudah saya coba buat. Program ini masih memiliki beberapa kekurangan. Jika kalian tertarik untuk menyempurnakannya silahkan.


#include<iostream>
#include<stdlib.h>
using namespace std;

struct node {
    int info;
    struct node *link;
};

struct node *tambahDepan(struct node *start, int dtNum);
void tambahBelakang(struct node *start, int dtNum);
void sisipPostertentu(struct node *start, int dtNum, int posisi);
struct node *hapusDepan(struct node *start, int posisi);
struct node *hapusBelakang(struct node *start, int posisi);
struct node *hapusPostertentu(struct node *start, int posisi);
void tampilNode(struct node *start);

int main() {
    int pilih, dtNum, posisi;
    char ulang;
    struct node *start=NULL;

    do {
        cout<<"MENU LINKED LISTn";
        cout<<"---------------------------------n";
        cout<<"1. Tambah node di depann";
        cout<<"2. Tambah node di belakangn";
        cout<<"3. Sisip node di posisi tertentun";
        cout<<"4. Hapus node di depann";
        cout<<"5. Hapus node di belakangn";
        cout<<"6. Hapus node di posisi tertentun";
        cout<<"7. Tampil noden";
        cout<<"Masukkan pilihan Anda : ";
        cin>>pilih;

        switch(pilih)          {
            case 1:
                cout<<"Data yang ingin dimasukkan ? ";
                cin>>dtNum;
                start = tambahDepan(start, dtNum);
                cout<<"Data "<<dtNum<<" berhasil dimasukkan di depan";
                break;

            case 2:
                cout<<"Data yang ingin dimasukkan ? ";
                cin>>dtNum;
                tambahBelakang(start, dtNum);
                break;

            case 3:
                cout<<"Data yang ingin dimasukkan ? ";
                cin>>dtNum;
                cout<<"Pada posisi ? ";
                cin>>posisi;
                sisipPostertentu(start, dtNum, posisi);
                break;

            case 4:
                cout<<"Hapus node di posisi ? ";
                cin>>posisi;
                start = hapusDepan(start, posisi);
                break;

            case 5:
                cout<<"Hapus node di posisi ? ";
                cin>>posisi;
                start = hapusBelakang(start, posisi);
                break;

            case 6:
                cout<<"Hapus node di posisi ? ";
                cin>>posisi;
                start = hapusPostertentu(start, posisi);
                break;

            case 7:
                tampilNode(start);
                break;

            default:
                cout<<"Pilihan tidak  ada";
                break;

        }
        cout<<"nKembali ke menu? [y/n]";
        cin>>ulang;
        system("cls");
    } while (ulang == 'y' || ulang == 'Y');

}

void tampilNode(struct node *start)
{
    struct node *p;
    if (start == NULL) {
        cout<<"List kosong";
    }

    p = start;
    while (p != NULL) {
            cout<<p->info<<" ";
            p=p->link;
    }
}

struct node *tambahDepan(struct node *start, int dtNum) {
    struct node *temp;
    temp = (struct node *)malloc(sizeof(struct node));
    temp->info = dtNum;
    temp->link = start;
    start = temp;
    return start;
}

void tambahBelakang(struct node *start, int dtNum) {
    struct node *temp, *p;
    if (start == NULL) {
        cout<<"Node tidak bisa ditambahkan karena list kosong";
        return;
    }
    temp = (struct node *)malloc(sizeof(struct node));
    temp->info=dtNum;
    p = start;
    while(p->link != NULL) {
        p = p->link;
    }
    p->link=temp;
    temp->link=NULL;
    cout<<"Data "<<dtNum<<" berhasil dimasukkan di belakang";
}

struct node *hapusDepan(struct node *start, int posisi) {
    struct node *p, *head, *tail;
    if (start == NULL) {
        cout<<"List kosong";
        return NULL;
    } else if (posisi == 1) {
        p = start;
        free(p);
        start = start->link;
        return start;
    }
    // MENGHITUNG JUMLAH DATA LIST
    int angka = 1;
    p = start;
    while(p->link != NULL) {
        p = p->link;
        angka++;
    }

    if(posisi > angka) {
         return start;
    }
    //JIKA POSISI DI ATAS 1
    p = start;
    for(int i = 0; i < posisi-2; i++) {
        p = p->link;
    }
    head = p;
    p = head->link;
    tail = p->link;
    head->link=tail;
    start->link = head;
    head = head;
    free(p);
    return start;
}

struct node *hapusBelakang(struct node *start, int posisi) {
    struct node *p, *head, *tail;
    if (start == NULL) {
        cout<<"List kosong";
        return NULL;
    } else if (posisi == 1) {
        p = start;
        free(p);
        start = start->link;
        return start;
    }
    // MENGHITUNG JUMLAH DATA LIST
    int angka = 1;
    p = start;
    while(p->link != NULL) {
        p = p->link;
        angka++;
    }

    if(posisi > angka) {
         return start;
    }
    //JIKA POSISI DI ATAS 1
    p = start;
    for(int i = 0; i < posisi-2; i++) {
        p = p->link;
    }
    head = p;
    p = head->link;
    tail = p->link;
    head->link=tail;
    start->link = head;
    head = head;
    free(p);
    return start;
}

struct node *hapusPostertentu(struct node *start, int posisi) {
    struct node *p, *head, *tail;
    if (start == NULL) {
        cout<<"List kosong";
        return NULL;
    } else if (posisi == 1) {
        p = start;
        free(p);
        start = start->link;
        return start;
    }
    // MENGHITUNG JUMLAH DATA LIST
    int angka = 1;
    p = start;
    while(p->link != NULL) {
        p = p->link;
        angka++;
    }

    if(posisi > angka) {
         return start;
    }
    //JIKA POSISI DI ATAS 1
    p = start;
    for(int i = 0; i < posisi-2; i++) {
        p = p->link;
    }
    head = p;
    p = head->link;
    tail = p->link;
    head->link=tail;
    start->link = head;
    head = head;
    free(p);
    return start;
}

void sisipPostertentu(struct node *start, int dtNum, int posisi) {
    struct node *temp, *p;
    if (start == NULL) {
        cout<<"Node tidak bisa ditambahkan karena list kosong";
        return;
    }
    temp = (struct node *)malloc(sizeof(struct node));
    temp->info=dtNum;
    p = start;
    for(int i=0; i < posisi-2; i++) {
        p = p->link;
    }
    p->link=temp;
    temp->link=NULL;
    cout<<"Data "<<dtNum<<" berhasil masuk di posisi "<<posisi;
}

Demikian postingan saya kali ini, semoga bermanfaat. Bila ada pertanyaan silahkan tulis di kolom komentar. Terima kasih ^_^

Post a Comment

0 Comments