Struktur data 01 (pointer dan linked list

85
Copyright Sunarya D. Copyright Sunarya D. Marwah Marwah BAGIAN I BAGIAN I

Transcript of Struktur data 01 (pointer dan linked list

Page 1: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

BAGIAN IBAGIAN I

Page 2: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StrukturStruktur DataData

Metode untuk mengorganisasikan data di Metode untuk mengorganisasikan data di memori komputer, sehingga data dapat memori komputer, sehingga data dapat diolah secara efisien, yaitu menggunakan:diolah 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.

Page 3: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StrukturStruktur DataData

Dikutip dari Binusmaya

Page 4: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StrukturStruktur DataData

Dikutip dari Binusmaya

Page 5: Struktur data 01 (pointer dan linked list

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

Page 6: Struktur data 01 (pointer dan linked list

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

Page 7: Struktur data 01 (pointer dan linked 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 bilangandengan menggunakan 6 variabel yaitu:dengan menggunakan 6 variabel yaitu:X1, X2, X3, X4, X5 dan Rerata.X1, X2, X3, X4, X5 dan Rerata.

Page 8: Struktur data 01 (pointer dan linked list

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();}}

Page 9: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Perhatian ! Warning ! Achtung Perhatian ! Warning ! Achtung !!

Apa yang harus dilakukan, bila banyaknya Apa 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

??????

Page 10: Struktur data 01 (pointer dan linked list

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 …………..

Page 11: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

void main()void main(){{ floatfloat X X[[55];]; floatfloat J J,, Rerata Rerata;; intint I I;;

J J == 0 0;; forfor ((II==0; I0; I<<5; I5; I++)++) {{ printfprintf(“Bilangan (“Bilangan %d%d : I : I++1“); 1“); scanf(“%f”,scanf(“%f”,

&&XX[[II]);]); J J == J J ++ X X[[II];]; }} Rerata Rerata == J/5; J/5; printfprintf(“ Nilai Rerata = (“ Nilai Rerata = %.%.22f “,f “, Rerata); Rerata); getch();getch();}}

Menjadi lebih sederhana dan mudah disesuaikan.

Page 12: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

float float AA[[55];];

Deklarasi variabel array

Banyaknya ElemenBanyaknya Elemen

Indeks Array

Nama Array

Tipe Data

Page 13: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

1.1. Homogen, seluruh elemen didalam Homogen, seluruh elemen didalam array mempunyai tipe data yang sama.array mempunyai tipe data yang sama.

2.2. Random access, setiap elemen didalam Random access, setiap elemen didalam array – apakah elemen pertama atau array – apakah elemen pertama atau elemen terakhir - dapat dicapai dalam elemen terakhir - dapat dicapai dalam waktu yang samawaktu yang sama. .

Sifat-sifat array

Page 14: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

int int 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]

Page 15: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

1.1. Menggunakan Menggunakan indeksindeks, misal elemen ketiga akan diisi dengan , misal elemen ketiga akan diisi dengan nilai 15, maka tulis: X[2]=15;nilai 15, maka tulis: X[2]=15;

2.2. Menggunakan Menggunakan 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]

Page 16: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Perhatian ! Warning ! Achtung Perhatian ! Warning ! Achtung !!

Hati-hati dalam menulis elemen elemen array Hati-hati dalam menulis elemen elemen array dengan pointer:dengan 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

Page 17: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

int int 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]

Page 18: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

void void Input_DataInput_Data(int (int XX[], int [], int NN))

{{

int int 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()

{{

int int XX[[1010];];

clrscr(); clrscr(); Input_DataInput_Data((XX,,1010); getch();); getch();

}}

Passing parameter untuk array

Page 19: Struktur data 01 (pointer dan linked list

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 Mengisi array int A[20] dengan bilangan acak dari 40

s/d 60 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

Page 20: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

Bila suatu array dideklarasi dengan tipe data Bila suatu array dideklarasi dengan tipe data charchar, maka variabel array tersebut akan menjadi , maka variabel array tersebut akan menjadi variabel string.variabel string.

Deklarasi string:Deklarasi string:

charchar Nama Nama[[3030];];

charchar Nama Nama[ ] = {‘[ ] = {‘PP’,’’,’ii’,’’,’nn’,’’,’kk’,’’,’yy’,’\0’};//’,’\0’};// 6 elemen 6 elemen

charchar Nama Nama[ ] = “[ ] = “PinkyPinky”;”; //// 6 elemen 6 elemen

charchar Nama Nama[[99] = “] = “PinkyPinky”;”; // // 9 elemen9 elemen

String

Page 21: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

#define#define Baris 20 Baris 20#define#define Kolom 4 Kolom 4

intint M M[[BarisBaris][][KolomKolom];];

int int KK[[33][][44] = { { ] = { { 33, , 66, , 88, , 99 }, }, { { 44, , 11, , 77, , 33 }, }, { { 55, , 22, , 66, , 88 } }; } };

Array dua dimensi (2-D); Matriks

Page 22: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

void void Input_DataInput_Data(int (int XX[][4], int [][4], int NN)){{ int int II;; for (for (II==00; ; II<<NN; ; II++)++) for (for (JJ==00; ; JJ<<44; ; JJ++) {++) { printf(“printf(“Sel Sel %d%d,,%d %d : : ”, ”, II++1,J1,J++11); scanf(“%d”, &); scanf(“%d”, &XX[[II]]

[[JJ]); }]); }}}

void main()void main(){{ int int KK[[33][][44];]; clrscr(); clrscr(); Input_DataInput_Data((KK,,33); getch();); getch();}}

Passing parameter untuk array 2-D

Page 23: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

#define#define Max 5 Max 5

#define#define LenStr 20 LenStr 20

charchar Nama Nama[[MaxMax][][LenStrLenStr];];

char char NN[[33][][1010] = { “] = { “AminudinAminudin”, ”,

“ “BonaBona”, ”,

” ”CindyCindy” };” };

Array dua dimensi (2-D); String list

Page 24: Struktur data 01 (pointer dan linked 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]

Page 25: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray Passing parameter string list

void void Input_DataInput_Data(char (char XX[][10], int [][10], int NN))

{{

int int II;;

for (for (II==00; ; II<<NN; ; II++) {++) {

printf(“printf(“Nama Nama %d %d : : ”, ”, II++11); ); gets(gets(XX[[II]; }]; }

}}

void main()void main()

{{

char char NN[[33][][1010];];

clrscr(); clrscr(); Input_DataInput_Data((NN,,33); getch();); getch();

}}

Page 26: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

char *char *NN[[33] = { “] = { “AminudinAminudin”, ”,

“ “BonaBona”, ”,

“ “CindyCindy” };” };

Array of pointer (1-D); String list

Page 27: Struktur data 01 (pointer dan linked 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’ ‘‘mm’’

‘‘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]

Page 28: Struktur data 01 (pointer dan linked list

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

Page 29: Struktur data 01 (pointer dan linked list

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]

Page 30: Struktur data 01 (pointer dan linked list

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]

Page 31: Struktur data 01 (pointer dan linked list

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)

Page 32: Struktur data 01 (pointer dan linked list

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)

Page 33: Struktur data 01 (pointer dan linked list

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

Page 34: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Fungsi Pemetaan ArrayFungsi Pemetaan Array

Pencapaian (access) data

•Positional AccessPencapaian data berdasarkan indeks.

•Associative AccessPencapaian data berdasarkan nilai/isi komponen.

Page 35: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Fungsi Pemetaan ArrayFungsi Pemetaan ArrayPencapaian 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.

Page 36: Struktur data 01 (pointer dan linked list

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 */

Page 37: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Fungsi Pemetaan ArrayFungsi Pemetaan Array

Parameter Array1. 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.

Page 38: Struktur data 01 (pointer dan linked list

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;

Page 39: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Fungsi Pemetaan ArrayFungsi Pemetaan Array

Fungsi pemetaan

• Row major orderCara penyimpanan data dalam suatubahasa 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 denganindeks 0). Didalam bahasa C nilai c0 = b,

Page 40: Struktur data 01 (pointer dan linked list

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 iddengan:

cd = Lct-1 = (ut – lt +1) x ct

= (ut + 1) x ct 1 < t <= d

c0 = b

Page 41: Struktur data 01 (pointer dan linked list

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)

Page 42: Struktur data 01 (pointer dan linked list

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.

Page 43: Struktur data 01 (pointer dan linked list

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

Page 44: Struktur data 01 (pointer dan linked list

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 QM = L x (u1 + 1) = 4 x (5 + 1) = 24 byte.

Page 45: Struktur data 01 (pointer dan linked list

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.

Page 46: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Fungsi Pemetaan ArrayFungsi Pemetaan Array

Perhitungan:

c2 = L = 2c1 = (u2 + 1) x c2 = (4 + 1) x 2 = 10c0 = b = 300Addr(P[i][j]) = c0 + c1 x i + c2 x j

= 300 + 10 x i + 2 x j

Besarnya memori yang dibutuhkanoleh array P:M = L x (u1 + 1) x (u2 + 1)

Page 47: Struktur data 01 (pointer dan linked list

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.

Page 48: Struktur data 01 (pointer dan linked list

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 memoriyang diperlukan oleh array B.

Page 49: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StructureStructure

1.1. Heterogen, setiap field didalam Heterogen, setiap field didalam struct boleh mempunyai tipe data struct boleh mempunyai tipe data yang berbeda.yang berbeda.

2.2. Random access, setiap elemen Random access, setiap elemen didalam struct – apakah field didalam struct – apakah field pertama atau field terakhir - dapat pertama atau field terakhir - dapat dicapai dalam waktu yang samadicapai dalam waktu yang sama. .

Sifat-sifat structure (struct)

Page 50: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StructureStructure

struct struct TDataTData { {

char char NamaNama[[2121];];

int int NIMNIM;;

float float IPKIPK;;

int int NilaiNilai;};;};

struct struct TData DataTData Data; // ; // DataData = = Variabel Variabel structurestructure

Deklarasi structure (struct)

Tipe data structure

Fields

Page 51: Struktur data 01 (pointer dan linked list

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.NIM Data.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

Page 52: Struktur data 01 (pointer dan linked list

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

Page 53: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Array of StructureArray of Structure

struct struct TDataTData { {

char char NamaNama[[2121];];

int int NIMNIM;;

floatfloat IPK IPK;;

int int NilaiNilai; };; };

struct struct TData TData DataData[[7070];];

Deklarasi array of struct

Page 54: Struktur data 01 (pointer dan linked list

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

Page 55: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Linked-listLinked-list

Sifat-sifat linked-list

1.1. Jumlah node dapat Jumlah node dapat bertambahbertambah atau atau berkurangberkurang secara dinamis sesuai secara dinamis sesuai kebutuhan.kebutuhan.

2.2. Sequential access, node didalam Sequential access, node didalam linked-list harus dicapai dari node awal linked-list harus dicapai dari node awal yang ditunjuk oleh Head, kemudian yang ditunjuk oleh Head, kemudian bergerak melalui setiap node kearah bergerak melalui setiap node kearah node akhir yang ditunjuk oleh Tail. node akhir yang ditunjuk oleh Tail. Setiap node dicapai melalui Current.Setiap node dicapai melalui Current.

Page 56: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Linked-listLinked-list

Deklarasi linked-liststruct struct TDataTData { {

char char NamaNama[[2121];];

int int NIMNIM;;

float float IPKIPK;;

int int NilaiNilai; };; };

struct struct TNodeTNode { {

struct struct TData DataTData Data;;

struct struct TNodeTNode * *NextNext;; };};

struct struct TNode TNode **Head, Head, **Tail, Tail, **CurrentCurrent;;

Page 57: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Linked-listLinked-list

Deklarasi variabel pointer

H C T

struct struct TNode TNode **HHead, ead, **TTail, ail, **CCurrenturrent;;

Page 58: Struktur data 01 (pointer dan linked list

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

Page 59: Struktur data 01 (pointer dan linked list

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

Page 60: Struktur data 01 (pointer dan linked list

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;}

Page 61: Struktur data 01 (pointer dan linked list

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

Page 62: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Linked-listLinked-list

P->Data = Data;

Data Next

NODE

P

400

400 Ali; 5578; 3.1; 83

Page 63: Struktur data 01 (pointer dan linked list

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

Page 64: Struktur data 01 (pointer dan linked list

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

Page 65: Struktur data 01 (pointer dan linked list

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

Page 66: Struktur data 01 (pointer dan linked list

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);

Page 67: Struktur data 01 (pointer dan linked list

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

Page 68: Struktur data 01 (pointer dan linked list

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

Page 69: Struktur data 01 (pointer dan linked list

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

Page 70: Struktur data 01 (pointer dan linked list

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

Page 71: Struktur data 01 (pointer dan linked list

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

Page 72: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Linked-listLinked-list

Mencetak datavoid 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");}

Page 73: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Linked-listLinked-list

Program utamavoid 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; } }}

Page 74: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Linked-listLinked-list

Membangun linked-list dari depanInsert 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;};}

Page 75: Struktur data 01 (pointer dan linked list

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; } }

}

Page 76: Struktur data 01 (pointer dan linked list

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.

Page 77: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Double Linked-listDouble Linked-list

NULL

H C

Bella 55862.891

Ali 55783.183

Cony 55543.076

Don 55893.793

Elly 55172.663

T

NULL

Data

Next

Prev

Page 78: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Circular Double Linked-listCircular Double Linked-list

H C

Bella 5586

912.8

Ali 5578

833.1

Cony 5554

763.0

Don 5589

933.7

Elly 5517

632.6

Data

Next

Prev

Page 79: Struktur data 01 (pointer dan linked list

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.

Page 80: Struktur data 01 (pointer dan linked list

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;}

Page 81: Struktur data 01 (pointer dan linked list

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++;}

Page 82: Struktur data 01 (pointer dan linked list

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; }

Page 83: Struktur data 01 (pointer dan linked list

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);}

Page 84: Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ImplementasiImplementasi

void Find_Next(){ Current = Current->Next;}

void Find_Prior(){ Current = Current->Prev;}

Page 85: Struktur data 01 (pointer dan linked list

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