Pengertian Linked List Dalam C++ Beserta Contoh Programnya

Pengertian Linked List Dalam C++ Beserta Contoh Programnya

Saat kalian belajar pemrograman pasti kalian akan mendapatakan materi linked list ini, di artikel kali ini mimin membuatkan materi linked list c++ beserta contoh programnya.

PENGERTIAN LINKED LIST

Linked list adalah sejumlah simpul (node) yang dikaitkan dengan simpul yang lain dengan bantuan pointer dalam suatu urutan tertentu. Suatu linked list dikatakan single linked list apabila hanya ada satu pointer yang menghubungkan setiap node (satu arah “next”).

ATURAN LINKED LIST
1. Data harus memiliki hubungan dengan yang lain.
2. Data yang terhubung tidak boleh bercabang.

PERANCANGAN LINKED LIST

1. Single Linked List C++
Tahapan pertama ialah membuat struct (karena setiap node akan berbentuk struct) Dan memiliki satu buah fungsi pointer juga bertype struct yang akan menghubungkan setiap node .

2. Double Linked List C++
Lain Halnya dengan single List, double Linked List adalah suatu linked list yang mempunyai 2 penunjuk ke data sebelumnya dan berikutnya, memiliki 2 buah pointer, setiap node akan terhubung dengan pointer kanan dan kiri.

PENJELASAN MENYIMPAN DATA PADA LINKED LIST

1 → 3 → 5 → 6 → 2 → 7

Pada linked list di atas, masing-masing data mempunyai hubungan dengan data lain. Untuk bisa benar-benar menggunakan metode linked list, kita harus mematuhi peraturan linked list. Setelah itu, kita harus menetapkan di mana posisi head dan null berada. Head merupakan data yang tidak memiliki hubungan di belakang, sedangkan null merupakan data yang paling terakhir atau yang tidak memiliki hubungan di depannya. Setiap data harus memiliki hubungan dengan data yang lain.

struct node        
{
      int data;
      node* next;
};


PENJELASAN MENYISIPAKAN DATA PADA LINKED LIST

1 → 3 → 5 → 6 → 2 → 7

Melakukan penyisipan data pada linked list di atas, dilakukan dengan cara menghapus rantai hubungan terlebih dahulu lalu memberikan angka baru dan selanjutnya memberikan rantai hubungan baru.

Jika data di tambahkan di tengah.
Misal kita akan memberi angka 2 di antara angka 1 dan 3. Maka mula-mula kita harus memutus rantai hubungan antara angka 1 dan 3. Setelah itu kita memberikan rantai hubungan baru dari angka satu menuju angka 2, dan dari angka 2 menuju angka 3.

1è 2 è 3 → 5 → 6 → 2 → 7

Jika data di tambahkan di awal.
Misal kita akan memberi angka 8 di awal. Maka mula-mula kita harus menambahkan angka 8 di awal. Lalu setelah itu memindah posisi head ke angka 8 karena angka 8 merupakan data yang pertama. Selanjutnya kita harus menghubungkan angka 8 dengan angka 1 dengan menambahkan rantai hubungan antara angka 8 dan angka 1. 

8 è  1 → 3 → 5 → 6 → 2 → 7

Jika data di tambahkan di akhir.
Misal kita akan memberi angka 9 di akhir. Maka kita perlu melakukan pemindahan null, karena null merupakan penanda akhir data.


Jadi mula-mula kita harus memberikan angka 9 setelah angka 7. Lalu menggeser posisi null ke posisi 9. Terakhir kita harus menghubungkan angka 9 dengan angka 7 dengan memberikan rantai hubungan antara angka 9 dan angka 7. 

1 → 3 → 5 → 6 → 2 → 7è 9

MENGHAPUS DATA PADA LINKED LIST

4 → 1 → 3 → 5 → 6 → 8 → 10 → 2 → 7 → 0 → 11


Misal kita akan pelakukan penghapusan pada angka 5, angka 4, dan angka 11. Maka yang kita lakukan tidaklah menghapus angka-angka tersebut secara fisik, melainkan hanya melakukan pembelokkan arah sehingga angka-angka tersebut tidak memiliki hubungan dengan angka sebelum atau sesudahnya.

