Pertemuan 10 Linked List

advertisement
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
Download