210 likes | 568 Views
STRUKTUR DATA. ARRAY Denny Agustiawan,M.pd. STMIK Asia Malang – 2011. Metode Penyimpanan. Penyimpanan struktur data dalam memori komputer dilakukan dengan 2 metode: Sequential Allocation statis Linked Allocation dinamis. 1. Ali. 2. Adi. n-1. Ari. n. Avi.
E N D
STRUKTUR DATA ARRAY Denny Agustiawan,M.pd STMIK Asia Malang – 2011
MetodePenyimpanan Penyimpanan struktur data dalam memori komputer dilakukan dengan 2 metode: • Sequential Allocation statis • Linked Allocation dinamis
1 Ali 2 Adi . . . . . . n-1 Ari n Avi Sequential allocation • Dengan sequential allocation alamat sebuah elemen akan dapat ditentukan jika telah diketahui nomor urut / indeks yang menunjukkan posisi elemen dan kapasitas memori yang digunakan untuk setiap elemen
Sequential Allocation • Untuk menyimpan n sejumlah data harus didefinisikan terlebih dahulu besarnya memori / jumlah tempat yang digunakan untuk menyimpan data tersebut. • Sebaliknya, jika tempat yang disediakan berlebih, maka terjadi pemborosan memori, sehingga metode ini disebut Metode Pengalamatan Statis. • Contoh paling sederhana dari sequential allocation ini adalah ARRAY.
Array • Array 1-dimensi disebut Vektor • Array 2-dimensi disebut Matriks
Vektor (array 1-dimensi) • Biasanya digunakan untuk menyatakan suatu daftar yang mempunyai urutan tertentu (tidak boleh bolak-balik) • Diawali sebuah ordered-list, misal: Jan, Feb, …, Des. • Jika dilakukan alokasi memori (misal: 100 byte), maka alokasi memori yang dipesan akan terletak secara berurutan & tidak terpencar-pencar, mulai elemen pertama hingga terakhir.
A(1) Lo . . . L A(i) . . . . A(n) Vektor (2) • Untuk sebuah vektor n elemen, yang tiap elemennya membutuhkan c byte, maka total memori yang dialokasikan sebesar c * n byte dengan struktur alokasi vektor sbb: Lo = alamat awal elemen pertama array A c = ukuran satu elemen L = Lo + c(i -1) A[i] = lokasi elemen ke-I array A
Contoh segmen program Pascal 1: CONST 2: n = 100 3: VAR 4: A : array [1..n] of integer Misalkan elemen pertama (Lo) berada pada offset 1000, c = 2 byte maka, pada offset ke berapakah elemen ke-5 = A[5] ? Jawab: Lo = 1000 c = 2 byte i = 5 L = A[5] = 1000 + 2*(5-1) = 1000 + 8 = 1008
Contohsegmen program Pascal (2) Contoh 2 : 1: Var 2: B : array [5..30] of integer Lo = 1000 B[15] = ? Jawab : B[15] = 1000 + 2.(15-5) = 1000 + 20 = 1020
Matriks (Array 2-D) • Ada 2 cara penyimpanan di memori: • Row Major Order (RMO) • Column Major Order (CMO)
Row Major Order (RMO) Row Major Order (RMO) Data disimpan baris per baris sebagai sebuah vektor Contoh: 1: CONST 2: n = 4 {jumlah baris} 3: m = 3 {jumlah kolom} 4: VAR 5: A: array [1..n,1..m] of integer baris – 1 baris – 2 baris – 4
RMO Rumus pencarian lokasi elemen A[i,j] secara RMO L = Lo + { (i-1) * m + (j-1) } * c di mana 1 ≤ i ≤ n 1 ≤ j ≤ m i = indeks jumlah baris j = indeks jumlah kolom m = jumlah kolom c = ukuran satu elemen Lo = alamat elemen awal
RMO Contoh: Lo = 1000, c =2 , n =4, m = 3 A[3,2] = ? A[3,2] = 1000 + {(3-1)*3 + (2-1)} * 2 = 1000 + 7 * 2 = 1000 + 14 = 1014
RMO Secara umum: untuk matriks yang mempunyai lower bound lk dan upperbound uk, maka: L = Lo + {(i-l1) * (u2 – l2 + 1) + (j – l2)} * c Array [1 .. 6 ; 2 .. 5] l1 = 1; l2 = 2; u1 = 6; u2 = 5 B[3,2] = 1000 + {(3-1) * (5-2+1) + (2 – 2)} * 2 = 1000 + (2*4 + 0) * 2 = 1016
Column Major Order (CMO) Column Major Order (CMO) Prinsip penyimpanan mirip dengan RMO, hanya saja data disimpan kolom per kolom sebagai sebuah vector Misal: matriks A dengan dimensi 4 baris & 3 kolom kolom – 1 kolom – 2 kolom – 3
CMO Rumus CMO L = Lo + {(i-1) + (j-1) * n} * c 1 ≤ i ≤ n, 1 ≤ j ≤ m L = Lo + {(i-l1) + (j-l2) * (u1 – l1 + 1)} * c A[3,2] = 1000 + {(3-1) + (2-1) * 4} * 2 = 1000 + (2+4) * 2 = 1012 B[3,2] = 1000 + { (3-1) + (2-2) * (6-1+1)} * 2 = 1000 + (2 + 0 * 6) * 2 = 1004
ARRAY 3 DIMENSI A [i,j,k] 1 ≤ i ≤ 2, 1 ≤ j ≤ 5, 1 ≤ k ≤ 4 Rumus Secara umum 1 ≤ i ≤ n1, 1 ≤ j ≤ n2, 1 ≤ k ≤ n3 A[i,j,k] = Lo + {(i-1) * n2 * n3 + (j-1) * n3 + (k-1)} * c Rumus untuk Array [l1 .. u1, l2 .. u2, l3 .. u3] of type data A[i,j,k] = Lo + {(i – l1) * (u2 – l2 + 1) * (u3 – l3 + 1) + (j – l2) * (u3 – l3 + 1) + (k – l3)} * c
LatihanSoal • Diketahui segmen program Pascal sbb: Const a=2; b=5 n=100 m=50 Var Array_A : Array [1..1000] of string[30]; Array_B : Array [1..b,1..m] of integer; Array_C : Array [a..m,b..n] of real; Array_D : Array [m..n] of boolean;
LatihanSoal • Jika Lo = 1000, maka tentukan: • Array_A[57] • Array_A[82] • Array_B[3,43] secara RMO • Array_B[4,44] secara CMO • Array_C[3,99] secara RMO • Array_C[m-a,n-b] secara CMO • Array_C[m-a,n-b] secara RMO • Array_B[b-3,m-(b*2)] secara CMO • Array_D[n-m] • Array_D[77]