SlideShare a Scribd company logo
1 of 85
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
BAGIAN IBAGIAN I
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StrukturStruktur DataData
Metode untuk mengorganisasikan data diMetode untuk mengorganisasikan data di
memori komputer, sehingga data dapat diolahmemori komputer, sehingga data dapat diolah
secara efisien, yaitu menggunakan:secara efisien, yaitu menggunakan:
 Tempat (Tempat (memorimemori) yang) yang hemathemat..
 Waktu (Waktu (akses dataakses data) yang) yang cepatcepat..
 Algoritma yang singkat dan jelas.Algoritma yang singkat dan jelas.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StrukturStruktur DataData
Dikutip dari Binusmaya
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StrukturStruktur DataData
Dikutip dari Binusmaya
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Pre TestPre Test
Buat suatu program yang dapat memeriksa apakah
pasangan simbol kurung {} [] dan (), sudah benar.
Contoh:
1. {[()][()]} ; benar
2. [{()]} ; salah
3. [{()()}] ; benar
4. {[())()]} ; salah
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Tinjau Ulang (Tinjau Ulang (Review)Review)
Tipe Data TerstrukturTipe Data Terstruktur
 ArrayArray
 StructureStructure
 Array of StructureArray of Structure
 Linked-listLinked-list
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Kenapa harus array ?Kenapa harus array ?
Perhatikan persoalan berikut ini:Perhatikan persoalan berikut ini:
Menghitung nilai rerata dari 5 bilanganMenghitung nilai rerata dari 5 bilangan
dengan menggunakan 6 variabel yaitu:dengan menggunakan 6 variabel yaitu:
X1, X2, X3, X4, X5 dan Rerata.X1, X2, X3, X4, X5 dan Rerata.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
void main()void main()
{{
floatfloat X1,X2,X3,X4,X5;X1,X2,X3,X4,X5; floatfloat Rerata;Rerata;
printfprintf(“Bilangan 1 : “);(“Bilangan 1 : “); scanfscanf(“%f”, &X1);(“%f”, &X1);
printfprintf(“Bilangan 2 : “);(“Bilangan 2 : “); scanfscanf(“%f”, &X2);(“%f”, &X2);
printfprintf(“Bilangan 3 : “);(“Bilangan 3 : “); scanfscanf(“%f”, &X3);(“%f”, &X3);
printfprintf(“Bilangan 4 : “);(“Bilangan 4 : “); scanfscanf(“%f”, &X4);(“%f”, &X4);
printfprintf(“Bilangan 5 : “);(“Bilangan 5 : “); scanfscanf(“%f”, &X5);(“%f”, &X5);
Rerata = (X1+X2+X3+X4+X5)/5;Rerata = (X1+X2+X3+X4+X5)/5;
printfprintf(“ Nilai Rerata = %.2f “, Rerata);(“ Nilai Rerata = %.2f “, Rerata);
getch();getch();
}}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Perhatian ! Warning ! Achtung !Perhatian ! Warning ! Achtung !
Apa yang harus dilakukan, bila banyaknyaApa yang harus dilakukan, bila banyaknya
bilangan yang akan diprosesbilangan yang akan diproses
mencapai 100.mencapai 100.
Apakah akan digunakan:Apakah akan digunakan:
X1, X2, X3, … , X98, X99, X100X1, X2, X3, … , X98, X99, X100
??????
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
void main()void main()
{{
floatfloat X1,X2,X3,X4,X5;X1,X2,X3,X4,X5; floatfloat Rerata;Rerata;
printfprintf(“Bilangan 1 : “);(“Bilangan 1 : “); scanfscanf(“%f”, &X1);(“%f”, &X1);
printfprintf(“Bilangan 2 : “);(“Bilangan 2 : “); scanfscanf(“%f”, &X2);(“%f”, &X2);
printfprintf(“Bilangan 3 : “);(“Bilangan 3 : “); scanfscanf(“%f”, &X3);(“%f”, &X3);
printfprintf(“Bilangan 4 : “);(“Bilangan 4 : “); scanfscanf(“%f”, &X4);(“%f”, &X4);
printfprintf(“Bilangan 5 : “);(“Bilangan 5 : “); scanfscanf(“%f”, &X5);(“%f”, &X5);
Rerata = (X1+X2+X3+X4+X5)/5;Rerata = (X1+X2+X3+X4+X5)/5;
printfprintf(“ Nilai Rerata = %.2f “, Rerata);(“ Nilai Rerata = %.2f “, Rerata);
getch();getch();
}}
Dengan menggunakan array, program ini
Akan menjadi …………..
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
void main()void main()
{{
floatfloat XX[[55];]; floatfloat JJ,, RerataRerata;; intint II;;
JJ == 00;;
forfor ((II==0; I0; I<<5; I5; I++)++) {{
printfprintf(“Bilangan(“Bilangan %d%d : I: I++1“);1“); scanf(“%f”,scanf(“%f”, &&XX[[II]);]);
JJ == JJ ++ XX[[II];]; }}
RerataRerata == J/5;J/5;
printfprintf(“ Nilai Rerata =(“ Nilai Rerata = %.%.22f “,f “, Rerata);Rerata);
getch();getch();
}}
Menjadi lebih sederhana dan mudah disesuaikan.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
floatfloat AA[[55];];
 Deklarasi variabel array
Banyaknya ElemenBanyaknya Elemen
Indeks Array
Nama Array
Tipe Data
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
1.1. Homogen, seluruh elemen didalam arrayHomogen, seluruh elemen didalam array
mempunyai tipe data yang sama.mempunyai tipe data yang sama.
2.2. Random access, setiap elemen didalamRandom access, setiap elemen didalam
array – apakah elemen pertama atauarray – apakah elemen pertama atau
elemen terakhir - dapat dicapai dalamelemen terakhir - dapat dicapai dalam
waktu yang samawaktu yang sama..
 Sifat-sifat array
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
intint XX[[1010];];
Perhatikan,Perhatikan, indeks array selalu dimulai dari 0indeks array selalu dimulai dari 0
 Contoh deklarasi array
X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] X[9]
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
1.1. MenggunakanMenggunakan indeksindeks, misal elemen ketiga akan diisi, misal elemen ketiga akan diisi
dengan nilai 15, maka tulis: X[2]=15;dengan nilai 15, maka tulis: X[2]=15;
2.2. MenggunakanMenggunakan pointerpointer, tulis *(X+2) = 15;, tulis *(X+2) = 15;
Perhatikan,Perhatikan, X merupakan alamat dari X[0], oleh karena ituX merupakan alamat dari X[0], oleh karena itu
*X == *(X+0) == X[0].*X == *(X+0) == X[0].
 Mencapai (akses) elemen arrayMencapai (akses) elemen array
1515
X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] X[9]
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Perhatian ! Warning ! Achtung !Perhatian ! Warning ! Achtung !
Hati-hati dalam menulis elemen elemen array denganHati-hati dalam menulis elemen elemen array dengan
pointer:pointer:
*X + 2 dan *(X + 2)*X + 2 dan *(X + 2)
X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] X[9]
120
X
120
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
intint XX[ ] = {[ ] = {1010,,1111,,1212,,1313,,1414,,1515,,1616,,1717,,1818,,1919};};
Perhatikan,Perhatikan, jumlah elemen dapat dikosongkanjumlah elemen dapat dikosongkan
 Contoh deklarasi array dan isi awal
1010 1111 1212 1313 1414 1515 1616 1717 1818 1919
X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] X[9]
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
voidvoid Input_DataInput_Data(int(int XX[], int[], int NN))
{{
intint II;;
for (for (II==00;; II<<NN;; II++) {++) {
printf(“printf(“Data keData ke %d ”,%d ”, II++11); scanf(“%d”, &); scanf(“%d”, &XX[[II]); }]); }
}}
void main()void main()
{{
intint XX[[1010];];
clrscr();clrscr(); Input_DataInput_Data((XX,,1010); getch();); getch();
}}
 Passing parameter untuk array
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
Buat program yang dapatBuat program yang dapat
 Mengisi array int A[20] dengan bilangan acak dari 40 s/d 60Mengisi array int A[20] dengan bilangan acak dari 40 s/d 60
 Mencari nilai rerataMencari nilai rerata
 Mencari nilai maksimumMencari nilai maksimum
 Mencari nilai minimumMencari nilai minimum
 Mencari nilai deviasi standarMencari nilai deviasi standar
 Latihan
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Bila suatu array dideklarasi dengan tipe dataBila suatu array dideklarasi dengan tipe data charchar,,
maka variabel array tersebut akan menjadi variabelmaka variabel array tersebut akan menjadi variabel
string.string.
 Deklarasi string:Deklarasi string:
