Algoritma dan Struktur Data

Slides:



Advertisements
Presentasi serupa
Pemrograman Terstruktur
Advertisements

POINTER.
PERTEMUAN IV POINTER Pointer adalah suatu variabel penunjuk yang menunjuk pada suatu alamat memori komputer Pointer merupakan.
PERTEMUAN VIII POINTER
STRUKTUR DATA (5) Pointer dan Function
Pointer Konsep Pemrograman.
Pointer. Output? #include int x = 2; void misteri(int a, int b) { a = 2*x; b = y; y = a; } main() { int y; x = 5; y = 7; misteri(x, y); printf("%d %d\n",
Pointer.
Algoritma dan Struktur Data Daniel Riano Kaparang.
POINTER
INSTRUKSI MASUKAN DAN KELUARAN
Struktur Data Universitas PGRI Ronggolawe
Pointer Variabel pointer sering disebut sebagai variabel yang menunjuk obyek lain, karena variabel pointer atau pointer adalah variabel yang berisi alamat.
Algoritma & Struktur Data Pointer Evangs Mailoa.
STRUKTUR DATA (5) Pointer dan Function
Alokasi Memori Yuliana Setiowati.
Pemrograman Dasar Pointers.
Pointer Yuliana Setiowati.
Algoritma & Struktur Data Linked List Evangs Mailoa.
Pointer Dr. Lily Wulandari.
POINTER (VAR.PENUNJUK)
STRUKTUR DATA Pointer dan Function
P O I N T E R. Merupakan sebuah variabel yang berisi alamat dari variabel lain. Suatu pointer dimaksudkan untu menunjukan ke suatu alamat memori sehingga.
Bab 8 Pointer Riyanto Sigit Konsep Dasar Pointer  Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain  Variabel.
Algoritma dan Struktur Data
Konsep Pemrograman Politeknik Elektronika Negeri Surabaya 2006
POINTER.
Teknik Pemrog. Terstruktur 2
Pointer (Part 1).
Algoritma dan Struktur Data
Castaka Agus Sugianto, M.Kom., M.CS
Pemrograman Terstruktur
Informatique Engineering Ahmad Dahlan University May 17, 2004
Pertemuan 21 POINTER Bag.1 Dasar Pemrograman Renni Angreni, S.Kom.
Algoritma & pemrograman 1B
Teknik Pemrograman oleh: Yohanes Sugiarto.
Pointer TEE 2103 Algoritma dan Pemrograman Dosen: Abdillah, MIT
Algoritma dan Struktur Data
POINTER
POINTER 6.3 & 7.3 NESTED LOOP.
Pointer, Array dan String
Struktur Data (Data Structure) – IS 2313
Pointer Variabel pointer sering disebut sebagai variabel yang menunjuk obyek lain, karena variabel pointer atau pointer adalah variabel yang berisi alamat.
Defri Kurniawan, M.Kom STRUKTUR DATA Defri Kurniawan, M.Kom
Pointer Pertemuan 10 Bahasa C.
Pointer FARID WAJDI YUSUF.
Pointer Oleh : Sri Supatmi,S.Kom.
Remainder Senin depan mulai UTS Praktikum
Struktur Data Khoiriya Latifa, M.Kom.
Algoritma dan Struktur Data
(Struktur Dasar, Variabel, Tipe Data, Input, Output, Komentar)
STRUKTUR DATA PERTEMUAN 8
Linked List 6.3 & 7.3 NESTED LOOP.
Algoritma dan Struktur Data
Struktur Data Khoiriya Latifa, M.Kom.
DASAR PEMROGRAMAN KOMPUTER
VARIABEL DAN TIPE DATA Erizal, S.Si, M.Kom Sistem Informasi
Algoritma dan Struktur Data
Pointer Oleh : Sri Supatmi,S.Kom.
Algoritma dan struktur data
Algoritme dan Pemrograman
ALGORITMA & STRUKTUR DATA C Programming
Variable Static & Linked List
Algoritma dan Struktur Data
POINTER
Pointer.
SINGLE LINKED LIST (SLL)
Defri Kurniawan POINTER Defri Kurniawan
Operator, Variabel, Konstanta, Tipe Data
Transcript presentasi:

