Anda di halaman 1dari 27

STRUKTUR DATA DINAMIS ( POINTER )

Pengertian
Pointer adalah variabel yang berisi alamat dari suatu lokasi struktur data. Pointer digunakan untuk menyatakan secara eksplisit alamat tersebut pada waktu dilakukan pengoperasiannya. Manipulasi dapat dilakukan pada alamat maupun struktur data tersebut.

Variabel Pointer
Variabel Pointer adalah suatu variabel yang menunjuk ke alamat memori yang digunakan untuk menampung data yang akan diproses.

Deklarasi Variabel Pointer : Var <Nama Variabel> : ^<Tipe Data> Contoh Pendeklarasian : Var JumlahData : ^Integer; NamaSiswa : ^String[25]; NilaiSiswa : ^Real; ** Simbol topi tersebut menandakan bahwa variabel tersebut menunjuk ke lokasi tertentu di memori.

Operasi Pada Pointer


Pada pointer ada dua operasi dasar yang dapat dilakukan yaitu : 1. Operasi mengkopi simpul (P1:=P2) 2. Operasi mengkopi isi simpul (P1^.:=P2^.)

Link List
Link list merupakan suatu variabel yang bertipe pointer yang membentuk suatu untaian yang saling berhubungan. Tiap untaian tersebut diletakkan pada memory. Tempat yang disediakan pada suatu area memori tertentu untuk menyimpan data dikenal dengan sebutan Node/Simpul. Linked list juga disebut dengan seranai beranai merupakan suatu variabel pointer yang simpulnya bertipe Record.

List diawali dari Kepala, yang merupakan kepala dari list. Kepala berisi alamat dari elemen pertama.
Elemen list berisi 2 jenis field, yaitu Info dan Berikut

Info adalah harga yang disimpan/dioperasikan, sedangkan Berikut adalah pointer yang berisi alamat berikutnya.
List diakhiri dengan suatu elemen terakhir yang memiliki harga Berikut yang tidak menunjuk kemanapun. Harga Berikut ini disebut Nil. Jika Kepala = Nil, menunjukkan list dalam keadaan kosong.

Notasi : Jika P adalah suatu variabel yang berjenis pointer : P^. Info : Mengakses data pada elemen yang beralamat di P P^. Berikut : Mengakses alamat elemen sesudah P

Pendefinisian dalam Pascal adalah sebagai berikut : Type Info_Type = Integer; List = ^ElmList; ElmList = Record Info : Info_Type; Berikut : List; End;

Rutin-rutin yang digunakan : NEW (P) : Membuat node baru dari memori komputer lalu menyimpan alamat di P. RELEASE (P) atau DISPOSE (P) : Membebaskan memori komputer dari suatu node yang alamatnya ditunjuk oleh P.

Operasi operasi Dasar Pada Linked List Operasi-operasi dasar : Inisialisasi List Penelusuran List (Explore) Pencarian List (Searching), Penyisipan List (Insertion), Penghapusan List (Deletion).

Inisialisasi List Inisialisasi adalah pemberian nilai awal terhadap variabel list (pointer).

Procedure Inisialisasi (Var Kepala : List); Begin Kepala := Nil; {tidak menunjuk kemanapun} End;

Penelusuran List / Explore Explorasi adalah penjelajahan untuk mengunjungi semua elemen. Tujuan : Pencetakan, Pemeriksaan, pengubahan data, dll. Procedure PenelusuranList (Var Kepala : List); Var P : List; Begin P := Kepala; {alamat elemen yang akan dikunjungi} While P <> Nil Do Begin Proses (P); {realisasinya : pemrosesan terhadap P} P := P^. Berikut; End; {P = Nil, semua elemen sudah dikunjungi, atau list kosong } End;

Pencarian List / Searching Searching adalah pencarian suatu elemen pada list, dengan kriteria tertentu Pencarian elemen list yang berharga Y
Function PencarianList (Var Kepala : List; Y : Info_Type) : Boolean; Var P : List; Ketemu : Boolean; Begin P := Kepala; Ketemu := False; While (P <> Nil) And (Not Ketemu) Do Begin If P^. Info = Y Then Ketemu := True Else P := P^. Berikut; End; PencarianList := Ketemu; End; {Jika tidak ketemu P = Nil dan PencarianList bernilai False}

Pencarian elemen terakhir Procedure PencElemenAkhir (Var Kepala, P : List) ; Begin P := Head If P <> Nil Then Begin While (P^. Berikut <> Nil) Do P := P^. Berikut; End; End;

Penyisipan List / Insertion Insertion adalah penyisipan suatu elemen list pada Linked List. Penyisipan sebagai elemen pertama Procedure SisipAwal (Var Kepala : List; P :List) Begin P^. Berikut := Kepala; Kepala := P; End;

