BAB 2. STRUKTUR DATA Tipe Data Tipe Data Abstrak Tingkatan Abstraksi Tipe Data Jenis-jenis struktur data Array Karakteristik Tipe data Abstrak pada Array Dimensi Array Array Multidimensi Pencapaian (access) Data Pencapaian berdasarkan indeks Array Mapping Functions Parameter Array Fungsi Pemetaan Rumus AMF Rumus perhitungna besarnya memori yang digunakan oleh array 1
STRUCTURE Karakteristik Deklarasi Structure Tipe Data Abstrak pada Struct Struktur Mapping Function Parameter mapping Function Parameter Structure Rumus Umum SMF Memori yang digunakan oleh struct Array of Structure Linked List Tinjau ulang Pointer Struktur Linked List Double Linked List Bentuk Circular Duble Linked List(linked List ganda Melingkar) 2
STACK Operasi dalam Stack Implementasi stack dengan linked list Aplikasi Stack Konfersi Infix ke Postfix Algoritma Evaluasi Postfix QUEUE Operasi dalam Queue Proses Enqueu Proses Dequeu Circular Queue Implementasi Queu dalam linked list Priority Queue Representasi Priority Queue Binary Tree Bentuk umum Binary Tree Karakteristik Binary Tree Hubungan Parent-Child Hubungan Ancestor-Descendant Tree Path Lenght 3
Binary Search Tree Bentuk Khusus Binary Tree Rekursive pada Binary Tree Tree Traversal Operasi pada Binary Tree Implementasi Binary Tree pada Array Implementasi dengan double Linked List Implementasi dengan Multi Linked List Expression Tree AVL TREE Pivot Rotasi Ganda HEAP Membangun Heap Rotasi Ganda B-Tree Perbandingan Struktur data Karakteristik B-Tree Operasi dalam B-Tree 4
HASHING Practical Hashing Function Penempatan elemen ke dalam tabel hashing Collision GRAPH Aplikasi Graph 5
TUJUAN UMUM Memperkenalkan mahasiswa tentang tipe data TUJUAN KHUSUS Memperkenalkan mahasiswa tentang DATA ATOMIK Memperkenalkan mahasiswa tentang DATA komposit Penerapan array Penyimpanan array dalam memori 6
Struktur Data Metode untuk mengorganisasikan data di dalam memori komputer, sehingga data dapat diolah secara efisien, yaitu: 1. Menggunakan tempat yang sehemat mungkin di memori 2. Menggunakan waktu yang secepat mungkin untuk menyimpan dan mengambil data Seringkali dua keadaan di atas tidak bisa dicapai sekaligus, tetapi harus dicapai suatu kompromi dari dua keadaan di atas dan untuk itulah Struktur Data dipelajari. TIPE DATA Mendeklarasikan tipe data adalah suatu cara untuk menetapkan: 1. Informasi apa yang terkait dengan data 2. Ukuran memori yang digunakan oleh data 3. Operasi apa yang dapat dilakukan terhadap data 7
CONTOH: int x; char c; float y; Var x: menempati 2-byte memori, informasi yang terkait adalah data integer(bilangan bulat), operasi yang dapat dilakukan: kali, bagi, tambah, kurang dan sisa hasil bagi. Rentang nilai bilangan: -3278 s/d 32767 Var c: menempati 1-byte memori informasi yang terkait adalah kata karakter (tabel ASCII), operasi yang dilakukan: menyambung, menyalin karakter (concatenation, copy, etc) Var y: menempati 4-byte memori informasi yang terkait adalah data float (bilangan pecahan), operasi yang dapat dilakukan: kali, bagi, tambah, kurang. Rentang nilai bilangan bulat: -3.4x10-38 s/d 3.4x10-38 Kelas Tipe Data 1. Tipe Data Atomik(int, char, float) 2. Tipe Data Terstruktur(array, struct) 8
TIPE DATA ABSTRAK (TDA) Abstraksi: Suatu proses yang sengaja mengurangi rincian dari suatu objek, dengan harapan dapat memahami objek tersebut dengan baik atau lebih nudah. Tingkatan abstraksi sesuai dengan seberapa besar rincian-rincian dihilangkan. Tingkatan abstraksi dapat berbeda, tergantung dari sudut pandang seseorang terhadap suatu objek. Contoh: Abstraksi terhadap objek mobil: 1. Bagi pemilik, mobil adalah: - Merk/tipe/tahun mobil -Warna 2. Bagi Sopir, mobil adalah: - Stir (kemudi) - Pedal gas, kompling dan rem 3. Bagi montir, mobil adalah: - Mesin, karburator, pengapian, distributor, dsb. 9
Tingkatan Abstrasi Tipe Data 1. Tipe Data Abstrak: Timbul dari hasil Imajinasi 2. Tipe Data Virtual: Terdapat dalam suatu bahasa pemrograman (virtual prosesor) 3. Tipe data Fisik: Secara fisik dalam memori komputer Contoh: Tipe Data Atomik Terstruktur Abstrak Jml mahasiswa Tabel Suhu Virtual Integer Array 10
Keuntungan menggunakan TDA: 1. Modularitas 2. Penyembunyian Informasi 3. Kebebasan Pelaksanaan 4. Integritas Data 5. Penyederhanaan Masalah Langkah-langkah menterjemahkan TDA ke Virtual: 1. Pilih bahasa pemrograman yang akan digunakan: C/C++, Pascal 2. Pilih cara untuk merepresentasikan data dalam bentuk: Array, struct, record, set, dsb. 3. Tulis program untuk implementasi JENIS-JENIS STRUKTUR DATA: 1. Linier: Struktur yang setiap elemen mempunyai hubungan satu-satu (one to one) dengan elemen lainnya 1 6 5 3 2 11
2. Tree/Hirarki:Struktur yang setiap elemennya mempunyai hubungan satubanyak (one to many) dengan elemen lainnya. 9 6 1 5 7 4 2 3. Graph/Jaringan Struktur yang setiap elemen mempunyai hubungan banyak-banyak (many to many) dengan elemen lainnya. B E A C F G D F 12
SET: Struktur yang elem-elemennya hanya mempunyai hubungan keangotaan, tidak ada elemen pertama, kedua, terakhir.urutan elemen di dalam set tidak penting Contoh: S1 = {a,b,c} S2={b,a,c} S3={c,b,a} maka S1=S2=S3 Latihan 1. Sebutkan tingkatan abstraksi untuk objek: Komputer, Radio 2. Berikan contoh struktur linier, hirarki, jaringan dan set dalam kehidupan seharihari 13
KARAKTERISTIK ARRAY - Hubungan antara elemen linier - Penempatan di memori secara fisik maupun logik sama - Hubungan antara indeks dengan komponen adalah one-to-one - Tipe data homogen - Cara access Random TIPE DATA ABSTRAK ARRAY - Retrieve(s, k, i); Mengambil data sari array s pada indeks i untuk disimpan di variabel k. Implementasi: k = s[i]; - Update(s, k, i); Mengubah nilai data dari array s pada indeks i, dengan nilai dari variabel k. Implementasi: s[i] = k; 14
CONTOH: Buat suatu algoritma dengan menggunakan kedua operator Retrieve( ) dan update( ) untuk: 1. Menyalin isi array A ke array B 2. Menjumlakah array A dengan array B, hasilnya disimpan di array C. DIMINSI ARRAY Array 1-Dimensi List Vektor Array 2-Dimensi Tabel Matriks ARRAY MULTIDIMENSI Secara teoritis jumlah dimensi array tidak terbatas, tetapi secara praktis array digunakan hanya sampai dimensi 3. 15
PENCAPAIAN (ACCESS) DATA Positional Access Pencapaian data berdasarkan nilai indeks Assocoative Access Pencapaian data berdasarkan nilai/isi komponen Pencapaian berdasarkan indeks a. Alamat (address) komponen di memori dapat dihitung berdasarkan nilai indeks. b. Array dengan d-dimensi, memerlukan d penjumlahan dan d perkalian. c. Kecepatan perhitungan tidak tergantung kepada banyaknya komponen, tetapi tergantung kepada besarnya dimensi. Contoh: 1. Int A[10000]; Banyaknya komponen = 10000 2. Int B[10][10] Banyaknya komponen = 100 3. Int C[2][2][2] Banyaknya komponen = 8 16
ARRAY MAPPING FUNCTION Fungsi untuk memetakan komponen array pada indeks i ke alamat di memori Perhitungan AMF memerlukan parameter array Parameter Array 1. Alamat awal (b) Alamat komponen pertama array di memori. Pada dasarnya alamat ini tidak diketahui oleh pemrogram, sehingga nilai b selalu dimisalkan 2. Panjang komponen(l) Ukuran tipe data(dalam byte) yang digunakan, seperti integer: L = 2, Char: L=1 dan float: L= 4 3. Batas bawah (l k ) dan batas atas (u k ) Untuk deklarasi array: int x[12]; maka : l 1 = 0 (selalu dimulai dari 0) U 1 = 11 4. Dimensi Array (d) Untuk deklarasi array: float H[6][2][6] maka : d =3, l 1 = l 2 = l 3 0 dan U 1 = 5, U 2 = 1, U 3 = 5 17
Fungsi Pemetaan Row major order Cara penyimpanan data dalam suatu bahasa pemrograman bahasa C/C++ dan Pascal menggunakan roe major order, sedangkan bahasa Fortran menggunakan column major order Virtual Origin /Virtual Base Nilai kontanta C 0 (lokasi komponen dengan indeks 0). Di dalam bahasa C/C++ nilai C 0 = b, di dalam bahasa Pascal nilai C 0 dapat berbeda dengan nilai b. Rumus umum AMF Addr(S[i 1 ][i 2 ] [i d ] = c 0 + c 1 x i 1 +. + c d x i d Dengan : c d = L c t-1 = ( U t i t + 1) x c t = (U t + 1 ) x c t 1 < t < = d = b c o 18
Rumus perhitungan besarnya memori yang digunakan oleh array M = L x ( u 1 + 1) x ( u 2 + 1) x.. X ( u d + 1) Contoh perhitungan AMF: 1. Array 1- dimensi Diketahui deklarasi array: floatq[6]; maka: L = 4, karena tipe data float u 1 = 5; b = 500; dimisalkan komponen awal dimulai dari alamat 500. Perhitungan : c 1 = L = 4 c 0 = b = 500 Addr(Q[i]) = c 0 + c 1 x i 1 Addr(Q[3]) = c 0 + c 1 x i 1 = 500 + 4 x 3 = 512 Addr(Q[5]) = c 0 + c 1 x i 1 = 500 + 4 x 5 = 520 19
Mapping Tabel Array Q Indeks Address 0 500 1 504 2 508 3 512 4 516 5 520 Besarnya memori yang dibutuhkan oleh array Q M = L x ( u 1 + 1) = 4 x (5+1) = 24 byte 2. Array 2-dimensi Diketahui deklarasi array:int R[4][5]; maka: L = 2; karena tipe data = integer u 1 = 3; u 2 = 4 b = 300; dimisalkan komponen awal dimulai dari alamat 300 20
Perhitungan: c 2 = L = 2 c 1 = (U 1 + 1 ) x c 2 = (4 + 1 ) + 2 = 10 c 0 = b = 300 Addr(P[i][j]) = c 0 + c 1 x i + c 2 x j = 300 +10 x 40 +2 x 5 Bersama memori yang dibitukan oleh array P Latihan M = L x ( u 1 + 1) x ( u 2 + 1) 1. Bila dideklarasikan : int A[4][6]; Dimisalkan b =100, cari alamat dari A[0][0], A[2][3] dan A[3][5], kemudian hitung besarnya memori yang diperlukan oleh array A. 2. Bila dideklarasikan: Int B[4][6][5]; Dimisalkan b = 200, cari alamat dari B[0][0][0], B[2][3][2], B[1][5][4], kemudian hitung besarnya memori yang diperlukan oleh array B 21