Dokumen tersebut membahas tentang struktur data array, termasuk definisi, sifat-sifat, dan contoh penggunaan array satu dan dua dimensi untuk menyimpan dan memproses berbagai jenis data seperti bilangan, karakter, dan string.
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.
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
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.
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
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;
}
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