KONSEP POINTER DAN LINKED LIST

Untuk mengolah data yang banyaknya tidak bisa ditentukan sebelumnya, maka disediakan satu fasilitas yang memungkinkan untuk menggunakan suatu perubah yang disebut dengan perubah dinamis (Dinamic Variable), Perubah dinamis adalah suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

DEKLARASI POINTER

Pointer digunakan sebagai penunjuk di suatu alamat memori, dalam pemograman c++, Type data pointer dideklarasikan dengan bentuk umum :

Type Data*Nama Variabel;

Type data misalnya dapat berupa char, int atau float sedangkan nama variabel merupakan nama variabel pointer.

LINKED LIST
Dalam pemakaian sehari - hari istilah linked list (senarai berantai) adalah kumpulan linear sebuah data contoh senarai berantai adalah data yang berisi daftar belanjaan, yang berupa barang pertama, kedua,, ketiga dan seterusnya, untuk hari berikutnya maka daftar terdebut bisa berubah sesuai barang yang harus dibeli lagi atau barang yang tidak perlu dibeli lagi. Daftar belanjaan semula bisa ditambah 3 barang lain dan menghapus dua barang (dgn mencoret) yang tidak perlu dibeli lagi.
Setiap simpul dalam suatu linked list terbagi menjasi 2 bagian yaitu :
1. Medan Informasi
Berisi informasi yang akan disimpan dan diolah
2 Medan Penyambung
Berisi alamat berikutnya. Bernilai 0, jika link tersebut tidak menunjuk ke data (Simpul)
lainya. Penunjuk ini disebut penunjuk nol.
Linked list juga mengandung sebuah variabel penunjuk list, yamg biasanya diberi nama START (AWAL) yang berisi alamat dari simpul pertama dalam list.

BENTUK NODE SINGLE LINKLED LIST NON CIRCULAR

Single : field pointer-nya hanya satu arah, pada akhir not pointer-nya menunjuk NULL
Linked List : Node - node tersebut saling terhubung satu sama lain
setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Mode terakhir akan menunjuk NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.

SINGLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD

Dibutuhkan satu buah variabel pointer : head yang akan selaku menunjuk pada node pertama
Deklarasi Pointer Penunjuk Head Single Linked List sebagai berikut :

TNode*head

Menambah Node Di Depan
Penambahan node baru akan dikaitan di node paling depan, namun pada daat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara : node head ditunjukan ke node baru tersebut
Prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap sekaku menjadi data terdepan.

Menambah Node Di Belakang
Penambahan dilakukan di belakang, namin pada saat pertama kali, node langsung ditunjuk oleh head, membutuhkan pointer bantu untuk mengetahui node terbelakang kemudian dikaitkan dengan node baru, perlu digunakan perulangan.

Menghapus Node Di Depan
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunaan suatu pointer lain (hapus) yang digunakan untuk menunjuk node yang akan dihapus, barulah kemusian menghapus pointer menggunakan perintah delete. Sebelum data terdepan terhapus, terlebih dahulu head harus menunhuk ke alamat berikutnya agar list tidak putus, jika head masih NULL berarti data masih kosong.

Menghapus Node Di Belakang
Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus, Pointer bantu untuk menunjuk node sebelum node yang akan dihapus yang akan menjadi node yang terakhir. Pointer bantu digunakan untuk menunjuk ke nilai NULL selalu bergerak sampai sebelum node yang akan dihapus kemudian pointer hapus diletakan setelah pointer bantu. Selanjutnya pointer hapus akan menunjuk ke NULL.

SINGLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAS DAN TAIL

Dibutuhkan dua variabel pointer head dan tail. Head selalu menunjuk ke node pertama, sedangkan tail selalu menunjuk ke node terakhir
Kelebihan dari single liked list dengan heag dan tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu.

Menghapus Node Di Depan (Dengan Head dan Tail)
Penghapusan node tidak boleh dilakukan jika keadaan node sadang ditunjuk oleh pointer, maka harus dilakukan penunjukan terlebih dahulu dengan pointer hapus pada head, kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus pointer hapus dengan menggunakan perintak delete. Jika tail masih NULL maka berarti list masih kosong.

Menghapus Node Di Belakang(Dengan Head Dan Tail)
Penghapusan tidak boleh dilakukan jika keasaan node dedang ditunjuk oleh pointer, maka harus dilakukan penunjukan terlebih dahulu dengan mengginakan variabel hapus pada tail. JIka Tail masih NULL maka berarti list masih kosong. Dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya dampai debelim tail, sehingga tail dapat ditunjukan ke bantu, dan bantu tersebut akan nenjadi tail yang baru. Setelah itu hapus pointer hapus dengan menggunakan menggunakn perintah delete.