Anda di halaman 1dari 5

POINTER & SINGLE LINKED LIST

3.1 POINTER
Definisi:
Pointer adalah variabel yang nilainya merupakan address dari variabel lain.

3.1.1 Pointer dan Address


Pointer akan sering digunakan didalam C. Pada umumnya program akan menjadi
kompak dan lebih efisien dengan bantuan pointer. Jika kita mendefinisikan suatu
variabel menjadi pointer, maka variabel tersebut mengandung address tempat variabel
tersebut akan dialokasikan, tetapi bukan nilai address itu sendiri. Karena pointer
mengandung suatu objek, kita dapat mengakses obyek tersebut dengan perantaraan
sebuah pointer.
Contoh:
X adalah sebuah variabel dengan tipe integer dan PX adalah sebuah pointer variabel
dengan tipe integer.

Kita akan mendapatkan address suatu objek dengan menggunakan tanda & sebagai
address operator.

Perintah:
PX = X;

Menunjukkan bahwa variabel PX mendapat nilai dari address X, atau dapat kita katakan
sekarang bahwa:
PX menunjuk ke X

Address operator & hanya dapat digunakan untuk variabel dan elemen-elemen vektor.
Bentuk seperti berikut ini tidak diperbolehkan.

&(X+1) dan &3

Dengan menggunakan tanda & sebagai pointer operator, maka fungsi dari operan adalah
sebagai address dari objek sasaran. Address inilah yang digunakan untuk memanipulasi
objek sasaran.

Contoh: Y adalah variabel dengan tipe integer, maka perintah


Y = *PX;

Artinya, nilai Y menunjuk ke PX.

Perintah:
PX = *X;
Y = *PX;

Artinya, nilai X diberikan pada Y, dengan kata lain perintah diatas sama juga dengan
Y = X;hal ini dapat kita gambarkan seperti dibawah ini:
int *PX; int *PX;
int *Y; int *Z;
PX = &Y; Z = *PX;
Operator & menghasilkan address dari suatu objek sedangkan operator * menghasilkan
nilai dari address tersebut.
Contoh:
#include <stdio.h>
Main()
{
int a;
int b;
a = 3;
b= &a; /* b mencetak nilai dari address a*/
if (*b == a) /*cek nilai *b = a = 3 */
printf(“OK\n”); /*jika b = &a, maka *b = a, jadi *b = a = 3 dan jika = 3, maka *b = a
*/
}

3.1.2 Pointer dan Variabel Function


Function di C selalu menghasilkan nilai suatu argumen, yang pada dasarnya tidak
mengubah nilai variabel yang dipanggil. Apa yang dilakukan jika kita ingin mengubah
nilai dari suatu argumen?
Contoh: sebuah fungsi swap() yang dapat menukar dua argumen satu dengan lainnya.
Jika fungsi swap ditulis seperti:
swap(x,y)
int x,y;
{ int temp;
temp = x;
x = y;
y = temp;
}
Maka fungsi swap tidak bisa dipanggil dengan perintah seperti
swap(a,b);

swap hanya menghasilkan nilai dari argumennya. Swap tidak dapat mengubah argumen
a dan b dengan memanggil fungsinya.
Gunakan sebuah pointer yang menunjuk pada nilai yang akan diubah untuk mendapat
efek yang kita inginkan. Perintah yang dilakukan seperti
swap(&a, &b);

karena operator & menghasilkan address suatu variabel, maka &a adalah pointer yang
menunjuk ke a. Jadi fungsi swap yang benar, parameternya harus ditulis sebagai
pointer. Lakukan dengan bantuan pointer untuk mengakses operan, seperti pada
program dibawah ini:

swap(px,py);
int *px,*py;
{ int temp;
temp = *px;
*px = *py;
*py = temp;
}

Dengan formulasi diatas barulah kita dapat memanggilnya dengan instruksi


swap(a,b);

3.2 LINKED LIST


Linked list adalah urutan kesatuan record dan hubungan antara satu record dengan
record lainnya yang ditentukan oleh suatu pointer, yang dapat digambarkan seperti :

