Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
Struktur Data Linked List
Universitas Muslim Indonesia Oleh Lutfi Budi Ilmawan
2
Pendahuluan Linked list merupakan struktur data yang terdiri dari sekelompok node yang berantai dengan urutan tertentu. Node (simpul) merupakan elemen yang terdapat pada sebuah linked list yang terdiri dari: data dan link. Link merupakan field pada linked list yang menyimpan informasi alamat dari node lainnya. Data merupakan field pada linked list yang menyimpan data atau item. Link pada elemen terakhir bernilai NULL, yang menunjukkan akhir dari suatu linked list yang disebut tail. Elemen awal diakses oleh head.
3
Keuntungan Linked List memiliki struktur data dinamis.
Operasi penyisipan dan penghapusan node mudah diimplementasikan. Struktur data linier seperti stack dan queue yang mudah dijalankan dengan linked list. Data dapat berkembang secara real time tanpa terjadinya memory overhead.
4
Kekurangan Memiliki kecenderungan untuk menggunakan lebih banyak memori karena pointer yang membutuhkan ruang penyimpanan ekstra. Terutama pada double linked list, dibutuhkan memori tambahan untuk ruang yang dibutuhkan oleh next pointer dan previous pointer. Node dalam linked list harus dibaca berurutan dari awal secara sekuensial. Node disimpan tidak secara berdekatan, sehingga dapat meningkatkan waktu yang dibutuhkan untuk mengakses elemennya.
5
Jenis Linked List Single linked list, terdiri dari dua field yakni data dan next pointer. Double linked list, terdiri dari tiga field yakni data, next pointer, dan previous pointer. Multiple linked list, terdiri dari 2 atau lebih link field. Circular Linked list, linked list yang tail-nya menunjuk ke head.
6
SINGLE LINKED LIST Contoh 1 2 3 head next next next NULL TAIL
7
Deklarasi pada c++ SINGLE LINKED LIST struct node{ int data;
node *next; }; node *n, *head, *tail, *p_akses; Penjelasan: Node dibuat dengan menggunakan struct/record yang berisi dua buah field (data dan *next). data digunakan untuk menyimpan nilai (misal integer). *next digunakan untuk menyimpan alamat (pointer value) dari node lain. *n digunakan sebagai variabel pointer yang menunjuk pada node baru; *head digunakan sebagai variabel pointer yang menunjuk pada node awal pada linked list. *tail digunakan sebagai variabel pointer yang akan memberikan nilai NULL pada next pointer sebagai node akhir *p_akses digunakan sebagai variabel pointer untuk pengaksesan data. Salah satu analogi yang dapat dikemukakan di sini adalah tumpukan piring atau barang lain. Pada saat kita hendak menumpuk piring-piring tersebut tentulah yang kita lakukan adalah meletakkan piring pertama pada tempatnya, selanjutnya meletakkan piring kedua di atas piring pertama dan demikian seterusnya. Pada saat kita hendak mengambil satu piring dari tumpukan tersebut, tentu yang diambil adalah piring teratas (yang terakhir kali ditaruh), bukan yang terbawah (yang pertama kali diletakkan).
8
Operasi dalam Single Linked List
Pembentukan Node Awal Penambahan Node Penghapusan Node Pengaksesan Node Pencarian Data Salah satu analogi yang dapat dikemukakan di sini adalah tumpukan piring atau barang lain. Pada saat kita hendak menumpuk piring-piring tersebut tentulah yang kita lakukan adalah meletakkan piring pertama pada tempatnya, selanjutnya meletakkan piring kedua di atas piring pertama dan demikian seterusnya. Pada saat kita hendak mengambil satu piring dari tumpukan tersebut, tentu yang diambil adalah piring teratas (yang terakhir kali ditaruh), bukan yang terbawah (yang pertama kali diletakkan).
9
Pembentukan Node Awal Algoritma: n menunjuk pada node baru
SINGLE LINKED LIST Pembentukan Node Awal Algoritma: n menunjuk pada node baru n.data diberikan nilai. tail = n head = n
10
Penambahan Node Penambahan di awal linked list.
SINGLE LINKED LIST Penambahan Node Penambahan di awal linked list. Penambahan di akhir linked list. Penambahan di tengah linked list.
11
Penambahan di Akhir Algoritma: n menunjuk node baru
SINGLE LINKED LIST Penambahan di Akhir Algoritma: n menunjuk node baru n.data diberikan nilai. tail.next = n tail = n
12
Penambahan di Awal Algoritma: n menunjuk node baru
SINGLE LINKED LIST Penambahan di Awal Algoritma: n menunjuk node baru n.data diberikan nilai n.next = head head = n
13
Penambahan di Tengah Algoritma: p_akses = head
SINGLE LINKED LIST Penambahan di Tengah Algoritma: p_akses = head 2. if (p_akses.data data_setelah){ do { p_akses = p_akses.next } while(p_akses.data data_setelah) n menunjuk pada node baru n.data diberikan nilai n.next = p_akses.next p_akses.next = n
14
Penghapusan Node Penghapusan di awal Penghapusan di akhir
SINGLE LINKED LIST Penghapusan Node Penghapusan di awal Penghapusan di akhir Penghapusan di tengah
15
Penghapusan di Awal Algoritma: p_akses = head head = head.next
SINGLE LINKED LIST Penghapusan di Awal Algoritma: p_akses = head head = head.next hapus node pada lokasi memori yang ditunjuk p_akses.
16
Penghapusan di Akhir Algoritma: p_akses = head
SINGLE LINKED LIST Penghapusan di Akhir Algoritma: p_akses = head while (p_akses.next tail){ p_akses = p_akses.next; } tail = p_akses hapus node pada lokasi memori yang ditunjuk p_akses.next
17
Penghapusan di Tengah Algoritma:
SINGLE LINKED LIST Penghapusan di Tengah Algoritma: buat variabel pointer dengan nama *temp=NULL. p_akses = head while (p_akses.data x){ temp = p_akses p_akses = p_akses.next } temp.next = p_akses.next hapus node pada lokasi memori yang ditunjuk p_akses.
18
Pengaksesan Data Algoritma: p_akses = head while (p_akses NULL){
SINGLE LINKED LIST Pengaksesan Data Algoritma: p_akses = head while (p_akses NULL){ print (p_akses.data) p_akses = p_akses.next }
19
Double Linked List Terdiri dari tiga field yakni data, next pointer, dan previous pointer. Double linked list dibuat agar data pada sebuah linked list dapat diakses secara mundur. data1 data2 data3 NULL head next next next NULL prev prev prev
20
Operasi dalam Double Linked List
Pembentukan node awal Penambahan node Penghapusan node Pengaksesan node dari depan Pengaksesan node dari belakang
21
Deklarasi pada c++ DOUBLE LINKED LIST struct node{ int data;
node *next; node *prev; }; node *n, *head, *tail, *p_akses; Penjelasan: Node dibuat dengan menggunakan struct/record yang berisi tiga buah field (data, *next, dan *prev). data digunakan untuk menyimpan nilai (misal integer). *next digunakan untuk menyimpan alamat (pointer value) dari node setelahnya. *prev digunakan untuk menyimpan alamat (pointer value) dari node sebelumnya. *n digunakan sebagai variabel pointer yang menunjuk pada node baru; *head digunakan sebagai variabel pointer yang menunjuk pada node awal pada linked list. *tail digunakan sebagai variabel pointer yang akan memberikan nilai NULL pada next pointer sebagai node akhir *p_akses digunakan sebagai variabel pointer untuk pengaksesan data.
22
Operasi dalam Double Linked List
Pembentukan node awal Penambahan node Penghapusan node Pengaksesan node dari depan Pengaksesan node dari belakang
23
Pembentukan Node Awal Algoritma: n menunjuk pada node baru
DOUBLE LINKED LIST Pembentukan Node Awal Algoritma: n menunjuk pada node baru n.data diberikan nilai n.prev = NULL head = n tail = n
24
Penambahan di Akhir Algoritma: n menunjuk pada node baru
DOUBLE LINKED LIST Penambahan di Akhir Algoritma: n menunjuk pada node baru n.data diberikan nilai n.prev = tail tail.next = n tail = n
25
Penambahan di Awal Algoritma: n menunjuk pada node baru
DOUBLE LINKED LIST Penambahan di Awal Algoritma: n menunjuk pada node baru n.data diberikan nilai n.next = head head.prev = n n.prev = NULL head = n
26
Penambahan di Tengah Algoritma: p_akses = head
DOUBLE LINKED LIST Penambahan di Tengah Algoritma: p_akses = head 2. while(p_akses.data data_setelah) { p_akses = p_akses.next } n menunjuk pada node baru n.data diberikan nilai n.next = p_akses.next p_akses.next = n n.prev = p_akses p_akses = n.next p_akses.prev = n
27
Pengaksesan Data dari Depan
DOUBLE LINKED LIST Pengaksesan Data dari Depan Algoritma: p_akses = head while (p_akses NULL){ print (p_akses.data) p_akses = p_akses.next }
28
Pengaksesan dari Belakang
DOUBLE LINKED LIST Pengaksesan dari Belakang Algoritma: p_akses = tail while (p_akses NULL){ print (p_akses.data) p_akses = p_akses.prev }
29
Tugas Buat algoritma operasi untuk double linked list:
Penghapusan node di akhir Penghapusan node di awal Penghapusan node di tengah Tugas dikirim ke : Dengan subject : SD.[Kelas].[Stambuk] Deadline : Senin, 4 Mei 2015
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.