Pertama kita akan menghapus angka 5. Jadi yang kita lakukan cukup melakukan pembelokkan arah pada angka 5. Maksudnya, rantai hubungan yang menuju angka 5 ( setelah angka 3 ) di buat berbelok dan tidak menuju angka 5. Kita buat rantai tersebut menuju langsung ke angka setelah 5 yaitu angka 6. Lalu rantai hubungan setelah angka 5 kita hapus.

Dengan begitu angka 5 masih ada secara fisik, tetapi tidak ada secara tampilan. Karena memang angka 5 berubah sifatnya menjadi hidden atau tersembunyi. Itu disebabkan angka 5 tidak di deklarasikan oleh rantai hubungan.

Kedua kita akan menghapus angka 4. Untuk menghapus angka 4, caranya masih sama seperti menghilangkan angka 5. Tetapi pada angka 4 kita mempunyai tambahan langkah. Yakni memindah posisi head ke angka selanjutnya yaitu angka 1.

Setelah memindah head, kita cukup menghilangkan rantai penghubung setelah angka 4 yang menuju angka 1. Dengan begitu angka 4 kini sama dengan angka 5, yaitu tersembunyi dan tidak di deklarasikan.

Ketiga kita akan menghapus angka 11. Untuk menghapus angka 11, caranya mirip dengan menghapus angka 4. Tetapi yang kita pindah bukanlah head tapi null yang berada di angka 11. Itu dikarenakan angka 11 merupakan angka terakhir dan mempunyai null sebagai penanda.

Setelah memindah null ke angka sebelumnya yakni 0. Maka kita harus menghapus rantai penghubung sebelum angka 11 yaitu setelah angka 0. Dengan begitu angka 11 menjadi tidak terdeklarasikan dan tersembunyi.

Begitulah bagaimana cara menghapus angka yang berada di awal, tengah, dan juga akhir. Secara fisik angka-angka tersebut tidak terhapus, hanya saja angka tersebut dibuat tersembunyi dan tidak dideklarasikan.

MENGHAPUS DATA PADA LINKED LIST

3 → 5 → 10 → 7 → 0

Misal kita akan melakukan pembelokkan pada data di atas. Maka kita harus melakukan proses 

menghapus / memutuskan node 10 ke 7 dan 7 ke 0.
Kemudian membelokan node dari 10 ke 0.
Kemudian membelokan node 0 ke 7, blok 7 menjadi NULL karena data terakhir.

1. Program Single Linked List C++

#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>

using namespace std;

struct TNode{
    int data;
    TNode *next;
};

TNode *head, *tail;

void init (){
    head = NULL;
    tail = NULL;
}

int isEmpty(){
    if(tail==NULL)return 1;
    else return 0;
}

void insertDepan(int databaru)
{
    TNode *baru;
    baru = new TNode;
    baru->data = databaru;
    baru->next = NULL;
    if(isEmpty()==1)
    {
        head=tail=baru;
        tail->next=NULL;
    }else
    {
        baru->next = head;
        head=baru;
    }
    cout<<"Data masuk\n";
}

void tampil(){
    TNode *bantu;
    bantu=head;
        if(isEmpty()==0)
        {
            while(bantu!=NULL)
            {
                cout<<bantu->data<<" ";
                bantu=bantu->next;
            }
        }else cout <<"Masih kosong\n";
}

void hapusDepan()
{

    TNode *hapus;
    int d;
    if (isEmpty()==0)
    {
        if(head!=tail)
        {
            hapus=head;
            d=hapus->data;
            head=head->next;
            delete hapus;
        }else
        {
            d=tail->data;
            head=tail=NULL;
        }
    cout<<d<<"terhapus";
    }else cout<<"Masih kosong\n";
}

void clear()
{
    TNode *bantu, *hapus;
    bantu =head;
    while(bantu!=NULL)
    {
        hapus=bantu;
        bantu=bantu->next;
        delete hapus;
    }
    head = NULL;
    printf("clear");
}

