Pertemuan 10 Linked List Disusun oleh : PH. Prima Rosa, S.Si., M.Sc. Sri Hartati Wijono, S.Si. © 2003/2004 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 1 Review : Sifat Implementasi Linear List dengan Array • Pencarian dapat dilakukan dengan mudah. • Melihat elemen dalam list dapat dilakukan dengan mudah • Membaca elemen dalam list dapat dilakukan dengan mudah • Proses menyisipkan dan menghapus elemen tidak mudah. Mengapa ? Elemen-elemen harus digeser • Sulit untuk memperkirakan jumlah array yang harus dibuat. Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 2 1 Review : Sifat Implementasi Linear List dengan Array • Bagaimana mengatasi kelemahan implementasi linear list dengan array? – Satu elemen dengan elemen yang lain dihubungkan dengan “suatu penghubung (link)” • Lahir gagasan linked list Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 3 Beberapa Struktur Data (b) Linked List (a) Matriks (c) Tree Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 (d) Jaringan Hal. 4 2 Implementasi linked list (list terhubung) • Linked list merupakan rantai elemen • Tiap elemen punya : – data – link yang menunjuk ke elemen berikut pKepala (a) Suatu linked list dengan pointer kepala: pKepala pKepala (b) Suatu linked list kosong Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 5 Node : Suatu elemen dari Linked List 1 node dgn 1 field data 1 node dgn 3 field data nomor nama id rangking Suatu structure dlm 1 node nama alamat Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 telepon Hal. 6 3 Kepala & Node menggunakan Struktur Data Structure • Kita perlu mendefinisikan 2 structure: – satu untuk kepala (head) list – satu untuk node list jumlah kepala (a) Structure utk kepala (b) Structure utk node Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 7 Kepala dan Node : list integer sederhana struct intlist { struct node *kepala; int jumlah; }IntList; kepala jumlah 2 15 struct node { int data; struct node *link; }Node; data 99 data Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 link link Hal. 8 4 Kepala dan Node: list nama struct IntList { struct node *kepala; int jumlah; }IntList; kepala jumlah 2 Andi struct node { char *name; struct node *link; }Node; data link Boni data link Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 9 Kepala dan Node: structure sebagai data struct Intlist { struct node *kepala; int jumlah; }; struct node { struct person *data; struct node *link }Node; struct person { char *nama; int umur; } Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 kepala jumlah 2 Andi 15 data link Boni 19 data link Hal. 10 5 Operasi-Operasi Utama dalam Ordered Linked List Buat List Tambah node – Di awal, tengah atau akhir Hapus node – Di awal, tengah atau akhir Cari node Melacak list (Membaca node-node) Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 11 Operasi (1) Buat list jumlah kepala (a) Sebelum buat list.kepala = null list.jumlah = 0 jumlah kepala (b) Setelah buat Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 12 6 Operasi (2) Tambah Node : Jika List Kosong (a) Sebelum jumlah tambah kepala pBaru pBaru -> link = list.kepala list.kepala = pBaru (b) Sesudah kepala jumlah tambah Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 13 Operasi Tambah Node: Di Awal List jumlah kepala (a) Sebelum tambah pBaru pBaru -> link = list.kepala list.kepala = pBaru jumlah kepala (b) Sesudah tambah pBaru Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 14 7 Operasi Tambah Node : Di Tengah List (a) Sebelum jumlah kepala pSblm tambah pBaru pBaru -> link = pSblm -> link pSblm -> link = pBaru (b) Sesudah jumlah kepala pSblm tambah pBaru Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 15 Operasi Tambah node: Di Tengah List • Bandingkan operasi penambahan elemen dalam implementasi linear list dengan array dan dengan linked list • Apa kesimpulan Anda? Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 16 8 Operasi Tambah Node : Di Akhir List jumlah kepala (a) Sebelum tambah pSblm pBaru pBaru -> link = pSblm->link pSblm -> link = pBaru (b) Sesudah jumlah kepala tambah pSblm pBaru Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 17 Operasi (3) Hapus Node: Di Awal List jumlah (a) Sebelum kepala tambah pSblm pSkrg list.kepala = pSkrg -> link (b) Sesudah jumlah kepala tambah pSblm pSkrg Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 18 9 Operasi Hapus Node : Kasus Umum (a) Sebelum jumlah kepala tambah pSblm pSkrg pSblm -> link = pSkrg->link (b) Sesudah tambah jumlah kepala pSblm pSkrg Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 19 Operasi (4) Pencarian node Lokasi di depan pSblm pSkrg Lokasi di tengah pSblm pSkrg Lokasi di akhir pSblm pSkrg (a) Pencarian sukses (return true) Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 20 10 Operasi (4) Pencarian node > elemen terakhir < elemen pertama pSblm pSkrg pSblm pSkrg pSblm pSkrg (b) Pencarian gagal (return false) Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 21 Operasi Melacak List Lokasi di depan Lokasi di tengah pSblm pSkrg pSblm pSkrg Lokasi di akhir pSblm pSkrg Dilakukan proses pelacakan / pembacaan untuk setiap node Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 22 11 Mengapa harus dengan pointer? • Pada beberapa bahasa pemrograman yang tidak memiliki tipe data pointer, linked list diimplementasikan dengan array Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 23 Struktur Data : Implementasi Linked Lists Dengan Variabel Dinamis Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 24 12 Alokasi Memori Dinamis Alokasi memori dinamis – Memakai dan membebaskan memory selama proses eksekusi malloc – Mengalokasikan sejumlah byte untuk digunakan • sizeof digunakan untuk menentukan ukuran obyek – Akan mengembalikan pointer ke sebuah lokasi di memori. • Jika tidak ada memori yang tersedia akan mengembalikan NULL – P = (Node *)malloc( sizeof( struct Node ) ); • P akan menunjuk ke variabel dinamis baru bertipe node yang telah dibuat. Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 25 Alokasi Memori Dinamis free – Membebaskan memori yang dibuat dengan malloc yang sudah tidak digunakan – free (P); Pert. 10 Struktur Data - FMIPA USD - 2003 Pert. 10 Struktur Data - FMIPA USD - 2003 Hal. 26 13