charchar NamaNama[[3030];];
charchar NamaNama[ ] = {‘[ ] = {‘PP’,’’,’ii’,’’,’nn’,’’,’kk’,’’,’yy’,’0’};//’,’0’};// 6 elemen6 elemen
charchar NamaNama[ ] = “[ ] = “PinkyPinky”;”; //// 6 elemen6 elemen
charchar NamaNama[[99] = “] = “PinkyPinky”;”; //// 9 elemen9 elemen
 String
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
#define#define Baris 20Baris 20
#define#define Kolom 4Kolom 4
intint MM[[BarisBaris][][KolomKolom];];
intint KK[[33][][44] = { {] = { { 33,, 66,, 88,, 99 },},
{{ 44,, 11,, 77,, 33 },},
{{ 55,, 22,, 66,, 88 } };} };
 Array dua dimensi (2-D); Matriks
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
voidvoid Input_DataInput_Data(int(int XX[][4], int[][4], int NN))
{{
intint II;;
for (for (II==00;; II<<NN;; II++)++)
for (for (JJ==00;; JJ<<44;; JJ++) {++) {
printf(“printf(“SelSel %d%d,,%d%d :: ”,”, II++1,J1,J++11); scanf(“%d”, &); scanf(“%d”, &XX[[II][][JJ]); }]); }
}}
void main()void main()
{{
intint KK[[33][][44];];
clrscr();clrscr(); Input_DataInput_Data((KK,,33); getch();); getch();
}}
 Passing parameter untuk array 2-D
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
#define#define Max 5Max 5
#define#define LenStr 20LenStr 20
charchar NamaNama[[MaxMax][][LenStrLenStr];];
charchar NN[[33][][1010] = { “] = { “AminudinAminudin”,”,
““BonaBona”,”,
””CindyCindy” };” };
 Array dua dimensi (2-D); String list
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
‘‘B’B’ ‘‘o’o’ ‘‘n’n’ ‘‘a’a’ ‘‘0’0’
 Array dua dimensi (2-D); String list
‘‘A’A’ ‘‘m’m’ ‘‘i’i’ ‘‘n’n’ ‘‘u’u’ ‘‘d’d’ ‘‘i’i’ ‘‘n’n’ ‘‘0’0’
‘C’ ‘i’ ‘n’ ‘d’ ‘y’ ‘0’
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
[0]
[1]
[2]
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Passing parameter string list
voidvoid Input_DataInput_Data(char(char XX[][10], int[][10], int NN))
{{
intint II;;
for (for (II==00;; II<<NN;; II++) {++) {
printf(“printf(“NamaNama %d%d :: ”,”, II++11); gets(); gets(XX[[II]; }]; }
}}
void main()void main()
{{
charchar NN[[33][][1010];];
clrscr();clrscr(); Input_DataInput_Data((NN,,33); getch();); getch();
}}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
char *char *NN[[33] = { “] = { “AminudinAminudin”,”,
““BonaBona”,”,
““CindyCindy” };” };
 Array of pointer (1-D); String list
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
‘‘B’B’ ‘‘o’o’ ‘‘n’n’ ‘‘a’a’ ‘‘0’0’
 Array of pointer (1-D); String list
‘‘A’A’ ‘‘m’m’ ‘‘i’i’ ‘‘n’n’ ‘‘u’u’ ‘‘d’d’ ‘‘i’i’ ‘‘n’n’ ‘‘0’0’
‘C’ ‘i’ ‘n’ ‘d’ ‘y’ ‘0’
100
109
114
100
109
114
N[0]
N[1]
N[2]
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Array of pointer (2-D); String table
char *char *NN[[33][][44] = { {“] = { {“AminudinAminudin”, “”, “3456734567”,””,”2.992.99”,””,”8383”},”},
{“{“BonaBona”, “”, “3456834568”,””,”3.133.13”,””,”7979”},”},
{“{“CindyCindy” ,“” ,“3456934569”,””,”2.572.57”,””,”6666”} };”} };
NamaNama NIMNIM IPKIPK NilaiNilai
AminudinAminudin 3456734567 2.992.99 8383
BonaBona 3456834568 3.133.13 7979
CindyCindy 3456934569 2.572.57 6666
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer
1010 1515 2020 2525
3030 3535 4040 4545
5050 5555 6060 6565
7070 7575 8080 8585
int Tabel[4][4]int Tabel[4][4]
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer
Tabel[0]Tabel[0] 1010 1515 2020 2525
3030 3535 4040 4545
1010 1515 2020 2525
3030 3535 4040 4545
Tabel[1]Tabel[1]
Tabel[2]Tabel[2]
Tabel[3]Tabel[3]
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer
*(Tabel+0)*(Tabel+0) 1010 1515 2020 2525
3030 3535 4040 4545
1010 1515 2020 2525
3030 3535 4040 4545
*(Tabel+1)*(Tabel+1)
*(Tabel+2)*(Tabel+2)
*(Tabel+3)*(Tabel+3)
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer
3030 3535 4040 4545
*(Tabel+1)+3*(Tabel+1)+3
*(Tabel+1)+2*(Tabel+1)+2
*(Tabel+1)+1*(Tabel+1)+1
*(Tabel+1)+0*(Tabel+1)+0
*(*(Tabel+1)+0)*(*(Tabel+1)+0)
*(*(Tabel+1)+1)*(*(Tabel+1)+1)
*(*(Tabel+1)+2)*(*(Tabel+1)+2)
*(*(Tabel+1)+3)*(*(Tabel+1)+3)
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ArrayArray
 Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer
Secara umum dapat ditulisSecara umum dapat ditulis::
Tabel[I][J] = *(*(Tabel+I)+J)Tabel[I][J] = *(*(Tabel+I)+J)
Pointer to pointerPointer to pointer
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Pencapaian (access) data
•Positional Access
Pencapaian data berdasarkan indeks.
•Associative Access
Pencapaian data berdasarkan nilai/isi
komponen.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Pencapaian berdasarkan indeks
a.Alamat (address) komponen di memori
dapat dihitung berdasarkan nilai indeks.
b.Array dengan d-dimensi, memerlukan d
penjumlahan dan d perkalian.
c. Kecepatan perhitungan tidak tergantung
kepada banyaknya komponen, tetapi
tergantung kepada besarnya dimensi.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Contoh:
int A[10000];
/* Banyak komponen = 10000 */
int B[10][10];
/* Banyak komponen = 100 */
int C[2][2][2];
/* Banyak komponen = 8 */
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Parameter Array
1. Alamat awal (b)
Alamat komponen pertama array di memori.
Pada dasarnya alamat ini tidak diketahui oleh
pemrogram, sehingga nilai b selalu dimisalkan.
2. Panjang Komponen (L)
Ukuran tipe data (dalam byte) yang digunakan,
seperti integer: L = 2,
char: L = 1 dan float: L = 4.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
3. Batas bawah (lk) dan Batas atas (uk)
Untuk deklarasi array: int X[12];
Maka:
l1 = 0 (selalu dimulai dari 0)
u1 = 11.
4. Dimensi array (d)
float H[6][2][6];
Maka:
d = 3;
l1=l2=l3=0 dan
u1=5; u2=1; u3=5;
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Fungsi pemetaan
• Row major order
Cara penyimpanan data dalam suatu
bahasa pemrograman, bahasa C dan Pascal
menggunakan row-major order,
sedangkan bahasa Fortran menggunakan
column-major order.
• Virtual Origin / Virtual Base
Nilai konstanta c0 (lokasi komponen dengan
indeks 0).
Didalam bahasa C nilai c0 = b,
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Rumus umum FPA
Addr(S[i1][i2]…[id]) = c0 + c1 x i1 + … + cd x id
dengan:
cd = L
ct-1 = (ut – lt +1) x ct
= (ut + 1) x ct
1 < t <= d
c0 = b
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Rumus perhitungan besarnya memori
yang digunakan oleh array:
M = L x (u1 +1) x (u2 +1) x… x (ud +1)
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Contoh perhitungan FPA
1. Array 1-dimensi
Diketahui deklarasi array:
float Q[6];
maka:
L = 4; karena tipe data = float.
u1 = 5;
b = 500; dimisalkan komponen awal
dimulai dari alamat 500.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Perhitungan:
c1 = L = 4
c0 = b = 500
Addr(Q[i]) = c0 + c1 x i1
Addr(Q[3])= c0 + c1 x i1 = 500 + 4 x 3 = 512
Addr(Q[5])= c0 + c1 x i1 = 500 + 4 x 5 = 520
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Mapping Table Array Q
Indeks Address
0 500
1 504
2 508
3 512
4 516
5 520
Besarnya memori yang dibutuhkan oleh array Q
M = L x (u1 + 1) = 4 x (5 + 1) = 24 byte.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
2. Array 2-Dimensi
Diketahui deklarasi array:
int P[4][5];
maka:
L = 2; karena tipe data = integer.
u1 = 3; u2 = 4;
b = 300; dimisalkan komponen awal
dimulai dari alamat 300.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Perhitungan:
c2 = L = 2
c1 = (u2 + 1) x c2 = (4 + 1) x 2 = 10
c0 = b = 300
Addr(P[i][j]) = c0 + c1 x i + c2 x j
= 300 + 10 x i + 2 x j
Besarnya memori yang dibutuhkan
oleh array P:
M = L x (u1 + 1) x (u2 + 1)
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Latihan
1. Bila dideklarasikan:
int A[4][6];
Dimisalkan b = 100,
cari alamat dari:
A[0][0], A[2][3] dan A[3][5]
kemudian hitung besarnya memori
yang diperlukan oleh array A.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Fungsi Pemetaan ArrayFungsi Pemetaan Array
Latihan (lanjutan)
2. Bila dideklarasikan:
int B[4][6][5];
Dimisalkan b = 200,
cari alamat dari
B[0][0][0], B[2][3][2], B[1][5][4]
kemudian hitung besarnya memori
yang diperlukan oleh array B.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StructureStructure
1.1. Heterogen, setiap field didalam structHeterogen, setiap field didalam struct
boleh mempunyai tipe data yang berbeda.boleh mempunyai tipe data yang berbeda.
2.2. Random access, setiap elemen didalamRandom access, setiap elemen didalam
struct – apakah field pertama atau fieldstruct – apakah field pertama atau field
terakhir - dapat dicapai dalam waktu yangterakhir - dapat dicapai dalam waktu yang
samasama..
 Sifat-sifat structure (struct)
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StructureStructure
structstruct TDataTData {{
charchar NamaNama[[2121];];
intint NIMNIM;;
floatfloat IPKIPK;;
intint NilaiNilai;};;};
structstruct TData DataTData Data; //; // DataData == Variabel structureVariabel structure
 Deklarasi structure (struct)
Tipe data structure
Fields
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StructureStructure
Mengisi variable pada field structMengisi variable pada field struct
gets(gets(Data.NamaData.Nama););
gets(gets(StrNIMStrNIM);); Data.NIMData.NIM = atoi(= atoi(StrNIMStrNIM););
gets(gets(StrIPKStrIPK);); Data.IPKData.IPK = atof(= atof(StrIPKStrIPK););
gets(gets(StrNilaiStrNilai);); Data.NilaiData.Nilai = atoi(= atoi(StrNilaiStrNilai););
 Akses ke field struct
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StructureStructure
Mencetak variable pada field structMencetak variable pada field struct
printf(“%printf(“%2020s %s %66d %d %5.25.2f %f %33d”,d”,
Data.NamaData.Nama,,
Data.NIMData.NIM,,
Data.IPKData.IPK,,
Data.NilaiData.Nilai););
 Akses ke field struct
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Array of StructureArray of Structure
structstruct TDataTData {{
charchar NamaNama[[2121];];
intint NIMNIM;;
floatfloat IPKIPK;;
intint NilaiNilai; };; };
structstruct TData DataTData Data[[7070];];
 Deklarasi array of struct
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Struktur linked-list
Data Next Data Next Data Next Data Next
Head Current Tail
NULL
Node Link
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Sifat-sifat linked-list
1.1. Jumlah node dapatJumlah node dapat bertambahbertambah atauatau
berkurangberkurang secara dinamis sesuaisecara dinamis sesuai
kebutuhan.kebutuhan.
2.2. Sequential access, node didalam linked-listSequential access, node didalam linked-list
harus dicapai dari node awal yang ditunjukharus dicapai dari node awal yang ditunjuk
oleh Head, kemudian bergerak melaluioleh Head, kemudian bergerak melalui
setiap node kearah node akhir yang ditunjuksetiap node kearah node akhir yang ditunjuk
oleh Tail. Setiap node dicapai melaluioleh Tail. Setiap node dicapai melalui
Current.Current.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Deklarasi linked-list
structstruct TDataTData {{
charchar NamaNama[[2121];];
intint NIMNIM;;
floatfloat IPKIPK;;
intint NilaiNilai; };; };
structstruct TNodeTNode {{
structstruct TData DataTData Data;;
structstruct TNodeTNode **NextNext;; };};
structstruct TNodeTNode **Head,Head, **Tail,Tail, **CurrentCurrent;;
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Deklarasi variabel pointer
H C T
structstruct TNodeTNode **HHead,ead, **TTail,ail, **CCurrenturrent;;
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Inisialisasi linked-list
void Create( )
{
Head = Current = Tail = NULL;
}
H C T
NULL NULL NULL
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Membangun linked-list (lanjutan)
void Input_Data(struct TData *Data)
{
printf(“Nama : “); gets(Data->Nama);
printf(“NIM : “); gets(StrNIM); Data->NIM = atoi(StrNIM);
printf(“IPK : “); gets(StrIPK); Data->IPK = atof(StrIPK);
printf(“Nilai : “); gets(StrNilai); Data->Nilai = atoi(StrNilai);
}
Ali; 5578; 3.1; 83
Data
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Membangun linked-list (lanjutan)
void Insert_Data(struct TData Data)
{
struct TNode *P;
P = (struct TNode *) malloc(sizeof(struct TNode));
P->Data = Data;
P->Next = Head;
Head = Current = P;
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
struct TNode *P;
P = (struct TNode *) malloc(sizeof(struct TNode);
P Data Next
NODE
400
400
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
P->Data = Data;
Data Next
NODE
P
400
400 Ali; 5578; 3.1; 83
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
P->Next = Head;
Data Next
NODE
P
400
400 Ali; 5578; 3.1; 83 NULL
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
Head = Current = P;
Data Next
NODE
P 400
400 Ali; 5578; 3.1; 83 NULL
H 400 C 400
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Selesai, kembali ke main().
 Variable lokal P, habis masanya
Data Next
NODE
400 Ali; 5578; 3.1; 83 NULL
H 400 C 400
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
struct TNode *P;
P = (struct TNode *) malloc(sizeof(struct TNode);
P 431
431
Data Next400
Ali; 5578; 3.1; 83 NULL
H 400 C 400
Data Next
 Memanggil kembali Insert_Data(Data);
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
P->Data = Data;
Data NextP 431
431
Data Next400
Ali; 5578; 3.1; 83 NULL
H 400 C 400
 Memanggil kembali Insert_Data(Data);
Bella ; 5586; 2.8; 91
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
P->Next = Head;
Data NextP 431
431
Data Next400
Ali; 5578; 3.1; 83 NULL
H 400 C 400
 Memanggil kembali Insert_Data(Data);
Bella ; 5586; 2.8; 91 400
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
Head = Current = P;
Data NextP 431
431
Data Next400
Ali; 5578; 3.1; 83 NULL
H 431 C 431
 Memanggil kembali Insert_Data(Data);
Bella ; 5586; 2.8; 91 400
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
Data Next431 Data Next400
Ali; 5578; 3.1; 83 NULL
H 431 C 431
Bella ; 5586; 2.8; 91 400
• Selesai, kembali ke main().
• Variabe lokal P, habis masanya
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
Ali; 5578; 3.1; 83 NULL
H C
Bella ; 5586; 2.8; 91
• Sekarang linked-list telah berisi 2 node
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Mencetak data
void List_Data( )
{
if (Head == NULL) {printf("nList Kosong.n"); return;}
Current = Head;
printf("nLIST DATA: n");
do {
printf("%20s ",Current->Data.Nama);
printf("%6d ",Current->Data.NIM);
printf("%5.2f ",Current->Data.IPK);
printf("%3d n",Current->Data.Nilai);
Current = Current->Next;
} while (Current != NULL);
printf("n");
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Program utama
void main()
{
char ch; struct TData Data;
clrscr();
while (ch != 's') {
printf("nTekan [i]nsert [d]aftar [s]elesai : ");
ch = getche(); printf(“n”);
switch (ch) {
case 'i': { Input_Data(Data); Insert_Data(Data);}; break;
case 'd': List_Data(); break;
case 's': break; }
}
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Membangun linked-list dari depan
Insert Belakang
void Insert_Data(struct TData Data)
{
struct TNode *P;
P = (struct TNode *) malloc(sizeof(struct TNode));
P->Data = Data;
P->Next = NULL;
if (Head==NULL) Head=Current=Tail=P;
else {Tail->Next = P; Tail = P;};
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Menghapus linked-list
void Clear_List( )
{
if (Head != NULL)
{
Current = Head;
while (Head != NULL) {
Head = Head->Next;
free(Current);
Current = Head; }
}
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Linked-listLinked-list
 Soal-soal
1. Gambarkan langkah-langkah membangun linked-list
dari depan (Insert_Belakang).
2. Gambarkan langkah-langkah menghapus linked-list.
3. Buat modul progrm untuk menghapus node yang
sedang ditunjuk oleh Current pointer.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Double Linked-listDouble Linked-list
NULL
H C
Bella
5586
2.8
91
Ali
5578
3.1
83
Cony
5554
3.0
76
Don
5589
3.7
93
Elly
5517
2.6
63
T
NULL
Data
Next
Prev
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Circular Double Linked-listCircular Double Linked-list
H C
Bella
5586
91
2.8
Ali
5578
83
3.1
Cony
5554
76
3.0
Don
5589
93
3.7
Elly
5517
63
2.6
Data
Next
Prev
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Circular Double Linked-listCircular Double Linked-list
Double linked list dapat dibangun
dengan 2 cara:
•Insert Before, node baru berada
sebelum posisi current pointer.
•Insert After, node baru berada
setelah posisi current pointer.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ImplementasiImplementasi
struct TNode {
struct TData Data;
struct TNode *Next;
struct TNode *Prev;
};
struct TNode *Head, *Current;
int n; /* jumlah node */
void Create()
{
Head = Current = NULL; n = 0;
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ImplementasiImplementasi
void Insert_After(struct TData Data)
{
struct TNode *P; /* temporary node */
P=(struct TNode*)malloc(sizeof(struct TNode));
P->Data = Data;
if (Head == NULL)
{Head = p;
P->Next = P;
P->Nrev = P;}
else
{Current->Next->Prev = P;
P->Next = Current->Next;
P->Nrev = Current;
Current->Next = P;}
Current = P;
n++;
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ImplementasiImplementasi
void Insert_Before(struct TData Data)
{
if (Head == NULL) Current = Current->Prev;
Insert_After(Data);
if (Current->Next == Head) Head = Current;
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ImplementasiImplementasi
void Delete()
{
struct TNode *P; /* temporary node */
P = Current;
Current->Prev->Next = Current->Next;
Current->Next->Prev = Current->Prev;
Current = Current->Next;
if (n == 1) Head = NULL; else
if (Head = P) Head = Current;
n--;
free(P);
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
ImplementasiImplementasi
void Find_Next()
{
Current = Current->Next;
}
void Find_Prior()
{
Current = Current->Prev;
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Contoh penggunaan linked list ganda
pada text editor
prev nextText, baris 1
NULL
head
prev nextText, baris 2
prev nextText, baris 3
prev nextText, baris 4
prev nextText, baris n
NULL
curr
tail

More Related Content

What's hot (20)

Materi : Struktur Data (2 Array)
Materi : Struktur Data (2 Array)Materi : Struktur Data (2 Array)
Materi : Struktur Data (2 Array)
 
6. Stack (Struktur Data)
6. Stack (Struktur Data)6. Stack (Struktur Data)
6. Stack (Struktur Data)
 
5. Doubly Linked List (Struktur Data)
5. Doubly Linked List (Struktur Data)5. Doubly Linked List (Struktur Data)
5. Doubly Linked List (Struktur Data)
 
Jawaban Struktur data soal-latihan
Jawaban Struktur data soal-latihanJawaban Struktur data soal-latihan
Jawaban Struktur data soal-latihan
 
Kardinalitas dan Operasi Dua Himpunan
Kardinalitas dan Operasi Dua HimpunanKardinalitas dan Operasi Dua Himpunan
Kardinalitas dan Operasi Dua Himpunan
 
Tugas si kelompok 5
Tugas si kelompok 5Tugas si kelompok 5
Tugas si kelompok 5
 
Modul 4 matrik dan determinan
Modul 4 matrik dan determinanModul 4 matrik dan determinan
Modul 4 matrik dan determinan
 
Laporan praktikum modul vii
Laporan praktikum modul viiLaporan praktikum modul vii
Laporan praktikum modul vii
 
Queue
Queue Queue
Queue
 
Data Preprocessing
Data PreprocessingData Preprocessing
Data Preprocessing
 
Konsep dasar oop
Konsep dasar oopKonsep dasar oop
Konsep dasar oop
 
Sistem bilangan
Sistem bilanganSistem bilangan
Sistem bilangan
 
Algoritma dan Struktur Data - adt
Algoritma dan Struktur Data - adtAlgoritma dan Struktur Data - adt
Algoritma dan Struktur Data - adt
 
Implementasi queue
Implementasi queueImplementasi queue
Implementasi queue
 
Latihan soal struktur data
Latihan soal struktur dataLatihan soal struktur data
Latihan soal struktur data
 
Pertemuan 10
Pertemuan 10Pertemuan 10
Pertemuan 10
 
7. Queue (Struktur Data)
7. Queue (Struktur Data)7. Queue (Struktur Data)
7. Queue (Struktur Data)
 
Materi Struktur Data Tree
Materi Struktur Data TreeMateri Struktur Data Tree
Materi Struktur Data Tree
 
Matematika Ekonomi : Himpunan
Matematika Ekonomi : HimpunanMatematika Ekonomi : Himpunan
Matematika Ekonomi : Himpunan
 
Sistem Basis Data(PPT)
Sistem Basis Data(PPT)Sistem Basis Data(PPT)
Sistem Basis Data(PPT)
 

Viewers also liked

90963869 latihan-soal-struktur-data-semester2
90963869 latihan-soal-struktur-data-semester290963869 latihan-soal-struktur-data-semester2
90963869 latihan-soal-struktur-data-semester2Saybia Himma
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_listWandi Parlente
 
Program queue dengan single linked list
Program queue dengan single linked listProgram queue dengan single linked list
Program queue dengan single linked listRhe Dwi Yuni
 
Soal organisasi komputer
Soal organisasi komputerSoal organisasi komputer
Soal organisasi komputerlembayungtirta
 
Algoritma dan Struktur Data
Algoritma dan Struktur DataAlgoritma dan Struktur Data
Algoritma dan Struktur DataAs Faizin
 
Linked List dalam Struktur Data
Linked List dalam Struktur DataLinked List dalam Struktur Data
Linked List dalam Struktur DataFajar Sany
 
Sd pertemuan 5 & 6
Sd   pertemuan 5 & 6Sd   pertemuan 5 & 6
Sd pertemuan 5 & 6biedoen
 
Sd pertemuan 3 & 4 (edited)
Sd   pertemuan 3 & 4 (edited)Sd   pertemuan 3 & 4 (edited)
Sd pertemuan 3 & 4 (edited)biedoen
 
Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasKuliahKita
 
Class dan object
Class dan objectClass dan object
Class dan objectHardini_HD
 
Struktur data pertemuan 1 & 2
Struktur data   pertemuan 1 & 2Struktur data   pertemuan 1 & 2
Struktur data pertemuan 1 & 2biedoen
 
Algoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan DestruktorAlgoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan DestruktorKuliahKita
 
02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseoJinTaek Seo
 

Viewers also liked (20)

90963869 latihan-soal-struktur-data-semester2
90963869 latihan-soal-struktur-data-semester290963869 latihan-soal-struktur-data-semester2
90963869 latihan-soal-struktur-data-semester2
 
Modul algoritma dan struktur data i
Modul algoritma dan struktur data iModul algoritma dan struktur data i
Modul algoritma dan struktur data i
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_list
 
Pertemuan 4 revisijan2013-mhs
Pertemuan 4 revisijan2013-mhsPertemuan 4 revisijan2013-mhs
Pertemuan 4 revisijan2013-mhs
 
Double linked list
Double linked listDouble linked list
Double linked list
 
Program queue dengan single linked list
Program queue dengan single linked listProgram queue dengan single linked list
Program queue dengan single linked list
 
Contoh soal uts struktur data
Contoh soal uts struktur dataContoh soal uts struktur data
Contoh soal uts struktur data
 
Soal organisasi komputer
Soal organisasi komputerSoal organisasi komputer
Soal organisasi komputer
 
Linked list
Linked listLinked list
Linked list
 
Struktur data
Struktur dataStruktur data
Struktur data
 
Algoritma dan Struktur Data
Algoritma dan Struktur DataAlgoritma dan Struktur Data
Algoritma dan Struktur Data
 
Linked List dalam Struktur Data
Linked List dalam Struktur DataLinked List dalam Struktur Data
Linked List dalam Struktur Data
 
Sd pertemuan 5 & 6
Sd   pertemuan 5 & 6Sd   pertemuan 5 & 6
Sd pertemuan 5 & 6
 
Sd pertemuan 3 & 4 (edited)
Sd   pertemuan 3 & 4 (edited)Sd   pertemuan 3 & 4 (edited)
Sd pertemuan 3 & 4 (edited)
 
Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi Berkas
 
Class dan object
Class dan objectClass dan object
Class dan object
 
Struktur data pertemuan 1 & 2
Struktur data   pertemuan 1 & 2Struktur data   pertemuan 1 & 2
Struktur data pertemuan 1 & 2
 
Linked List
Linked ListLinked List
Linked List
 
Algoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan DestruktorAlgoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan Destruktor
 
02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo
 

Similar to Struktur data 01 (pointer dan linked list

Struktur data 03 (stack)
Struktur data 03 (stack)Struktur data 03 (stack)
Struktur data 03 (stack)Sunarya Marwah
 
Aray dan recrd
Aray dan recrdAray dan recrd
Aray dan recrd555560
 
9366bcd2f7b5195a70c971b4cb5c2fe5bcfc571b
9366bcd2f7b5195a70c971b4cb5c2fe5bcfc571b9366bcd2f7b5195a70c971b4cb5c2fe5bcfc571b
9366bcd2f7b5195a70c971b4cb5c2fe5bcfc571bRicky El-ikhsan
 
Pelatihan Bahasa R
Pelatihan Bahasa RPelatihan Bahasa R
Pelatihan Bahasa Ranom0164
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPrasetyo Adi
 
Struktur data 02 (tipe data abstrak dan queue)
Struktur data 02 (tipe data abstrak dan queue)Struktur data 02 (tipe data abstrak dan queue)
Struktur data 02 (tipe data abstrak dan queue)Sunarya Marwah
 
Array Dimensi banyak struktur data pertemuan ke 3
Array Dimensi banyak struktur data pertemuan ke 3Array Dimensi banyak struktur data pertemuan ke 3
Array Dimensi banyak struktur data pertemuan ke 3said zulhelmi
 
Pertemuan vi
Pertemuan viPertemuan vi
Pertemuan viwindi1
 
Laporan praktikum modul v
Laporan praktikum modul vLaporan praktikum modul v
Laporan praktikum modul vDevi Apriansyah
 
Bab ii keg pembel 6 array
Bab ii keg pembel 6  arrayBab ii keg pembel 6  array
Bab ii keg pembel 6 array087dwi
 
75ery6e5y03 praktikum iii_array_statis_dan_dinamis
75ery6e5y03 praktikum iii_array_statis_dan_dinamis75ery6e5y03 praktikum iii_array_statis_dan_dinamis
75ery6e5y03 praktikum iii_array_statis_dan_dinamisbrada_abil
 
Array C++ MG3.pptx
Array C++ MG3.pptxArray C++ MG3.pptx
Array C++ MG3.pptxKemangKres
 

Similar to Struktur data 01 (pointer dan linked list (20)

Struktur data 03 (stack)
Struktur data 03 (stack)Struktur data 03 (stack)
Struktur data 03 (stack)
 
Laporan praktikum jawaban 10 algoritma(1)
Laporan praktikum jawaban 10 algoritma(1)Laporan praktikum jawaban 10 algoritma(1)
Laporan praktikum jawaban 10 algoritma(1)
 
Aray dan recrd
Aray dan recrdAray dan recrd
Aray dan recrd
 
9366bcd2f7b5195a70c971b4cb5c2fe5bcfc571b
9366bcd2f7b5195a70c971b4cb5c2fe5bcfc571b9366bcd2f7b5195a70c971b4cb5c2fe5bcfc571b
9366bcd2f7b5195a70c971b4cb5c2fe5bcfc571b
 
Pelatihan Bahasa R
Pelatihan Bahasa RPelatihan Bahasa R
Pelatihan Bahasa R
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
 
Struktur data 02 (tipe data abstrak dan queue)
Struktur data 02 (tipe data abstrak dan queue)Struktur data 02 (tipe data abstrak dan queue)
Struktur data 02 (tipe data abstrak dan queue)
 
Array dan Contoh
Array dan ContohArray dan Contoh
Array dan Contoh
 
GoLang_4
GoLang_4GoLang_4
GoLang_4
 
Array Dimensi banyak struktur data pertemuan ke 3
Array Dimensi banyak struktur data pertemuan ke 3Array Dimensi banyak struktur data pertemuan ke 3
Array Dimensi banyak struktur data pertemuan ke 3
 
207 p09
207 p09207 p09
207 p09
 
Pertemuan IV Teori
Pertemuan IV TeoriPertemuan IV Teori
Pertemuan IV Teori
 
Pertemuan vi
Pertemuan viPertemuan vi
Pertemuan vi
 
Algoritma Array
Algoritma ArrayAlgoritma Array
Algoritma Array
 
Laporan praktikum modul v
Laporan praktikum modul vLaporan praktikum modul v
Laporan praktikum modul v
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
Bab ii keg pembel 6 array
Bab ii keg pembel 6  arrayBab ii keg pembel 6  array
Bab ii keg pembel 6 array
 
75ery6e5y03 praktikum iii_array_statis_dan_dinamis
75ery6e5y03 praktikum iii_array_statis_dan_dinamis75ery6e5y03 praktikum iii_array_statis_dan_dinamis
75ery6e5y03 praktikum iii_array_statis_dan_dinamis
 
Array
ArrayArray
Array
 
Array C++ MG3.pptx
Array C++ MG3.pptxArray C++ MG3.pptx
Array C++ MG3.pptx
 

More from Sunarya Marwah

Struktur data 10 (min max heap)
Struktur data 10 (min max heap)Struktur data 10 (min max heap)
Struktur data 10 (min max heap)Sunarya Marwah
 
Struktur data 09 (double ended heap)
Struktur data 09 (double ended heap)Struktur data 09 (double ended heap)
Struktur data 09 (double ended heap)Sunarya Marwah
 
Struktur data 08 (heap)
Struktur data 08 (heap)Struktur data 08 (heap)
Struktur data 08 (heap)Sunarya Marwah
 
Struktur data 07 (b tree)
Struktur data 07 (b tree)Struktur data 07 (b tree)
Struktur data 07 (b tree)Sunarya Marwah
 
Struktur data 06 (red black tree)
Struktur data 06 (red black tree)Struktur data 06 (red black tree)
Struktur data 06 (red black tree)Sunarya Marwah
 
Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)Sunarya Marwah
 
Struktur data 04 (binary tree)
Struktur data 04 (binary tree)Struktur data 04 (binary tree)
Struktur data 04 (binary tree)Sunarya Marwah
 

More from Sunarya Marwah (8)

Struktur data 10 (min max heap)
Struktur data 10 (min max heap)Struktur data 10 (min max heap)
Struktur data 10 (min max heap)
 
Struktur data 09 (double ended heap)
Struktur data 09 (double ended heap)Struktur data 09 (double ended heap)
Struktur data 09 (double ended heap)
 
Struktur data 08 (heap)
Struktur data 08 (heap)Struktur data 08 (heap)
Struktur data 08 (heap)
 
Struktur data 07 (b tree)
Struktur data 07 (b tree)Struktur data 07 (b tree)
Struktur data 07 (b tree)
 
Struktur data 06 (red black tree)
Struktur data 06 (red black tree)Struktur data 06 (red black tree)
Struktur data 06 (red black tree)
 
Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)
 
Struktur data 04 (binary tree)
Struktur data 04 (binary tree)Struktur data 04 (binary tree)
Struktur data 04 (binary tree)
 
Struktur dataquadtree
Struktur dataquadtreeStruktur dataquadtree
Struktur dataquadtree
 

Struktur data 01 (pointer dan linked list

  • 1. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah BAGIAN IBAGIAN I
  • 2. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StrukturStruktur DataData Metode untuk mengorganisasikan data diMetode untuk mengorganisasikan data di memori komputer, sehingga data dapat diolahmemori komputer, sehingga data dapat diolah secara efisien, yaitu menggunakan:secara efisien, yaitu menggunakan:  Tempat (Tempat (memorimemori) yang) yang hemathemat..  Waktu (Waktu (akses dataakses data) yang) yang cepatcepat..  Algoritma yang singkat dan jelas.Algoritma yang singkat dan jelas.
  • 3. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StrukturStruktur DataData Dikutip dari Binusmaya
  • 4. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StrukturStruktur DataData Dikutip dari Binusmaya
  • 5. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Pre TestPre Test Buat suatu program yang dapat memeriksa apakah pasangan simbol kurung {} [] dan (), sudah benar. Contoh: 1. {[()][()]} ; benar 2. [{()]} ; salah 3. [{()()}] ; benar 4. {[())()]} ; salah
  • 6. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Tinjau Ulang (Tinjau Ulang (Review)Review) Tipe Data TerstrukturTipe Data Terstruktur  ArrayArray  StructureStructure  Array of StructureArray of Structure  Linked-listLinked-list
  • 7. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Kenapa harus array ?Kenapa harus array ? Perhatikan persoalan berikut ini:Perhatikan persoalan berikut ini: Menghitung nilai rerata dari 5 bilanganMenghitung nilai rerata dari 5 bilangan dengan menggunakan 6 variabel yaitu:dengan menggunakan 6 variabel yaitu: X1, X2, X3, X4, X5 dan Rerata.X1, X2, X3, X4, X5 dan Rerata.
  • 8. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray void main()void main() {{ floatfloat X1,X2,X3,X4,X5;X1,X2,X3,X4,X5; floatfloat Rerata;Rerata; printfprintf(“Bilangan 1 : “);(“Bilangan 1 : “); scanfscanf(“%f”, &X1);(“%f”, &X1); printfprintf(“Bilangan 2 : “);(“Bilangan 2 : “); scanfscanf(“%f”, &X2);(“%f”, &X2); printfprintf(“Bilangan 3 : “);(“Bilangan 3 : “); scanfscanf(“%f”, &X3);(“%f”, &X3); printfprintf(“Bilangan 4 : “);(“Bilangan 4 : “); scanfscanf(“%f”, &X4);(“%f”, &X4); printfprintf(“Bilangan 5 : “);(“Bilangan 5 : “); scanfscanf(“%f”, &X5);(“%f”, &X5); Rerata = (X1+X2+X3+X4+X5)/5;Rerata = (X1+X2+X3+X4+X5)/5; printfprintf(“ Nilai Rerata = %.2f “, Rerata);(“ Nilai Rerata = %.2f “, Rerata); getch();getch(); }}
  • 9. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Perhatian ! Warning ! Achtung !Perhatian ! Warning ! Achtung ! Apa yang harus dilakukan, bila banyaknyaApa yang harus dilakukan, bila banyaknya bilangan yang akan diprosesbilangan yang akan diproses mencapai 100.mencapai 100. Apakah akan digunakan:Apakah akan digunakan: X1, X2, X3, … , X98, X99, X100X1, X2, X3, … , X98, X99, X100 ??????
  • 10. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray void main()void main() {{ floatfloat X1,X2,X3,X4,X5;X1,X2,X3,X4,X5; floatfloat Rerata;Rerata; printfprintf(“Bilangan 1 : “);(“Bilangan 1 : “); scanfscanf(“%f”, &X1);(“%f”, &X1); printfprintf(“Bilangan 2 : “);(“Bilangan 2 : “); scanfscanf(“%f”, &X2);(“%f”, &X2); printfprintf(“Bilangan 3 : “);(“Bilangan 3 : “); scanfscanf(“%f”, &X3);(“%f”, &X3); printfprintf(“Bilangan 4 : “);(“Bilangan 4 : “); scanfscanf(“%f”, &X4);(“%f”, &X4); printfprintf(“Bilangan 5 : “);(“Bilangan 5 : “); scanfscanf(“%f”, &X5);(“%f”, &X5); Rerata = (X1+X2+X3+X4+X5)/5;Rerata = (X1+X2+X3+X4+X5)/5; printfprintf(“ Nilai Rerata = %.2f “, Rerata);(“ Nilai Rerata = %.2f “, Rerata); getch();getch(); }} Dengan menggunakan array, program ini Akan menjadi …………..
  • 11. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray void main()void main() {{ floatfloat XX[[55];]; floatfloat JJ,, RerataRerata;; intint II;; JJ == 00;; forfor ((II==0; I0; I<<5; I5; I++)++) {{ printfprintf(“Bilangan(“Bilangan %d%d : I: I++1“);1“); scanf(“%f”,scanf(“%f”, &&XX[[II]);]); JJ == JJ ++ XX[[II];]; }} RerataRerata == J/5;J/5; printfprintf(“ Nilai Rerata =(“ Nilai Rerata = %.%.22f “,f “, Rerata);Rerata); getch();getch(); }} Menjadi lebih sederhana dan mudah disesuaikan.
  • 12. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray floatfloat AA[[55];];  Deklarasi variabel array Banyaknya ElemenBanyaknya Elemen Indeks Array Nama Array Tipe Data
  • 13. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray 1.1. Homogen, seluruh elemen didalam arrayHomogen, seluruh elemen didalam array mempunyai tipe data yang sama.mempunyai tipe data yang sama. 2.2. Random access, setiap elemen didalamRandom access, setiap elemen didalam array – apakah elemen pertama atauarray – apakah elemen pertama atau elemen terakhir - dapat dicapai dalamelemen terakhir - dapat dicapai dalam waktu yang samawaktu yang sama..  Sifat-sifat array
  • 14. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray intint XX[[1010];]; Perhatikan,Perhatikan, indeks array selalu dimulai dari 0indeks array selalu dimulai dari 0  Contoh deklarasi array X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] X[9]
  • 15. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray 1.1. MenggunakanMenggunakan indeksindeks, misal elemen ketiga akan diisi, misal elemen ketiga akan diisi dengan nilai 15, maka tulis: X[2]=15;dengan nilai 15, maka tulis: X[2]=15; 2.2. MenggunakanMenggunakan pointerpointer, tulis *(X+2) = 15;, tulis *(X+2) = 15; Perhatikan,Perhatikan, X merupakan alamat dari X[0], oleh karena ituX merupakan alamat dari X[0], oleh karena itu *X == *(X+0) == X[0].*X == *(X+0) == X[0].  Mencapai (akses) elemen arrayMencapai (akses) elemen array 1515 X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] X[9]
  • 16. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Perhatian ! Warning ! Achtung !Perhatian ! Warning ! Achtung ! Hati-hati dalam menulis elemen elemen array denganHati-hati dalam menulis elemen elemen array dengan pointer:pointer: *X + 2 dan *(X + 2)*X + 2 dan *(X + 2) X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] X[9] 120 X 120
  • 17. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray intint XX[ ] = {[ ] = {1010,,1111,,1212,,1313,,1414,,1515,,1616,,1717,,1818,,1919};}; Perhatikan,Perhatikan, jumlah elemen dapat dikosongkanjumlah elemen dapat dikosongkan  Contoh deklarasi array dan isi awal 1010 1111 1212 1313 1414 1515 1616 1717 1818 1919 X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8] X[9]
  • 18. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray voidvoid Input_DataInput_Data(int(int XX[], int[], int NN)) {{ intint II;; for (for (II==00;; II<<NN;; II++) {++) { printf(“printf(“Data keData ke %d ”,%d ”, II++11); scanf(“%d”, &); scanf(“%d”, &XX[[II]); }]); } }} void main()void main() {{ intint XX[[1010];]; clrscr();clrscr(); Input_DataInput_Data((XX,,1010); getch();); getch(); }}  Passing parameter untuk array
  • 19. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray Buat program yang dapatBuat program yang dapat  Mengisi array int A[20] dengan bilangan acak dari 40 s/d 60Mengisi array int A[20] dengan bilangan acak dari 40 s/d 60  Mencari nilai rerataMencari nilai rerata  Mencari nilai maksimumMencari nilai maksimum  Mencari nilai minimumMencari nilai minimum  Mencari nilai deviasi standarMencari nilai deviasi standar  Latihan
  • 20. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Bila suatu array dideklarasi dengan tipe dataBila suatu array dideklarasi dengan tipe data charchar,, maka variabel array tersebut akan menjadi variabelmaka variabel array tersebut akan menjadi variabel string.string.  Deklarasi string:Deklarasi string: charchar NamaNama[[3030];]; charchar NamaNama[ ] = {‘[ ] = {‘PP’,’’,’ii’,’’,’nn’,’’,’kk’,’’,’yy’,’0’};//’,’0’};// 6 elemen6 elemen charchar NamaNama[ ] = “[ ] = “PinkyPinky”;”; //// 6 elemen6 elemen charchar NamaNama[[99] = “] = “PinkyPinky”;”; //// 9 elemen9 elemen  String
  • 21. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray #define#define Baris 20Baris 20 #define#define Kolom 4Kolom 4 intint MM[[BarisBaris][][KolomKolom];]; intint KK[[33][][44] = { {] = { { 33,, 66,, 88,, 99 },}, {{ 44,, 11,, 77,, 33 },}, {{ 55,, 22,, 66,, 88 } };} };  Array dua dimensi (2-D); Matriks
  • 22. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray voidvoid Input_DataInput_Data(int(int XX[][4], int[][4], int NN)) {{ intint II;; for (for (II==00;; II<<NN;; II++)++) for (for (JJ==00;; JJ<<44;; JJ++) {++) { printf(“printf(“SelSel %d%d,,%d%d :: ”,”, II++1,J1,J++11); scanf(“%d”, &); scanf(“%d”, &XX[[II][][JJ]); }]); } }} void main()void main() {{ intint KK[[33][][44];]; clrscr();clrscr(); Input_DataInput_Data((KK,,33); getch();); getch(); }}  Passing parameter untuk array 2-D
  • 23. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray #define#define Max 5Max 5 #define#define LenStr 20LenStr 20 charchar NamaNama[[MaxMax][][LenStrLenStr];]; charchar NN[[33][][1010] = { “] = { “AminudinAminudin”,”, ““BonaBona”,”, ””CindyCindy” };” };  Array dua dimensi (2-D); String list
  • 24. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray ‘‘B’B’ ‘‘o’o’ ‘‘n’n’ ‘‘a’a’ ‘‘0’0’  Array dua dimensi (2-D); String list ‘‘A’A’ ‘‘m’m’ ‘‘i’i’ ‘‘n’n’ ‘‘u’u’ ‘‘d’d’ ‘‘i’i’ ‘‘n’n’ ‘‘0’0’ ‘C’ ‘i’ ‘n’ ‘d’ ‘y’ ‘0’ [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [0] [1] [2]
  • 25. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Passing parameter string list voidvoid Input_DataInput_Data(char(char XX[][10], int[][10], int NN)) {{ intint II;; for (for (II==00;; II<<NN;; II++) {++) { printf(“printf(“NamaNama %d%d :: ”,”, II++11); gets(); gets(XX[[II]; }]; } }} void main()void main() {{ charchar NN[[33][][1010];]; clrscr();clrscr(); Input_DataInput_Data((NN,,33); getch();); getch(); }}
  • 26. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray char *char *NN[[33] = { “] = { “AminudinAminudin”,”, ““BonaBona”,”, ““CindyCindy” };” };  Array of pointer (1-D); String list
  • 27. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray ‘‘B’B’ ‘‘o’o’ ‘‘n’n’ ‘‘a’a’ ‘‘0’0’  Array of pointer (1-D); String list ‘‘A’A’ ‘‘m’m’ ‘‘i’i’ ‘‘n’n’ ‘‘u’u’ ‘‘d’d’ ‘‘i’i’ ‘‘n’n’ ‘‘0’0’ ‘C’ ‘i’ ‘n’ ‘d’ ‘y’ ‘0’ 100 109 114 100 109 114 N[0] N[1] N[2]
  • 28. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Array of pointer (2-D); String table char *char *NN[[33][][44] = { {“] = { {“AminudinAminudin”, “”, “3456734567”,””,”2.992.99”,””,”8383”},”}, {“{“BonaBona”, “”, “3456834568”,””,”3.133.13”,””,”7979”},”}, {“{“CindyCindy” ,“” ,“3456934569”,””,”2.572.57”,””,”6666”} };”} }; NamaNama NIMNIM IPKIPK NilaiNilai AminudinAminudin 3456734567 2.992.99 8383 BonaBona 3456834568 3.133.13 7979 CindyCindy 3456934569 2.572.57 6666
  • 29. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer 1010 1515 2020 2525 3030 3535 4040 4545 5050 5555 6060 6565 7070 7575 8080 8585 int Tabel[4][4]int Tabel[4][4]
  • 30. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer Tabel[0]Tabel[0] 1010 1515 2020 2525 3030 3535 4040 4545 1010 1515 2020 2525 3030 3535 4040 4545 Tabel[1]Tabel[1] Tabel[2]Tabel[2] Tabel[3]Tabel[3]
  • 31. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer *(Tabel+0)*(Tabel+0) 1010 1515 2020 2525 3030 3535 4040 4545 1010 1515 2020 2525 3030 3535 4040 4545 *(Tabel+1)*(Tabel+1) *(Tabel+2)*(Tabel+2) *(Tabel+3)*(Tabel+3)
  • 32. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer 3030 3535 4040 4545 *(Tabel+1)+3*(Tabel+1)+3 *(Tabel+1)+2*(Tabel+1)+2 *(Tabel+1)+1*(Tabel+1)+1 *(Tabel+1)+0*(Tabel+1)+0 *(*(Tabel+1)+0)*(*(Tabel+1)+0) *(*(Tabel+1)+1)*(*(Tabel+1)+1) *(*(Tabel+1)+2)*(*(Tabel+1)+2) *(*(Tabel+1)+3)*(*(Tabel+1)+3)
  • 33. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ArrayArray  Array of array (2-D);Array of array (2-D); Akses dengan pointerAkses dengan pointer Secara umum dapat ditulisSecara umum dapat ditulis:: Tabel[I][J] = *(*(Tabel+I)+J)Tabel[I][J] = *(*(Tabel+I)+J) Pointer to pointerPointer to pointer
  • 34. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Pencapaian (access) data •Positional Access Pencapaian data berdasarkan indeks. •Associative Access Pencapaian data berdasarkan nilai/isi komponen.
  • 35. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Pencapaian berdasarkan indeks a.Alamat (address) komponen di memori dapat dihitung berdasarkan nilai indeks. b.Array dengan d-dimensi, memerlukan d penjumlahan dan d perkalian. c. Kecepatan perhitungan tidak tergantung kepada banyaknya komponen, tetapi tergantung kepada besarnya dimensi.
  • 36. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Contoh: int A[10000]; /* Banyak komponen = 10000 */ int B[10][10]; /* Banyak komponen = 100 */ int C[2][2][2]; /* Banyak komponen = 8 */
  • 37. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Parameter Array 1. Alamat awal (b) Alamat komponen pertama array di memori. Pada dasarnya alamat ini tidak diketahui oleh pemrogram, sehingga nilai b selalu dimisalkan. 2. Panjang Komponen (L) Ukuran tipe data (dalam byte) yang digunakan, seperti integer: L = 2, char: L = 1 dan float: L = 4.
  • 38. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array 3. Batas bawah (lk) dan Batas atas (uk) Untuk deklarasi array: int X[12]; Maka: l1 = 0 (selalu dimulai dari 0) u1 = 11. 4. Dimensi array (d) float H[6][2][6]; Maka: d = 3; l1=l2=l3=0 dan u1=5; u2=1; u3=5;
  • 39. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Fungsi pemetaan • Row major order Cara penyimpanan data dalam suatu bahasa pemrograman, bahasa C dan Pascal menggunakan row-major order, sedangkan bahasa Fortran menggunakan column-major order. • Virtual Origin / Virtual Base Nilai konstanta c0 (lokasi komponen dengan indeks 0). Didalam bahasa C nilai c0 = b,
  • 40. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Rumus umum FPA Addr(S[i1][i2]…[id]) = c0 + c1 x i1 + … + cd x id dengan: cd = L ct-1 = (ut – lt +1) x ct = (ut + 1) x ct 1 < t <= d c0 = b
  • 41. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Rumus perhitungan besarnya memori yang digunakan oleh array: M = L x (u1 +1) x (u2 +1) x… x (ud +1)
  • 42. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Contoh perhitungan FPA 1. Array 1-dimensi Diketahui deklarasi array: float Q[6]; maka: L = 4; karena tipe data = float. u1 = 5; b = 500; dimisalkan komponen awal dimulai dari alamat 500.
  • 43. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Perhitungan: c1 = L = 4 c0 = b = 500 Addr(Q[i]) = c0 + c1 x i1 Addr(Q[3])= c0 + c1 x i1 = 500 + 4 x 3 = 512 Addr(Q[5])= c0 + c1 x i1 = 500 + 4 x 5 = 520
  • 44. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Mapping Table Array Q Indeks Address 0 500 1 504 2 508 3 512 4 516 5 520 Besarnya memori yang dibutuhkan oleh array Q M = L x (u1 + 1) = 4 x (5 + 1) = 24 byte.
  • 45. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array 2. Array 2-Dimensi Diketahui deklarasi array: int P[4][5]; maka: L = 2; karena tipe data = integer. u1 = 3; u2 = 4; b = 300; dimisalkan komponen awal dimulai dari alamat 300.
  • 46. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Perhitungan: c2 = L = 2 c1 = (u2 + 1) x c2 = (4 + 1) x 2 = 10 c0 = b = 300 Addr(P[i][j]) = c0 + c1 x i + c2 x j = 300 + 10 x i + 2 x j Besarnya memori yang dibutuhkan oleh array P: M = L x (u1 + 1) x (u2 + 1)
  • 47. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Latihan 1. Bila dideklarasikan: int A[4][6]; Dimisalkan b = 100, cari alamat dari: A[0][0], A[2][3] dan A[3][5] kemudian hitung besarnya memori yang diperlukan oleh array A.
  • 48. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Fungsi Pemetaan ArrayFungsi Pemetaan Array Latihan (lanjutan) 2. Bila dideklarasikan: int B[4][6][5]; Dimisalkan b = 200, cari alamat dari B[0][0][0], B[2][3][2], B[1][5][4] kemudian hitung besarnya memori yang diperlukan oleh array B.
  • 49. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StructureStructure 1.1. Heterogen, setiap field didalam structHeterogen, setiap field didalam struct boleh mempunyai tipe data yang berbeda.boleh mempunyai tipe data yang berbeda. 2.2. Random access, setiap elemen didalamRandom access, setiap elemen didalam struct – apakah field pertama atau fieldstruct – apakah field pertama atau field terakhir - dapat dicapai dalam waktu yangterakhir - dapat dicapai dalam waktu yang samasama..  Sifat-sifat structure (struct)
  • 50. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StructureStructure structstruct TDataTData {{ charchar NamaNama[[2121];]; intint NIMNIM;; floatfloat IPKIPK;; intint NilaiNilai;};;}; structstruct TData DataTData Data; //; // DataData == Variabel structureVariabel structure  Deklarasi structure (struct) Tipe data structure Fields
  • 51. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StructureStructure Mengisi variable pada field structMengisi variable pada field struct gets(gets(Data.NamaData.Nama);); gets(gets(StrNIMStrNIM);); Data.NIMData.NIM = atoi(= atoi(StrNIMStrNIM);); gets(gets(StrIPKStrIPK);); Data.IPKData.IPK = atof(= atof(StrIPKStrIPK);); gets(gets(StrNilaiStrNilai);); Data.NilaiData.Nilai = atoi(= atoi(StrNilaiStrNilai););  Akses ke field struct
  • 52. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StructureStructure Mencetak variable pada field structMencetak variable pada field struct printf(“%printf(“%2020s %s %66d %d %5.25.2f %f %33d”,d”, Data.NamaData.Nama,, Data.NIMData.NIM,, Data.IPKData.IPK,, Data.NilaiData.Nilai););  Akses ke field struct
  • 53. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Array of StructureArray of Structure structstruct TDataTData {{ charchar NamaNama[[2121];]; intint NIMNIM;; floatfloat IPKIPK;; intint NilaiNilai; };; }; structstruct TData DataTData Data[[7070];];  Deklarasi array of struct
  • 54. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Struktur linked-list Data Next Data Next Data Next Data Next Head Current Tail NULL Node Link
  • 55. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Sifat-sifat linked-list 1.1. Jumlah node dapatJumlah node dapat bertambahbertambah atauatau berkurangberkurang secara dinamis sesuaisecara dinamis sesuai kebutuhan.kebutuhan. 2.2. Sequential access, node didalam linked-listSequential access, node didalam linked-list harus dicapai dari node awal yang ditunjukharus dicapai dari node awal yang ditunjuk oleh Head, kemudian bergerak melaluioleh Head, kemudian bergerak melalui setiap node kearah node akhir yang ditunjuksetiap node kearah node akhir yang ditunjuk oleh Tail. Setiap node dicapai melaluioleh Tail. Setiap node dicapai melalui Current.Current.
  • 56. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Deklarasi linked-list structstruct TDataTData {{ charchar NamaNama[[2121];]; intint NIMNIM;; floatfloat IPKIPK;; intint NilaiNilai; };; }; structstruct TNodeTNode {{ structstruct TData DataTData Data;; structstruct TNodeTNode **NextNext;; };}; structstruct TNodeTNode **Head,Head, **Tail,Tail, **CurrentCurrent;;
  • 57. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Deklarasi variabel pointer H C T structstruct TNodeTNode **HHead,ead, **TTail,ail, **CCurrenturrent;;
  • 58. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Inisialisasi linked-list void Create( ) { Head = Current = Tail = NULL; } H C T NULL NULL NULL
  • 59. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Membangun linked-list (lanjutan) void Input_Data(struct TData *Data) { printf(“Nama : “); gets(Data->Nama); printf(“NIM : “); gets(StrNIM); Data->NIM = atoi(StrNIM); printf(“IPK : “); gets(StrIPK); Data->IPK = atof(StrIPK); printf(“Nilai : “); gets(StrNilai); Data->Nilai = atoi(StrNilai); } Ali; 5578; 3.1; 83 Data
  • 60. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Membangun linked-list (lanjutan) void Insert_Data(struct TData Data) { struct TNode *P; P = (struct TNode *) malloc(sizeof(struct TNode)); P->Data = Data; P->Next = Head; Head = Current = P; }
  • 61. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list struct TNode *P; P = (struct TNode *) malloc(sizeof(struct TNode); P Data Next NODE 400 400
  • 62. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list P->Data = Data; Data Next NODE P 400 400 Ali; 5578; 3.1; 83
  • 63. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list P->Next = Head; Data Next NODE P 400 400 Ali; 5578; 3.1; 83 NULL
  • 64. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list Head = Current = P; Data Next NODE P 400 400 Ali; 5578; 3.1; 83 NULL H 400 C 400
  • 65. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Selesai, kembali ke main().  Variable lokal P, habis masanya Data Next NODE 400 Ali; 5578; 3.1; 83 NULL H 400 C 400
  • 66. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list struct TNode *P; P = (struct TNode *) malloc(sizeof(struct TNode); P 431 431 Data Next400 Ali; 5578; 3.1; 83 NULL H 400 C 400 Data Next  Memanggil kembali Insert_Data(Data);
  • 67. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list P->Data = Data; Data NextP 431 431 Data Next400 Ali; 5578; 3.1; 83 NULL H 400 C 400  Memanggil kembali Insert_Data(Data); Bella ; 5586; 2.8; 91
  • 68. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list P->Next = Head; Data NextP 431 431 Data Next400 Ali; 5578; 3.1; 83 NULL H 400 C 400  Memanggil kembali Insert_Data(Data); Bella ; 5586; 2.8; 91 400
  • 69. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list Head = Current = P; Data NextP 431 431 Data Next400 Ali; 5578; 3.1; 83 NULL H 431 C 431  Memanggil kembali Insert_Data(Data); Bella ; 5586; 2.8; 91 400
  • 70. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list Data Next431 Data Next400 Ali; 5578; 3.1; 83 NULL H 431 C 431 Bella ; 5586; 2.8; 91 400 • Selesai, kembali ke main(). • Variabe lokal P, habis masanya
  • 71. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list Ali; 5578; 3.1; 83 NULL H C Bella ; 5586; 2.8; 91 • Sekarang linked-list telah berisi 2 node
  • 72. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Mencetak data void List_Data( ) { if (Head == NULL) {printf("nList Kosong.n"); return;} Current = Head; printf("nLIST DATA: n"); do { printf("%20s ",Current->Data.Nama); printf("%6d ",Current->Data.NIM); printf("%5.2f ",Current->Data.IPK); printf("%3d n",Current->Data.Nilai); Current = Current->Next; } while (Current != NULL); printf("n"); }
  • 73. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Program utama void main() { char ch; struct TData Data; clrscr(); while (ch != 's') { printf("nTekan [i]nsert [d]aftar [s]elesai : "); ch = getche(); printf(“n”); switch (ch) { case 'i': { Input_Data(Data); Insert_Data(Data);}; break; case 'd': List_Data(); break; case 's': break; } } }
  • 74. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Membangun linked-list dari depan Insert Belakang void Insert_Data(struct TData Data) { struct TNode *P; P = (struct TNode *) malloc(sizeof(struct TNode)); P->Data = Data; P->Next = NULL; if (Head==NULL) Head=Current=Tail=P; else {Tail->Next = P; Tail = P;}; }
  • 75. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Menghapus linked-list void Clear_List( ) { if (Head != NULL) { Current = Head; while (Head != NULL) { Head = Head->Next; free(Current); Current = Head; } } }
  • 76. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Linked-listLinked-list  Soal-soal 1. Gambarkan langkah-langkah membangun linked-list dari depan (Insert_Belakang). 2. Gambarkan langkah-langkah menghapus linked-list. 3. Buat modul progrm untuk menghapus node yang sedang ditunjuk oleh Current pointer.
  • 77. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Double Linked-listDouble Linked-list NULL H C Bella 5586 2.8 91 Ali 5578 3.1 83 Cony 5554 3.0 76 Don 5589 3.7 93 Elly 5517 2.6 63 T NULL Data Next Prev
  • 78. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Circular Double Linked-listCircular Double Linked-list H C Bella 5586 91 2.8 Ali 5578 83 3.1 Cony 5554 76 3.0 Don 5589 93 3.7 Elly 5517 63 2.6 Data Next Prev
  • 79. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Circular Double Linked-listCircular Double Linked-list Double linked list dapat dibangun dengan 2 cara: •Insert Before, node baru berada sebelum posisi current pointer. •Insert After, node baru berada setelah posisi current pointer.
  • 80. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ImplementasiImplementasi struct TNode { struct TData Data; struct TNode *Next; struct TNode *Prev; }; struct TNode *Head, *Current; int n; /* jumlah node */ void Create() { Head = Current = NULL; n = 0; }
  • 81. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ImplementasiImplementasi void Insert_After(struct TData Data) { struct TNode *P; /* temporary node */ P=(struct TNode*)malloc(sizeof(struct TNode)); P->Data = Data; if (Head == NULL) {Head = p; P->Next = P; P->Nrev = P;} else {Current->Next->Prev = P; P->Next = Current->Next; P->Nrev = Current; Current->Next = P;} Current = P; n++; }
  • 82. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ImplementasiImplementasi void Insert_Before(struct TData Data) { if (Head == NULL) Current = Current->Prev; Insert_After(Data); if (Current->Next == Head) Head = Current; }
  • 83. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ImplementasiImplementasi void Delete() { struct TNode *P; /* temporary node */ P = Current; Current->Prev->Next = Current->Next; Current->Next->Prev = Current->Prev; Current = Current->Next; if (n == 1) Head = NULL; else if (Head = P) Head = Current; n--; free(P); }
  • 84. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah ImplementasiImplementasi void Find_Next() { Current = Current->Next; } void Find_Prior() { Current = Current->Prev; }
  • 85. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Contoh penggunaan linked list ganda pada text editor prev nextText, baris 1 NULL head prev nextText, baris 2 prev nextText, baris 3 prev nextText, baris 4 prev nextText, baris n NULL curr tail