Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehAgus Lesmana Telah diubah "7 tahun yang lalu
1
Informatique Engineering Ahmad Dahlan University May 17, 2004
Pointer Informatique Engineering Ahmad Dahlan University May 17, 2004
2
Pendahuluan Pointer merupakan salah satu jenis data terstruktur
Dengan menggunakan pointer, suatu variabel dapat diciptakan atau dihapus selama pengeksekusian program, variabel (objek) dinamis Untuk membuat struktur data dinamis : link list, queue, stack, tree ukurannya menjadi fleksibel
3
Pointer variabel yang menunjuk alamat memory objek lain (menyimpan alamat dari suatu objek variabel pointer bukan berisi data
4
Objek Statis vs Objek Dinamis
memori diperoleh secara otomatis memori dikembalikan secara otomatis bila objek keluar dari ruang lingkup tertentu (fungsi, sebagai contoh) int A[10]; // tertentu banyaknya Dinamis memori diperoleh dari operasi new objek dinamis masih ada (exist) di luar fungsi di mana “dia” dialokasikan objek di memori hanya dapat dihapus dengan operasi delete int n; cin >> n; int *A = new int[n];
5
Memori Untuk Objek Dinamis
Diminta dari free memory (dikontrol sistem operasi) Permintaan memori harus ditentukan : tipe dan banyaknya objek Jika memori tersedia : pointer ke memori akan dikembalikan Jika tidak tersedia : pointer null akan dikembalikan
6
Definisi Variabel Pointer
Pointer yang menunjuk objek bertipe int int *A; Pointer yang menunjuk objek bertipe char char *B; Pointer yang menunjuk objek yang tipenya didefinisikn sendiri Mahasiswa *Ahmad;
7
Cara penulisan pada C++
Contoh pointer yang tidak diberi nilai awal int *iPtr; // iPtr pointer menunjuk objek bertipe int char *s; // s pointer menunjuk objek bertipe char Rational *rPtr; // rPtr pointer menunjuk objek Rational Contoh pointer yang diberi nilai awal int i = 1; char c = 'y'; int *ptr; // ptr pointer menunjuk objek bertipe int ptr = &i; // ptr pointer menunjuk ke alamat i char *t; // t pointer menunjuk objek bertipe char t = &c; // t pointer menunjuk ke alamat c
8
Gambaran Pointer int i = 1; char c = 'y'; int *ptr = &i; char *t;
t = &c ptr i ‘y’ c 1 t
9
”This” dan “That” pointer box dapat diibaratkan sebagai “this” (tanpa tanda star) Kotak yang ditunjuk sebagai “that” (bintang) int i = 1; int j = 2; int *p; // p pointer ke int p = &i; // "this" = alamat dari i *p = 3; // "that" = 3 p = &j; // "this" = alamat dari j *p = 4; // "that" = 4 i 1 j 2 p this i 3 that j 2 p this i 3 j 4 that p this
10
Indirection Operator Tanda * menunjukkan bahwa : char *kata;
Suatu objek merupakan pointer char *kata; * sebelum variabel bahwa yang diinginkan adalah “that” (isi/objek yang ditunjuk) int i = 1, j; int *ptr; // ptr pointer ke int ptr = &i; // ptr menunjuk i j = *ptr + 1; // *ptr 1, sehingga j 2 cout << *ptr << j << endl; // menampilkan : 12 (satu dua bukan dua belas)
11
Alamat Null null (= 0) adalah konstan pointer untuk suatu tipe tertentu menunjukkan bahwa pointer belum menunjuk ke objek tertentu tidak dapat merujuk kembali (de-reference) int *ptr; ptr = NULL; cout << *ptr << endl; // invalid, ptr tidak menunjuk // ke int yang valid
12
Member Indirection Pertimbangkan : Memilih anggota secara langsung :
Rational r(4,3); Rational *rPtr = &r; Memilih anggota secara langsung : (*rPtr).Tampilkan(); Memilih anggota melalui pointer : rPtr->Tampilkan();
13
Perbandingan Penggunaan
Penggunaan pass by reference void Tukar(char& y, char& z) { char temp = y; y = z; z = temp; } int main() { char a = 'y'; char b = 'n'; Tukar(a, b); cout << a << b << endl; return 0; Penggunaan secara tradisional void Tukar(char* y, char* z) { char temp = *y; *y = *z; *z = temp; } int main() { char a = 'y'; char b = 'n'; Tukar(&a, &b); cout << a << b << endl; return 0;
14
Aplikasi : Link List class Node { Node *B = new Node; public:
int data; Node *berikut; }; //perintah Node *A = new Node; A->data = 1; A->berikut = 0; Node *B = new Node; B->data = 2; B->berikut = 0; A->berikut = B; 1 1 A 2 B 1 A
15
Bagaimana mengetahui isi list? (1)
Asumsi : 1 A 2 jalan 1 A 2 Node *jalan = A; while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl; ...??? } Output : Isi elemen : 1 1 A 2 jalan
16
Bagaimana mengetahui isi list? (2)
Asumsi : 1 A 2 1 A 2 jalan Node *jalan = A; while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl; jalan = jalan->berikut; } * Output : Isi elemen : 1 Isi elemen : 2 jalan jalan 1 A 2
17
Bagaimana mengetahui isi list? (3)
Asumsi : 1 A 2 ? 1 A 2 ? jalan Node *jalan = A; while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl; jalan = jalan->berikut; } * * Output : Isi elemen : 1 Isi elemen : 2 Stop !!! jalan 1 A 2 ? ?
18
Menghapus elemen pertama (1)
Asumsi : Node *hapus = new Node; hapus = A; 1 1 A 2 ? 1 1 A 2 ? hapus
19
Menghapus elemen pertama (2)
Asumsi : Node *hapus = new Node; hapus = A; A = A->berikut; 1 2 1 A 2 ? 1 hapus 1 2 ? 2 A
20
Menghapus elemen pertama (3)
Asumsi : Node *hapus = new Node; hapus = A; A = A->berikut; delete hapus; 1 2 1 A 2 ? 3 1 3 hapus 1 2 ? 2 A
21
Menghapus elemen terakhir (1)
Asumsi : Node *hapus = new Node; hapus = A->berikut; 1 1 A 2 ? 1 hapus 1 A 2 ?
22
Menghapus elemen terakhir (2)
Asumsi : Node *hapus = new Node; hapus = A->berikut; delete hapus; 1 1 A 2 ? 2 1 2 hapus 1 A 2 ?
23
Menghapus elemen terakhir (3)
Asumsi : Node *hapus = new Node; hapus = A->berikut; delete hapus; A->berikut = 0; 1 1 A 2 ? 2 3 1 2 hapus 1 A 2 ? 3
24
Latihan Buatlah algoritma untuk menyalin seluruh elemen sebuah link list. Buatlah algoritma untuk menyalin seluruh elemen sebuah link list yang genap. Buatlah algoritma untuk menghapus seluruh elemen sebuah link list yang genap.
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.