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
1 2 . . . . . . n-1 n Ari Avi Ali Adi
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 (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) .
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
Lo = 1000 B[15] = ?
Jawab : B[15] = 1000 + 2.(15-5) = 1000 + 20 = 1020
A(1,1)
A(1,2) baris 1
A(1,3)
A(2,1)
A(2,2)
A(2,3)
A(4,1)
A(4,2)
A(4,3)
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 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
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
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