Anda di halaman 1dari 11

MODUL PERKULIAHAN

W152100006
Struktur Data

Pointer, Link List, Single Link List

Fakultas Ilmu Program Studi Tatap Muka Kode MK Disusun Oleh


Komputer Teknik W152100006 Sabar Rudiarto, M.Kom.
Informatika

03
Abstract Kompetensi
• Mampu Memahami struktur data dari Sub-CPMK 1.2, 2.1 Mahasiswa mampu memahami
sebuah Pointer. struktur data dari sebuah Pointer & mampu menyusun
• Mampu menyusun algoritma dan algoritma dan Program menggunakan pointer.
Program menggunakan pointer.
POINTER
1. DEFINISI

Pointer adalah variabel yang nilainya merupakan address dari variabel lain.

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.

2014 Struktur Data Pusat Bahan Ajar dan eLearning


2 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
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;

Adr data Ptr adr data Ptr


Y *PX

PX 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 */
}
2014 Struktur Data Pusat Bahan Ajar dan eLearning
3 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
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);

2014 Struktur Data Pusat Bahan Ajar dan eLearning


4 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
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
:

 →  → ................  →  → NIL

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 deng…n 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
sedikit 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.

NIL
NIL

2014 Struktur Data Pusat Bahan Ajar dan eLearning


5 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
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. INGLE LINKED LIST

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

DATA NEXT

* POINTER

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 :

2014 Struktur Data Pusat Bahan Ajar dan eLearning


6 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
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 maksimumnya lagi.

3.1. Operasi dasar pada single list:

1. Create / penciptaan struktur data list: untuk menciptakan linked list yang baru
dan kosong.

#include <stdio.h>
#include<malloc.h>
typedef int tipedata;

struct node{
tipedata data;
node *next;
};
node *head, *current;

void create()
{
head = null;
current = null;
}

2014 Struktur Data Pusat Bahan Ajar dan eLearning


7 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
2. Traversal / penelusuran list: untuk melakukan penelusuran terhadap list
yang ada. Dimulai dari head sampai dengan next = null.

current = head;
while (current->next != null){
current = current ->next;}

3. Insert / penyisipan elemen kedalam list: untuk menambahkan satu elemen


data kedalam list. Penyisipan ini dapat dilakukan didepan list, dibelakang list
atau sesuai dengan keinginan.

• Penyisipan dibagian depan list

void sisipdepan (tipedata n)


{
node *p;
p = (node*) malloc (sizeof(struct node));
p->data = n;
p->next = head;
head = p;
}

• Penyisipan dibagian belakang list. Penyisipan dibelakang list harus


dilakukan setelah terlebih dahulu memposisikan pointer current pada
posisi belakang list. Setelah itu baru dilakukan penyisipan setelah current.

void sisipbelakang (tipedata n)


{
node *p;
p = (node*) malloc (sizeof(struct node));
p->data = n;
current = head;
while (current->next != null){
current = current->next;}
current->next = p;
p->next = null;
}

2014 Struktur Data Pusat Bahan Ajar dan eLearning


8 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
• Penyisipan dibagian yang dikehendaki. Hal ini baru dapat dilakukan
apabila kita sudah mengetahui diposisi mana node/elemen baru tersebut
akan disisipkan. Misalkan terdapat sebuah list terurut ascending sebagai
berikut:

20 40 50 60

Kemudian dari list tersebut akan di sisipkan node baru dengan isi nya 45.
Node baru ini akan disisipkan ditengan 40 dan 50, berarti kita akan
menggunakan sebuah pointer yang harus berhenti tepat dibelakang 50.
n = 50;
node *p;
p = (node*) malloc (sizeof(struct node));
p = head;
p->data = n;
current = head;
while (current->next.data < p.data){
current = current->next;}
p = current->next;
current.next = p;

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

2014 Struktur Data Pusat Bahan Ajar dan eLearning


9 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
SOAL LATIHAN
1. Buatlah algoritma untuk mencetak seluruh isi node yang terdapat pada sebuah
single linked list.

2. Buatlah algoritma untuk mencari suatu nilai didalam node – node dari sebuah
single linked list.

3. Apabila diberikan sederet angka sebanyak 6 dan terurut secara descending, lalu
akan di insert angka X ditengah deret tersebut buatlah algoritmanya dengan
pendekatan linked list.

4. LATIHAN DIRUMAH

1. Jika operasi dasar dalam linked list sudah tersedia, apa yang dihasilkan oleh
output dari penggalan program dibawah ini :

void main()
{
node *p;
int fail;
create();
insert (10);
insert (32);
insert (90);
p = head;
while (p != NULL) {
printf “%d\n”, p->data);
p = p->next;
};
find_first();
find_next(&fail);
if(!fail) printf(“\n%d\n”, current->data);
};

2. Modifikasi fungsi insert yang dijelaskan agar elemen yang di-insert selalu
ditempatkan di tail dari linked list

2014 Struktur Data Pusat Bahan Ajar dan eLearning


10 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id
Daftar Pustaka

1. Daniel F Stubbs & Neil W. Webre (1985). Data Structures with Abstract Data Type
and Pascal. Brook/ Cole Publishing Company

2. Aaron M. Tanenbaum, Yedidyah Langsam, Moshe J Augenstein (1990), Data


Structures Using C, Prentice Hall.

3. Herbert Schildt (1990), Using Turbo C++, McGrawHill.

4. Bambang, Wirawan (2004), Struktur Data dengan C, Pernerbit Andi Jogyakarta.

5. Maria, Anna (1998), Struktur Data, Buku Ajar Universitas Bina Nusantara Jakarta.

2014 Struktur Data Pusat Bahan Ajar dan eLearning


11 Sabar Rudiarto, M.Kom http://www.mercubuana.ac.id

Anda mungkin juga menyukai