Penyisipan sebagai elemen terakhir Procedure SisipAkhir (Var Kepala : List; P : List); Var Akhir : List; Begin New (P) If Kepala = Nil Then SisipAwal (Kepala, P); masih kosong} Else Begin Akhir := Kepala; While (Akhir <> Nil) Do Akhir := Akhir^. Berikut; P^. Berikut := Nil; Akhir^. Berikut := P; End; End;

{Bila

Penyisipan sesudah elemen P Procedure SisipSesudah (Var Prec : List; P : List); Begin Prec^. Berikut := P^. Berikut; P^. Berikut := Prec; End;

Penghapusan List / Deletion Deletion adalah proses penghapusan list yang dianggap tidak diperlukan lagi. Penghapusan dilakukan dengan tahapan : Lepaskan elemen dari rantai Linked-List. Bebaskan memori yang digunakan dengan DISPOSE atau RELEASE.

Penghapusan elemen pertama Procedure HapusElemenPertama (Var Kepala : List); Begin If Kepala <> Nil Then Begin P := Kepala; Kepala := Kepala^. Berikut; {Kepala maju untuk menuju Dispose (P); elemen berikutnya} End; End;

Penghapusan elemen terakhir Procedure HapusElemenAkhir (Var Kepala : List; P : List); Var Akhir, PreAkhir : List; Begin If Kepala <> Nil Then Begin Akhir := Kepala; PrecAkhir := Nil; While (Akhir ^. Berikut <> Nil) Do Begin PrecAkhir := Akhir; Akhir := Akhir^. Berikut; End; P:= Akhir; If PrecAkhir = Nil Then {Elemen List hanya satu} Kepala := Nil Else PrecAkhir^. Berikut := Nil; If P <> Nil Then Dispose (P); End; End;

Penghapusan elemen sesudah P Procedure HapusElemenSesudah (Var P : List); {List Tidak Boleh Kosong !!} Var Prec : List; Begin If P^. Berikut <> Nil Then Begin Prec := P^. Berikut; P^. Berikut := Prec^. Berikut; {Alamat P yangberikutnya} Dispose (Prec); End; End;

Contoh pointer pada C++


Untuk mendeklarasikan sebuah pointer, perintah dasarnya adalah : Typedata *namavariabel; Contoh : int *pint; float *pfloat; Tmhs *pmhs;

Contoh program di C++


01:#include<stdio.h> 02:#include <conio.h> 03: #include <string.h> 04: 05: main() 06: { 07: char c,*pc; 08: int i,*pi; 09: float f,*pf; 10: clrscr(); 11: c='A';i=7;f=6.25; 12: printf("c : alamat=0x%p, isi=%c\n", &c, c); 13: printf("x : alamat=0x%p, isi=%d\n", &i, i); 14: printf("y : alamat=0x%p, isi=%5.2f\n", &f, f);

15: pc=&c; 16: pi=&i; 17: pf=&f; 18: printf("pc: alamat=0x%p, isi=%c\n", pc, *pc); 19: printf("pi: alamat=0x%p, isi=%d\n", pi, *pi); 20: printf("pf: alamat=0x%p, isi=%5.2f\n", pf, *pf); 21: *pc='B'; 22: *pi=125; 23: *pf=512.56; 24: printf("c : isi=%c\n", c); 25: printf("x : isi=%d\n", i); 26: printf("y : isi=%5.2f\n", f); 27: getch(); 28: return 0; 29: }

Jika dieksekusi, maka akan menghasilkan sebuah tampilan sebagai berikut : c : alamat=0xFFF5, isi=A x : alamat=0xFFF2, isi=7 y : alamat=0xFFEE, isi= 6.25 pc: alamat=0xFFF5, isi=A pi: alamat=0xFFF2, isi=7 pf: alamat=0xFFEE, isi= 6.25 c : isi=B x : isi=125 y : isi=512.56

Contoh lain
02: #include <conio.h> 03: #include <stdlib.h> 04: main() 05: { 06: int *data; 07: int i,banyakdata; 08: printf("Banyak data yang akan diinputkan : ");scanf("%i",&banyakdata); 09: data=(int *)malloc(sizeof(int)*banyakdata); 10: for(i=0;i<banyakdata;i++) 11: { 12: printf("Pemasukan data ke-%i :",i+1);scanf("%i",(data+i)); 13: } 14: printf("Data yang telah diinputkan adalah : \n"); 15: for(i=0;i<banyakdata;i++) 16: printf("Data ke-%i : %i\n",i+1,*(data+i)); 17: getch(); 18: return 0; 19: }

Tampilan yang dihasilkan oleh program diatas adalah sebagai berikut : Banyak data yang akan diinputkan : 5 Pemasukan data ke-1 :12 Pemasukan data ke-2 :3 Pemasukan data ke-3 :4 Pemasukan data ke-4 :5 Pemasukan data ke-5 :67 Data yang telah diinputkan adalah : Data ke-1 : 12 Data ke-2 : 3 Data ke-3 : 4 Data ke-4 : 5 Data ke-5 : 67

Anda mungkin juga menyukai