Struktur data 01 (pointer dan linked list

Post on 17-Jun-2015

1.396 views 6 download

Transcript of Struktur data 01 (pointer dan linked list

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

BAGIAN IBAGIAN I

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.

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 bilangandengan 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 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

??????

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

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

ArrayArray

float float 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 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

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]

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]

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

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]

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

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

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

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

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

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

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

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

}}

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

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 AccessPencapaian data berdasarkan indeks.

•Associative AccessPencapaian data berdasarkan nilai/isi komponen.

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.

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

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 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,

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

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 QM = 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 = 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)

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

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)

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

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

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

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

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

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

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

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

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

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

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 55862.891

Ali 55783.183

Cony 55543.076

Don 55893.793

Elly 55172.663

T

NULL

Data

Next

Prev

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

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