STRUKTUR DATA
2014
LABORATORIUM KOMPUTER DAN JARINGAN
SISTEM KOMPUTER UNIVERSITAS ANDALAS
BAB I
TUJUAN
TUJUAN
Mahasiswa dapat memahami pointer
Mahasiswa dapat menerapkan pointer
BAB II
LANDASAN TEORI
Dalam ilmu komputer, pointer adalah tipe data bagi bahasa pemrograman yang nilainya mengacu untuk menunjuk langsung nilai lain yang tersimpan di tempat lain (variabel) di dalam suatu memori komputer dengan menggunakan alamat yang ada. Untuk bahasa pemrograman tingkat tinggi, pointer secara efektif dapat mengambil tempat pada general purpose registers yang ada pada bahasa tingkat rendah seperti bahasa assembly apabila memori masih tersedia.
Pointer adalah implementasi sederhana, lebih konkretnya yaitu tentang tipe data referensi yang lebih abstrak. Beberapa jenis bahasa mendukung pointer, walaupun ada yang memiliki lebih banyak pembatasan penggunaannya dari pada yang lain. Sebagai analoginya, sebuah nomor halaman yang ada pada buku dapat dianggap sebagai pointer ke halaman yang sesuai, dan dereferencing pada pointer akan dilakukan dengan membalik ke halaman dengan nomor halaman yang diberikan. Pointer dapat meningkatkan kinerja data secara signifikan agar operasi berulang seperti traversing string, tabel lookup, tabel kontrol dan struktur pohon. Secara khusus, sering jauh lebih efisien dalam penggunaan waktu dan space untuk pointer dari pada menggunakan variable tipe data biasa. Pointer juga digunakan untuk menyimpan alamat dari titik masuk untuk memanggil subrutin dalam pemrograman prosedural dan untuk run-time penghubung ke dynamic link libraries (DLL). Dalam pemrograman berorientasi objek, pointer ke fungsi yang digunakan untuk mengikat/menjilid method, ini sering disebut tabel method virtual.
Sementara ini "pointer" telah digunakan untuk merujuk pada referensi yang ada pada umumnya, hal ini juga baik digunakan untuk struktur data yang secara eksplisit memungkinkan antar muka (interface) pointer untuk dimanipulasi (secara aritmetik melalui aritmetik pointer) sebagai alamat memori. Karena pointer memungkinkan akses yang dilindungi maupun tidak dilindungi ke memori yang dituju. Dengan demikian, ada variabel yang secara langsung menunjuk ke suatu nilai tertentu, dan variabel yang secara tidak langsung menunjuk ke nilai.
Adapun bentuk umum dari pernyataan variabel pointer dalam C++ adalah :
Type *variabel-name
Dengan :
Type adalah tipe dasar pointer
Variabel name adalah nama variabel pointer
* adalah variabel pada alamatnya yang ditentukan oleh operand.
Contoh :
Int *int_pointer; // pointer to integer
Float *float_pointer; // pointer to float
Pengisian data ke variabel pointer bisa berarti pengisian alamat memori ke variabel tersebut atau pengisian data yang ditunjuk oleh pointer.
OPERATOR POINTER
Ada 2 operator pointer yang dikenal secara luas, yaitu operator & dan operator *.
Operator &
Operator & merupakan operator alamat. Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh : ted = &input; .Penulisan tersebut berarti akan memberikan variable ted alamat dari variable input. Karena variabel input diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan input diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb :
input = 25; fred = input; ted = &input;
Operator *
Operator * merupakan operator reference. Dengan menggunakan pointer,kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by". Contoh :
beth = *ted;
(dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.
ARRAY POINTER
Pointer dapat diarraykan seperti tipe data yang lain dalam C++. Untuk menyatakan sebuah array pi dari pointer sebanyak 10 buah data yang bertipe 10 integer, dapat ditulis :
int *pi [10];
Untuk menentukan alamat dari variabel integer disebut var ke elemen ketiga dari pointer array, dapat ditulis :
int var;
pi [2] = &var
Macam – macam Pointer
Pointer Bertipe Void
Pada C++ terdapat pointer yang dapat menunjuk ke tipe data apapun, pointer semacam ini dideklarasikan dengan tipe void sehingga sering dikenal dengan istilah Void Pointer. Berikut ini contoh listing program yang menggunakan void pointer.
Pointer Aritmetika
Elemen-elemen array biasanya diakses melalui indeksnya, sebenarnya ada cara lain yang lebih efisien, yaitu dengan menggunakan pointer. Pointer semacam ini disebut dengan istilah pointer aritmetika. Konsep dasar dari pointer aritmetika ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer.
Pointer NULL
Pada saat program dijalankan, pointer akan menunjuk ke alamat acak pada memori, sehingga diperlukan inisialisasi agar hal tersebut tidak terjadi. Dalam C++ terdapat sebuah cara untuk membuat pointer tidak menunjuk ke alamat manapun, yaitu dengan mengisikan pointer tersebut dengan nilai NULL. Karena hal inilah maka pointer tersebut sering dinamakan pointer NULL (NULL Pointer).Se¬bagai contoh kita mempunyai pointer p, dan kita ingin melakukan inisialisasi pada pointer tersebut dengan nilai NULL, maka sintaknya adalah P=NULL;
BAB III
PEMBAHASAN
KASUS I
Algoritma
Mulai
Deklarasikan variabel dan variabel pointer
Int *pc, c;
Masukkan nilai c
Tetapka alamat variabel ke variabel pointer
Write nilai dari variabel c
Selesai
Bahasa program
#include
int main()
{
int *pc,c;
c=22;
printf("address of c:%d\n",&c);
printf("value of c:%d\n\n",c);
pc=&c;
printf("address of pointer pc:%d\n",pc);
printf("content of pointer pc:%d\n\n",*pc);
c=11;
printf("address of pointer pc:%d\n",pc);
printf("content of pointer pc:%d\n\n",*pc);
*pc=2;
printf("address of c:%d\n",&c);
printf("value of c:%d\n\n",c);
return 0;
}
Representasi
Untuk address of c
222686728 Pc c
22
2686728
Int int
2686729 26867288
Alamat c merupakan nilai dari pc
Alamat c merupakan nilai dari pc
untuk value of c
22 c
22
Int
2686728
Address of Ponter pc
2686728 Pc c
2686728
Int int
2686729 26867288
Karena pc=c
Karena pc=c
Content of pointer pc
2222 Pc c
22
22
Int int
2686729 26867288
Pointer menunjuk nilai c
Pointer menunjuk nilai c
Output
KASUS II
Algoritma
Mulai
Deklarasikan variabel dan variabel pointer
Tunjuk alamat dari variabel
Ip = &var
Write nilai *ip
Selesai
Bahasa program
#include
int main()
{
int var=20;
int *ip;
ip = &var;
printf("adress of variable:%x\n",&var);
printf("address stored in ip variable: %x\n",ip);
printf("value op *ip variable: %d\n",*ip);
return 0;
}
Representasi
Address of var variabel
28ff0820 Var *ip
28ff08
20
28ff08 28ff09
Yang ditampilkan di layar
Address stored in ip variabel
Alamat yang ditampilkan *ip adalah 28ff08 karena *ip=&var;
Value of ip variabel : "%d\n",*ip);
2020 Var *ip
20
20
Int int
Karena *ip=&var sehingga nilai yang ditampilkan *ip adalah milai yang ada pada alamat var.
output
KASUS III
Algoritma
Mulai
Deklarasikan variabel
Lakukan looping
For ( i = 0 ; i < 1 ; ++i ) ;
Tunjuk alamat dari [i] pada perulangan
Selesai
Bahasa Program
#include
int main()
{
char c[4];
int i;
for(i=0;i<4;++i)
{
printf("Address of c[%d]=%xx\n",i,&c[i]);
}
return 0;
}
Representasi
28f0bx28f0ax28f09x28f08x 1 2 3 4
28f0bx
28f0ax
28f09x
28f08x
char
28f08x 28f09x 28f0ax 28f0bx
Ket : &c[i];
Nilai yang tampil adalah alamat dari data memory
Output
KASUS IV
Algoritma
Mulai
Deklarasikan variabel
Inputkan nilai variabel
Proses
Hasil
end.
Bahasa program
#include
#include
typedef struct
{
int nim;
int umur;
float ipk;
}
mahasiswa;
mahasiswa m;
mahasiswa *p = &m;
int main()
{
m.nim=123;
m.ipk=3.2;
m.umur=23;
printf("nim =%d\n",m.nim);
printf("ipk =%f\n",m.ipk);
printf("umur=%d\n\n",m.umur);
p->nim=123;
p->ipk=3.2;
p->umur=23;
printf("nim =%d\n",p->nim);
printf("ipk =%f\n",p->ipk);
printf("umur=%d\n\n",p->umur);
printf("nim =%d\n",m.nim);
printf("ipk =%f\n",m.ipk);
printf("umur=%d\n\n",m.umur);
return 0;
}
Representasi
Struck biasa
233.2123Nim ipk umur
23
3.2
123
Int int int
28ff 28fd 28fe
Struct pointer
Menunjuk pada struct biasa
Mengacu pada nilai aslinya
Nilai struct biasa kembali di tampilkan
Output
BAB IV
TUGAS
KASUS I
Algoritma
Mulai
Deklarasikan variabel
Input data
Proses
For (p = kata ; *p != '0'; ++p)
{
*p = tolower (*p);}
Ouput kata
Selesai
Bahasa Program
#include
#include
#include
int main(void)
{
char kata[] = "HURUF ATAU KATA";
char *p;
printf ("Sebelum Konversi: %s\n",kata);
for (p = kata; *p != '\0'; ++p)
{
*p = tolower(*p);
}
printf ("\nSetelah Konversi: %s\n",kata);
getch();
}
Representasi
huruf atau kataHURUF ATAU KATAKata *p
huruf atau kata
HURUF ATAU KATA
Char char
28ff 28fe
Huruf atau kataKata
Huruf atau kata
Char
28ff
Output
KASUS II
Algoritma
Mulai
Deklarasikan variabel
Masukkan kalimat
Proses
Write hasil
Selesai
Bahasa program
#include
#include
#include
main()
{
char kalimat[99];
char *p;
char m;
char *k;
k=&m;
int a,b;
printf("Masukkan kalimat = ");scanf("%s",&kalimat);
a=strlen(kalimat);
p=kalimat;
for(b=0;b<((a/2));b++)
{
*(k+b)= *((p+a)-(b+1));
*((p+a)-(b+1))= *(p+b);
*(p+b)= *(k+b);
}
printf("Hasil = %s",kalimat);
getche();
}
Representasi
akuaku Z *p m
aku
aku
Char char char
2zzf 2zzp 28ff
28ffU,k,auka a b k
28ff
U,k,a
uka
Char int char
2zza 2ffa 2bb
Untuk nilai z yang di tukar
Output
KASUS III
Algoritma
Mulai
Deklarasikan variabel
Inpitkan polindrom
Proses
Write hasil
Selesai
Bahasa program
#include
#include
#include
void kata_dibalik(char [],char []);
int kata_banding(char * , char *);
main()
{
char a[30],b[30];
int Palindrom;
printf("Masukkan Kata : ");
gets(a);
strlwr(a);
kata_dibalik(a,b);
Palindrom=kata_banding(a,b);
if(Palindrom==1)
printf("adalah kata Palindrom");
else
printf("\nBukan kata Palindrom");
getch();
}
int kata_banding(char *satu , char *dua)
{
while(*satu!='\0')
{
if(*satu==*dua)
{
satu++;
dua++;
}
else
{
return 0;
}
}
return 1;
}
void kata_dibalik(char a[],char b[])
{
int i,length,n,k=0;
char *j;
n=strlen(a);
for(i=n-1;i>=0;i--)
{
j=&a[i];
b[k]=*j;
k++;
}
b[k]='\0';
}
Output
KASUS IV
Nilai yang ada pada struct biasa di tunjuk oleh struct pointer sehingga nilai yang keluar adalah struct piasa. Bilai yang ada pada ipk, nim, dan umur pada pendeklarasian pointer tidak mempengaruhi pointer untuk menunjukkan nilainyang ada pada struct piasa.
JAWABAN RESPONSI
Tujuan dan nama asisten?
Tujuan :
Mahasiswa dapat memahami konsep pointer
Mahasiswa dapat menerapkan pointer
Asisten :
Annisa Rachmatul Risa
Dira Oktovia
Fajar Agung Anugrah
Apa itu pointer?
Pointer adalah variabel yang berisi alamat memori sebagai nilainya dan berbeda dengan variabel biasa yang mempunyai nilai tertentu
Bentuk umum pointer?
Type *var_name;
Perbedaan variabel biasa dengan variabel pointer?
Variabel biasa : menunjuk seluruh data. Tipe data ini tidak konstan
Variabel pointer : konstan atau tetap
Perbedaan antara operator dengan operan?
Operator : untuk mengperasikan operan
Operan : variabel yang akan di operasikan
DAFTAR PUSTAKA
Alfa, Faridh. 2014. Praktik Sturuktur Data. Jakarta : Erlangga
Erlina, Tati. 2014. Struktur Data. Padang : Universitas Andalas
Jumaidi. 2012. Pengenalan Bahasa C. Surabaya : ITS