Array
Array
Metode Penyimpanan
Penyimpanan struktur data dalam memori
computer 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
Ali
Adi
.
.
.
.
.
.
n-1
Ari
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
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)
.
Lo = 1000
B[15] = ?
Jawab :
B[15] = 1000 + 2.(15-5) = 1000 + 20 = 1020
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
1jn
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 (2)
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
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
Record
RECORD, adalah type data kompleks yang
menyimpan berbagai macam data yang
tergabung menjadi satu kesatuan data.
Cara penyimpanan type data record pada
memori adalah dengan menyimpan masingmasing fieldnya secara berurutan di dalam
memori.
Jumlah memori yang diperlukan oleh type
data record sebesar total memori yang
dibutuhkan untuk masing-masing fieldnya.
Record (2)
Contoh:
1: var
2:
R: record
3:
Field1 : integer;
4:
Field2 : real;
5:
Field3 : string[10];
6:
end;
ARRAY of RECORD
type data array of record, cara penyimpanan pada
memori sama seperti penyimpanan type data array,
hanya saja ukuran 1 elemen = ukuran 1 record
Contoh:
1:
2:
3:
4:
5:
6:
7:
8:
TYPE
Mhs = Record
Nama : String[20];
Alamat : String[40];
Umur : Byte;
END;
VAR
Data: ARRAY [1..10] of Mhs;
Contoh Soal
TYPE
tPegawai = RECORD
Nama : STRING[20];
Alamat : STRING[30];
Usia : Byte;
Gaji : Real;
Status : Char;
END
VAR
A : ARRAY [10..30,13..25] of tPegawai;
Secara RMO
L = Lo + {(i-l1) * (u2 l2 + 1) + (j l2)} * c
A[15,15] = 1000 + {(15-10)*(25-13+1) + (15-13)} * 60
= 1000 + {5*13+2}*60
= 1000 + 67 * 60
= 1000 + 4020 = 5020
A[19,13] = 1000 + {(19-10)*(25-13+1) + (13-13)} * 60
= 1000 + (9*13) * 60
= 1000 + 7020 = 8020
A[20,21] = 1000 + {(20-10)*(25-13+1) + (21-13)} * 60
= 1000 + (10*13+8) *60
= 1000 + 138 * 60
= 1000 + 8280
= 9280
Secara CMO
L = Lo + {(i-l1) + (j-l2) * (u1 l1 + 1)} * c
A[15,15] = 1000 + {(15-10)+(15-13) * (30-10+1)} * 60
= 1000 + {5 + 2 * 21} * 60
= 1000 + (5+42) * 60 = 1000 + 2820 = 3820
A[19,13] = 1000 + {(19-10)+(13-13) * (30-10+1)} * 60
= 1000 + (9 + 0 * 21) * 60
= 1000 + 9 * 60 = 1540
A[20,21] = 1000 + {(20-10)+(21-13) * (30-10+1)} * 60
= 1000 + {10 + 8 * 21} *60
= 1000 + 10 + 168 *60
= 1000 + 10680
= 11680