main()
{
    int pil, databaru;
    do
    {
        system("cls");
        cout<<endl;
        cout<<" ============================"<<endl;
        cout<<" =   PROGRAM LINKED LIST    ="<<endl;
        cout<<" ============================"<<endl;
        cout<<" = 1. Insert Depan          ="<<endl;
        cout<<" = 2. Delete Depan          ="<<endl;
        cout<<" = 3. Tampil Data           ="<<endl;
        cout<<" = 4. Clear                 ="<<endl;
        cout<<" = 5. Exit                  ="<<endl;
        cout<<" ============================"<<endl;
        cout<<" Masukan Pilihan : ";cin>>pil;
        switch (pil)
        {
            case 1: system("cls");{
                cout<<"Masukan Data = ";cin>>databaru;
                insertDepan(databaru);
                break;
            }
            case 2: system("cls");{
                hapusDepan();
                break;
            }
            case 3: system("cls");{
                tampil();
                break;
            }
            case 4: system("cls");{
                clear();
                break;
            }
            case 5: system("cls");{
                return 0;
                break;
            }
            default : system("cls");
            {
                cout<<"\n Maaf, Pilihan yang anda pilih tidak tersedia!";
            }
        }
        getch();
    }
    while (pil!=7);
}

Output:
Pengertian Linked List Dalam C++ Beserta Contoh Programnya


2. . Program Double Linked List C++

#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;


struct dataKtp {
    char nama[50];
    char alamat[50];
    char golongandarah[2];
    dataKtp *next, *prev;
};
dataKtp *awal=NULL,*akhir=NULL,*bantu,*baru,*hapus;


void inputDatadepan(){
    baru = new dataKtp;
    baru->next = NULL;
    baru->prev = NULL;
    cout << "Nama\t\t: ";
    cin >> baru->nama;
    cout << "Alamat\t\t: ";
    cin >> baru->alamat;
    cout << "Golongan darah  : ";
    cin >> baru->golongandarah;
    if (awal == NULL){
        awal = akhir = baru;
    }
    else {
        baru->next = awal;
        awal->prev = baru;
        awal = baru;
    }
    system ("cls");
}


void inputDatabelakang(){
    baru = new dataKtp;
    baru->next = NULL;
    baru->prev = NULL;
    cout << "Nama\t\t: ";
    cin >> baru->nama;
    cout << "Alamat\t\t: ";
    cin >> baru->alamat;
    cout << "Golongan darah  : ";
    cin >> baru->golongandarah;
    if (awal == NULL){
        awal = akhir = baru;
    }
    else {
        akhir->next = baru;
        baru->prev = akhir;
        akhir = baru;
    }
    system ("cls");
}


void hapusDatadepan(){
    if(awal->next == NULL){
        awal=akhir=NULL;
        cout << "Data sudah kosong";
    }else{
        hapus = awal;
        awal = awal->next;
        awal->prev = NULL;
        delete hapus;
    }
}


void outputData (){
    bantu=awal;
    while (bantu != NULL){
        cout << "Nama\t\t: "<<bantu->nama<<endl;
        cout << "Alamat\t\t: "<<bantu->alamat<<endl;
        cout << "Golongan darah  : "<<bantu->golongandarah<<endl;
        bantu = bantu->next;
    }
}


int main()
{
    int pilihan;
    do {
        cout << "----------DOUBLE LINKED LIST-----------\n";
        cout << "Pilih menu : \n";
        cout << "1. Input data di depan\n";
        cout << "2. Input data di belakang\n";
        cout << "3. Hapus data di depan\n";
        cout << "4. Output data\n";
        cout << "5. EXIT\n";
        cout << "Pilihan : ";
        cin >> pilihan;
        switch (pilihan){
        case 1 :
            inputDatadepan();
            break;
        case 2 :
            inputDatabelakang();
            break;
        case 3 :
            hapusDatadepan();
            break;
        case 4 :
            if (baru == NULL){
                    cout << "Data masih kosong !\n";
            }
            else {
                outputData();
            }
            break;
        default :
            cout << "---------EXIT---------";
            break;
        }
    }while(pilihan <= 4);
    getch();
}


output:
Pengertian Linked List Dalam C++ Beserta Contoh Programnya

Posting Komentar untuk "Pengertian Linked List Dalam C++ Beserta Contoh Programnya"

close