Algoritma dan Struktur Data Pointer Ramos Somya, S.Kom., M.Cs.

Pointer (variabel penunjuk) Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Dengan kata lain, variabel pointer tidak memegang nilai, tetapi memegang alamat dari variabel lain. Pointer merupakan variabel level rendah yang dapat digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung oleh bahasa C.

Pointer (variabel penunjuk) Karena pointer tidak memegang nilai tetapi memegang alamat, maka dalam pointer terdapat dua bagian, yaitu pointer itu sendiri yang memegang alamat dan alamat tersebut menunjuk ke suatu nilai. Jadi perlu dicatat mulai sekarang, supaya tidak bingung, dalam pointer ada alamat dan nilai yang ditunjuk.

... Sebagai contoh, px adalah variabel pointer dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi 1000.

Kegunaan Pointer Mengapa harus menggunakan POINTER dalam bahasa C? Pada variabel biasa kita tidak perlu tahu alamat memory dari variabel tersebut. Untuk mengakses hanya perlu nama variabel tersebut. Tapi untuk struktur data dinamis (linked list, tree dsb) hal tersebut tidak bisa.

Kegunaan Pointer Untuk membangun struktur data dinamik, yaitu struktur data yang dibangun pada saat program berjalan dengan mengalokasikan satu blok memori. Pointer dalam bahasa C digunakan untuk menangani parameter variabel yang dilewatkan pada fungsi. Dalam bahasa C digunakan untuk mengakses informasi yang disimpan dalam bentuk array.

Variabel Biasa vs Variabel Pointer Berisi data/nilai Berisi alamat memori dari suatu variabel tertentu Operasi yang dapat dilakukan seperti layaknya operasi biasa: +, -, *, / Membutuhkan operator khusus: & yang menunjuk ke alamat dari suatu variabel. Contoh: p = &n; Serta operator * yang menggunakan nilai dari alamat variabel yang ditunjuk oleh pointer. Contoh: int *p; Bersifat statis Bersifat dinamis Deklarasi: int a; Deklarasi: int *a;

Deklarasi Pointer Bentuk Umum: tipe_data *nama_pointer; Contoh: int *nilai; char *huruf; Pendeklarasian variabel pointer menggunakan tanda * sebelum nama variabelnya. Sedangkan untuk menampilkan nilai yang ditunjuk oleh suatu variabel pointer, juga digunakan operator * Untuk menampilkan alamat tempat penyimpanan nilai yang ditunjuk oleh suatu variabel pointer, digunakan operator &

... int *px; // contoh 1 char *pch1, *pch2; // contoh 2 Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer yang menunjuk ke data bertipe char

Mengatur Pointer agar Menunjuk ke Variabel Lain Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel, operator & (operator alamat) bisa dipergunakan, dengan menempatkannya di depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int, maka: &x (dibaca alamat dari variabel x). Adapun contoh pemberian alamat x ke suatu variabel pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu: px = &x;

... Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelah pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x.

Mengakses Isi Suatu Variabel Melalui Pointer Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan menggunakan operator indirection (tak langsung) berupa simbol * Contoh: *px *px menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px” . Sebagai contoh jika y bertipe int, maka sesudah dua pernyataan berikut: px = &x; y = *px; // y akan berisi nilai yang sama dengan nilai x

Contoh

... Hasil eksekusi:

Contoh Output? #include <stdio.h> void main() { int i, j; int *p; /* pointer ke integer */ p = &i; *p=5; j=i; printf("%d %d %d\n", i , j, *p); } Output?

