Struktur data 01 (pointer dan linked list
-
Upload
sunarya-marwah -
Category
Documents
-
view
1.396 -
download
6
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