STRUKTUR DATA - 3 SKS - 2011

Download Report

Transcript STRUKTUR DATA - 3 SKS - 2011

PERTEMUAN KE-4
Pemetaan Array ke Memori
Kasus: Array Dimensi 1
Array A(1:5)
Alamat awal elemen A[i] di memori dihitung sbb : B + (i – L) * S
Contoh:
Elemen A[4] alamat awalnya di memori adalah:
32004 + (4 – 1) * 1 = 32004 + 3 * 1 = 32007
…
32014
32013
32012
32011
32010
32009
L
32008
5
A F S E L
32007
E
32006
4
32005
S
32004
3
Memori
32003
F
32002
2
…
A
0
1
Array A (dimensi 1) dipetakan ke memori mulai alamat
32004 (Base address). Kebutuhan memori tiap elemen
(S) = 1 byte.
Pemetaan Array ke Memori
Kasus: Array Dimensi 1
Array X(-2:2)
…
32014
32013
32012
32010
Alamat awal elemen X[i] di memori dihitung sbb : B + (i – L) * S
Contoh:
Elemen X[1] alamat awalnya di memori adalah:
32004 + (1 – (-2)) * 2 = 32004 + 3 * 2 = 32010
32011
65000 12000
32009
12000
9000
32008
2
10000 22000
32007
65000
32006
1
32005
9000
32004
0
Memori
32003
22000
32002
-1
…
10000
0
-2
Array X (dimensi 1) dipetakan ke memori mulai alamat
32004 (Base address). Kebutuhan memori tiap elemen
(S) = 2 byte.
Pemetaan Array ke Memori
Kasus: Array Dimensi 2
Ada 2 metode pemetaan array dimensi 2 ke memori:
i. Row major order,
yaitu memetakan elemen-elemen array ke memori secara baris demi baris.
Memori
ii. Column major order,
yaitu memetakan elemen-elemen array ke memori secara kolom demi kolom.
Memori
Pemetaan Array ke Memori
Kasus: Array Dimensi 2
Array A(1:3,1:4)
4
Alamat awal elemen A[i,j] di memori dihitung sbb : B + (i-L1) * (U2-L2+1) * S + (j-L2) * S
Contoh:
Elemen A[2,3] alamat awalnya di memori adalah:
500000 + (2-1)*(4-1+1)*1 + (3-1)*1 = 500000 + 4 + 2 = 500006
…
500012
J K L
500011
A B C D E F G H I
500010
L
0
K
500009
J
500008
I
500007
3
Memori
500006
F G H
500005
E
500004
2
500003
A B C D
500002
1
500001
3
500000
2
…
1
Array A (dimensi 2) dipetakan ke memori mulai alamat
500000(Base address) dgn metode row major order.
Kebutuhan memori tiap elemen (S) = 1 byte.
Pemetaan Array ke Memori
Kasus: Array Dimensi 2
Array X(0:2,-1:2)
2
Alamat awal elemen A[i,j] di memori dihitung sbb : B + (j-L2) * (U1-L1+1) * S + (i-L1) * S
Contoh:
Elemen A[1,1] alamat awalnya di memori adalah:
500000 + (1-(-1))*(2-0+1)*1 + (1-0)*1 = 500000 + 2*3 + 1 = 500007
…
J C G K D H L
500012
I B F
500011
A E
500010
L
0
K
500009
J
500008
I
500007
2
Memori
500006
F G H
500005
E
500004
1
500003
A B C D
500002
0
500001
1
500000
0
…
-1
Array X (dimensi 2) dipetakan ke memori mulai alamat
500000(Base address) dgn metode column major
order. Kebutuhan memori tiap elemen (S) = 1 byte.
Pemetaan Array ke Memori
Kasus: Array Dimensi n
Memori
Bagaimana menghitung alamat awal elemen A[i1,i2,i3,…,in] jika array dimensi n
dipetakan ke memori ?
Pemetaan Array ke Memori
Kasus: Array Segitiga Atas
Array segitiga atas A
dipetakan ke memori
dengan base address =
40000.
Kebutuhan memori tiap
elemen (S) = 1 byte.
A
B
C
D
E
F
G
H
I
J
K
M
L
N
O
Alamat awal elemen A[i,j] di memori dihitung sbb :
B + ((i-1)*N+j - i*(i-1)/2 - 1) * S
Contoh:
Elemen A[3,4] alamat awalnya di memori adalah:
= 40000 + ((3-1)*5+4 - 3*(3-1)/2 - 1) * 1
= 40000 + (2*5 + 4 – 3 * 2/2 - 1) * 1
= 40000 + (10+4-3*1 - 1)*1 = 40000 + 14 – 3 – 1
= 40010
…
0
A
40000
B
40001
C
40002
D
40003
E
40004
F
40005
G
40006
H
40007
I
40008
J
40009
K
40010
L
40011
M
40012
N
40013
O
40014
40015
…
…
Pemetaan Array ke Memori
Kasus: Array Segitiga Bawah
Array segitiga bawah A
dipetakan ke memori
dengan base address =
40000.
Kebutuhan memori tiap
elemen (S) = 1 byte.
A
B
C
D
E
F
G
H
I
K
L
M
J
N
Alamat awal elemen A[i,j] di memori dihitung sbb :
B + (i*(i-1)/2 + j - 1) * S
Contoh:
Elemen A[4,3] alamat awalnya di memori adalah:
= 40000 + (4*(4-1)/2 + 3 - 1) * 1
= 40000 + (4*3/2+3-1) = 40000 + 9 – 1
= 40008
O
…
0
A
40000
B
40001
C
40002
D
40003
E
40004
F
40005
G
40006
H
40007
I
40008
J
40009
K
40010
L
40011
M
40012
N
40013
O
40014
40015
…
…
JENIS-JENIS DATA
• Tipe Data Sederhana
- Data Sederhana Tunggal :
integer, real, boolean, karakter
- Data Sederhana Majemuk : string
• Tipe Data Berstruktur
- Struktur sederhana : array, record
- Struktur majemuk
- Linier : stack (tumpukan), queue (antrian),
linear linked list
- Non Linier : tree (pohon), graph
Tipe RECORD
•
•
•
•
Record adalah koleksi satuan data yang heterogen.
Satuan data sering disebut field.
Field diacu dengan menggunakan nama field-nya.
Contoh: Data seorang mahasiswa terdiri atas:
MHS:
Nama
: string
NIM
: string
Usia
: byte
Menikah : boolean
Tinggi_cm : word
Tipe RECORD
• Identifikasi suatu record dilakukan dengan
menentukan suatu field yang nilainya unik,
artinya tidak boleh ada yang nilainya sama.
Field seperti ini disebut key field.
• Misalnya, untuk record mahasiswa, biasanya
dipakai NIM sebagai key field.
• Koleksi record yang sama struktur fieldnya
disebut file atau berkas.
Tipe RECORD
• Suatu field dapat bertipe data record juga.
• Contoh :
MHS:
Nama : t_NAMA
NIM
: string
t_NAMA :
NamaDepan
: string
NamaBelakang : string
Tipe RECORD
• Contoh cara mengacu field suatu record.
MHS
:
Nama : t_NAMA
NIM
: string
Variabel Mhs_STMIK bertipe MHS.
Mhs_STMIK.NIM
Mhs_STMIK.Nama.NamaDepan
Mhs_STMIK.Nama.NamaBelakang
Tipe RECORD
Tinggi_cm
Menikah
Usia
NIM
.
Nama
• Pemetaan Tipe Record ke Memori
MHS:
Nama
: string
NIM
: string
Usia
: byte
Menikah
: boolean
Tinggi_cm
: integer
Gabungan Struktur Record dan Array
Contoh kasus
Data mahasiswa terdiri atas berbagai tipe.
Nama : STRING
NIM : STRING
TTL : STRING
Alamat : STRING
IPK : REAL
Tinggi badan _cm: INTEGER
Berat badan_kg : REAL
Jumlah saudara : INTEGER
Untuk mencatat data 500 orang mahasiswa maka digunakan tipe
Array(1:500) dengan tipe RECORD.
Gabungan Struktur Record dan Array
Pada kasus di atas, pendeklarasian struktur datanya sebagai berikut:
Tipe MHS:
Nama : STRING
NIM : STRING
TTL : STRING
Alamat : STRING
IPK : REAL
Tinggi badan : REAL
Berat badan : REAL
Jumlah saudara : INTEGER
Tipe DATA (1:500) = (DATA(i)), i=1,2,…,500; DATA(i) bertipe MHS
Gabungan Struktur Record dan Array
Dapatkah terjadi sebaliknya, struktur record
mengandung tipe array pada field-nya?