Pertemuan 2(struktur data)
Download
Report
Transcript Pertemuan 2(struktur data)
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
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
1
Ali
2
Adi
.
.
.
.
.
.
n-1
Ari
n
Avi
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.
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
A(1)
Lo
.
.
.
A(i)
.
.
.
A(n)
.
L
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
Contoh segmen 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
A(1,1)
A(1,2)
baris – 1
A(1,3)
A(2,1)
A(2,2)
A(2,3)
baris – 2
…
A(4,1)
A(4,2)
baris – 4
A(4,3)
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
A(1,1)
A(2,1)
A(3,1)
kolom – 1
A(4,1)
A(1,2)
…
A(4,2)
kolom – 2
A(1,3)
…
A(4,3)
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
Latihan Soal
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;
Latihan Soal
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]