Wednesday, February 26, 2020

  ATURAN LINKED LIST

Linked list mempunyai aturan:
1.      Data harus memiliki hubungan dengan yang lain.
2.      Data yang terhubung tidak boleh bercabang.


PERANCANGAN LINKED LIST

1.      Single Linked List
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
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.


Apabila didefinisikan sebuah linked list sebagai berikut:
Operasi pushDepan dapat dilakukan dengan potongan code berikut ini.
Operasi pushBelakang dapat dilakukan dengan potongan code berikut ini.
Operasi popDepan dapat dilakukan dengan potongan code berikut ini.
Operasi popBelakang dapat dilakukan dengan potongan code berikut ini.
Sedangkan untuk melihat data linked list, berikut ini adalah operasi yang biasanya digunakan:

Single linked list non circular
Single Linked List yang pointer next pada node terakhir(tail) -nya menunjuk ke Null.
1. Deklarasi node dengan struct pada single linked list:
struct tnode
{
      int data;
      struct tnode *next;
}
Gambar Sebuah Node pada Single Linked List
2. Deklarasi node untuk beberapa keperluan, seperti berikut ini:
struct tnode *head=NULL, *curr=NULL, *node=NULL;

3. Membuat elemen pertama dan menambahkan elemen di belakang Single Linked List


Single Linked List Circular:
Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya(tail) akan menunjuk ke pointer terdepannya(head).
1. Deklarasi Single Linked List Circular:
struct tnode
{
     int data;
     tnode *next;
};
void main()
{
     head = new tnode;
     head->next = head;
}

2. Menambah node dan membuat tail dari single linked list circular
Deklarasi penambahan node baru:
void main()
{
     node = new tnode;
     tail = new tnode;


     //head->next di bawah ini "masih" menunjuk ke head itu sendiri 

     //jadi, kode di bawah ini maksudnya node->next menunjuk ke head
     node->next = head->next;


     //baru di sini head->next diubah menunjuk ke node

     //hasilnya akan seperti "Gambar 6"
     head->next = node;
     tail = node;
}


3. Deklarasi menyisipkan node baru menggunakan sintak berikut:
void main()
{
     node = new tnode;
     node->next = head->next;
     head->next = node;
}
4. Deklarasi menghapus node dari single linked list circular, menggunakan sintaks berikut:
void main()
{
     hapus = new tnode;
     if( head != tail)
     {
           hapus = head;
           head = head->next;
           tail->next = head;
           delete hapus;
     }else
     {
           head = NULL;
           tail = NULL;
     }
}

Nama : Bimo Dewangga Setiawan

Sumber :
http://ramigunani.blogspot.com/2015/05/contoh-program-c-linked-list.html
http://www.nblognlife.com/2014/12/single-linked-list-pada-c.htmlhttps://socs.binus.ac.id/2017/03/15/single-linked-list/