Pada gambar diatas dapat kita lihat bahwa setiap record mempunyai satu pointer yang
menunjuk ke record yang berikutnya, dengan pengecualian untuk record yang terakhir
yang menunjuk ke record yang tidak ada. Record yang tidak ada tersebut kita
definisikan dengan nilai Null ( NIL ) yang artinya juga sebagai akhir suatu list.

Prinsip pada suatu list dapat kita bandingkan seperti suatu rantai yang matanya
dihubungan satu sama lain. Mata rantai tersebut dapat kita sosialisasikan dengan record
atau node. Jadi, untuk selanjutnya dalam konteks linked list kita menggunakan
terminologi NODE untuk pengertian sebuah record.

Ciri khas suatu node dalam linked list adalah harus selalu terdapat field paling sendikit
dua bagian , yaitu:
1. Data
2. Pointer

Secara umum linked list dibedakan atas 2 macam, yaitu :

1. Single linked list dan


2. Double linked list

Single linked list mempunyai satu pointer untuk setiap node yang menunjuk ke node
berikutnya , artinya hanya punya satu arah. Double linked list mepunyai dua pointer
yang menunjuk ke node berikutnya dan sebelumnya, artinya punya dua arah.

Double linked list dapat dilihat pada gambar diatas pointer node pertama tidak
mempunyai pendahulu, jadi pointer yang menunjuk ke elemen sebelumnya adalah
elemen yang tidak ada ( NIL ) dan anolog untuk node terakhir, dimana pointer yang
menunjuk ke elemen berikutnya adalah elemen yang tidak ada ( NIL ).

3.3 SINGLE LINKED LIST


Single linked listmempunyai satu pointer untuk setiap node yang menunjuk ke node
berikutnya. Node untuk Single linked list dapat kita gambarkan seperti ;

Tulis dalam struktur record yang rekursif untuk mendefiniskan single lingked list dengan
C seperti ;
struct list
{ char nama[20] /*data*/
struct list *next / * pointer*/
};

Yang dimaksud dengan rekursiv adalah variabel yang dipergunakan adalah variablenya
sendiri. Pada contoh record list, kita menentukan record selanjutnya dengan
mendeklarasi sebuah pointer variabel *next yang menunjuk ke record itu sendiri. Record
struct list contoh diatas mempunyai 2 variable , yaitu :

char nama [20] dan struct list *next

char nama [20] adalah deklarasi sebuah variable untuk menentukan bahwa data yang
akan diolah adalah datatype character dan mempunyai panjang 20 character. Struct list
* next adalah deklarasi sebuah variable yang berbentuk record ( struct ) yang fungsinya
sebagai pointer yang menunjuk ke record berikutnya. Khusus dalam hal ini record yang
ditunjuk oleh pointer *next adalah recordnya sendiri. Tidak tertutup kemungkinan untuk
mendeklarasi suatu node yang mempunyai sebuah struktur record yang telah
didefinisikan sebelumnya, seperti :

struct id
{ char nama [20]
char jalan [20]
char Kota [20]
int Kodepost
};
struct list
{ struct id mahasiswa
struct list *list
};

Keterangan:
Variable nama, jalan dan kota di struct id di deklarasikan dengan array dari type
character, yang panjang characternya dapat disimpan dalam memory sudah ditentukan
secara explisit, yaitu maksimal sepanjang 20 character. Jika character yang ditulis
melebihi panjang maksimum, maka sisanya akan diabaikan. Berbeda dengan variable
kodepost yang di deklarasikan dengan type integer. Disini ditentukan panjang
maksimum secara explisit, seperti yang kita lakukan pada variable nama, jalan, dan
kota. Karena sistem type integer sudah mempunyai batas nilainya, kita tidak perlu
menentukan panjang maksimunya lagi.

Operasi dasar pada single list:


1. create / penciptaan struktur data list
2. traversal / penelusuran list
3. insert / penyisipan elemen kedalam list
4. delete / penghapusan elemen dari list
5. fungsi empty / pengecekan apakah list kosong atau tidak
6. fungsi full / pengecekan apakah list penuh atau tidak
7. update / mengganti elemen yang ada di list
8. find_first / mencari elemen pertama
9. find_next / mencari elemen sesudah elemen yang telah ditentukan
10. find_X / mencari elemen X dalam list

Anda mungkin juga menyukai