Penjelasan Baris int *p adalah mendeklarasikan sebuah variabel pointer yang bernama p. Tanda (*) digunakan untuk menyatakan variabel pointer. Baris p = &i; adalah pemberian nilai (assignment) alamat variabel i kepada variabel p. Dalam bahasa C , & disebut operator alamat. Pernyataan &i berarti adalah “alamat memori dari variabel i”. Sebelum baris tersebut dieksekusi maka p bernilai acak yang tidak diketahui alamatnya. Oleh karena itu kalau pointer (p) tidak diberi nilai akan menyebabkan kesalahan segmentasi (segmentation fault).

Penjelasan Pernyataan p = &i menyebabkan satu lokasi memiliki dua nama yaitu i itu sendiri dan *p. Dengan demikian jelas bahwa pointer p terdiri dari dua bagian yaitu p adalah lokasi yang menyimpan alamat dan *p adalah lokasi yang menyimpan nilai yang ditunjuk oleh p. Pernyataan *p = 5 berarti bahwa lokasi yang ditunjuk oleh p diberi nilai 5. Karena lokasi tersebut juga bernama i, maka pernyataan tersebut juga menyebabkan nilai menjadi 5. Dan selanjutnya j=i berarti j diberi nilai 5 juga dan akhirnya perintah printf menghasilkan 5 5 5.

Contoh #include<stdio.h> void main() { int *p, a = 25, b; p = &a; b = *p; printf("Nilai a = %d di alamat %p\n",a,p); printf("Nilai b = %d di alamat %p\n",b,p); }  output?

contoh #include <stdio.h> void main() { int i,j; int *p; /* pointer ke integer */ printf("%d %d\n",p,&i); p = &i; }  Output?

Penjelasan Program tersebut memberitahukan kepada compiler untuk mencetak alamat yang dipegang oleh p dan alamat dari i. Variabel p akan memberikan sembarang nilai atau 0 dan &i (alamat i) bernilai besar sekali. Dengan demikian outputnya tidak tentu, tetapi sebagai salah satu contohnya adalah sebagai berikut.

Contoh #include <stdio.h> void main() { int *p; /* a pointer to an integer */ printf("%d\n", *p); } Output?

Penjelasan Program tersebut memberitahukan kompiler untuk mencetak nilai yang ditunjuk oleh p. Tetapi karena p belum diberi nilai awal, maka nilainya adalah alamat 0 dan menghasilkan segmentation fault, karena menunjuk ke alamat yang tidak ada.

Pointer sebagai parameter #include <stdio.h> void swap(int i, int j) { int t; t = i; i = j; j = t; } void main() int a,b; a = 5; b = 10; printf("%d %d\n", a, b); swap(a, b);

Contoh #include <stdio.h> void swap(int *i, int *j) { int t; t = *i; *i = *j; *j = t; } void main() int a,b; a = 5; b = 10; printf("%d %d\n", a, b); swap(&a,&b);

Contoh Output?? #include <stdio.h> int nama_fungsi(int *b) { return *b = *b + 1; } main() int x = 1; nama_fungsi(&x); printf("%d",x); Output??

Pointer untuk Struktur Data Dinamik Struktur data dinamik adalah struktur data yang dapat bertambah atau berkurang sesuai dengan kebutuhan pada saat program berjalan. Bila suatu blok memori tidak digunakan lagi dalam program maka blok memori tersebut dilepas supaya dapat digunakan untuk keperluan lain.

Contoh: #include <stdio.h> #include <stdlib.h> void main() { int *p; p=(int *) malloc (sizeof(int)); *p=10; printf("%d\n",*p); free(p); }  output??

... Kedua program tersebut di atas mendemonstrasikan alokasi, dealokasi dan menggunakan blok memori. Perintah malloc dalam C sama dengan perintah new dalam Pascal, yaitu mengalokasikan blok memori sebesar yang diinginkan yaitu sebesar sizeof(int) byte. Karena int bernilai 4 byte maka perintah tersebut mengalokasikan 4 byte. Fungsi malloc mengembalikan pointer ke blok yang dialokasikan. Type cast (int*) mengubah pointer generik yang dihasilkan oleh malloc menjadi pointer ke integer, seperti yang diharapkan dalam p.

Terima Kasih