Linked List
-
Upload
tia-rahmadianti -
Category
Documents
-
view
246 -
download
7
description
Transcript of Linked List
-
Linked List(Runut Berantai)
-
Linked List Linked List adalah sebuah kumpulan nilai yang
terhubung
Linked List menggunkan node untuk menyimpan nilai tersebut
setiap node dihubungkan dengan sebuah pointer yang merujuk ke node berikut atau sebelum
-
node node
next
prevhead
next
prev
null
tail
next
prev
tail
-
Linked List (2)
prev merujuk ke node sebelum dan next ke node sesudahnya
Singly Linked List adalah list dimana setiap node HANYA memiliki next
Double Linked list adalah list dimana setiap node memiliki next dan prev
-
Linked List (3)
Head adalah node pertama dan tidak memiliki prev (prev == null)
Tail adalah node terakhir dan tidak memiliki next (next == null)
-
Linked List: Problem
Bagaimana mencari sebuah node dengan value tertentu?
Bagaimana mencari node dengan value terbesar?
Bagaimana menukar posisi 2 buah node?
-
Linked List: Implementasi
class Node{Node * next;Node *prev;int value;}
-
Linked List: Mencari Node dengan Nilai Tertentu
Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;}
-
Linked List: Mencari Node dengan Nilai Tertentu
Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;}
mulai dari head
-
Linked List: Mencari Node dengan Nilai Tertentu
Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;}
jika curr tidak kosong, belum selesai
-
Linked List: Mencari Node dengan Nilai Tertentu
Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;}
badingkan nilai curr dengan nilai yang dicari
jika sesuai, kembalikan
jika tidak, masuk ke node berikutnya
-
Linked List: Mencari Node dengan Nilai Tertentu
Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;} jika kita sudah melewati tail,
dan nilai belum ditemukan kembalikan null
-
Linked List: Membalikkan 2 Node bersebelahan
node1 node2
next
prevhead
next
prev
null
tail
next
prev
tail
node2 node1
next
prevhead
next
prev
null
tail
next
prev
tail
-
Linked List: Membalikkan 2 Node bersebelahan
Masalah: prev dan next dari node1 dan node2 sudah berubah
Pre: prev dari node1 adalah head, next adalah node2; prev dari node2 adalah node1, next adalah tail
Post: prev dari node1 adalah node2, next adalah tail, prev dari node2 adalah head, next adalah node1
-
Linked List: Membalikkan 2 Node bersebelahan
Node* switchNode(Node * first, Node * second){Node * firstPrev = first->prev;first->prev = second;
Node * secondNext = second->next;second->next = first;
first->next = secondNext;second->prev = firstPrev;}
-
Linked List: Membalikkan 2 Node bersebelahan
Node* switchNode(Node * first, Node * second){Node * firstPrev = first->prev;first->prev = second;
Node * secondNext = second->next;second->next = first;
first->next = secondNext;second->prev = firstPrev;}
Simpan first->prev karena akan digunakan
oleh second->prev Ubah nilai first->prev
-
node1 node2
next
prevhead
next
prev
null
tail
next
prev
tail
-
Linked List: Membalikkan 2 Node bersebelahan
Node* switchNode(Node * first, Node * second){Node * firstPrev = first->prev;first->prev = second;
Node * secondNext = second->next;second->next = first;
first->next = secondNext;second->prev = firstPrev;}
Simpan second->next karena akan digunakan
oleh first->next Ubah nilai second->next
-
node1 node2
next
prevhead
next
prev
null
tail
prev
tail
next
-
Linked List: Membalikkan 2 Node bersebelahan
Node* switchNode(Node * first, Node * second){Node * firstPrev = first->prev;first->prev = second;
Node * secondNext = second->next;second->next = first;
first->next = secondNext;second->prev = firstPrev;} ubah yang lain dengan
menggunakan nilai yang telah disimpan
-
node2 node1
next
prevhead
next
prev
null
tail
next
prev
tail
DONE! :)
-
Q: Bagaimana mengubah 2 Node yang tidak bersebelahan?
-
Stack dan Queue
Linked List umum digunakan untuk mengimplementasikan barisan
Salah satu barisan yang umum adalah stack dan queue
-
Stack
Arti: Tumpukan
First In Last Out (FILO): element yang pertama masuk akan keluar paling terakhir
Implementasi: Call Stack; peyimpanan state pada saat pemanggilan function
A
B
C
D
poppush
-
Queue
Arti: Antrian
First In First Out (FILO): element yang pertama masuk akan keluar paling pertama
Implementasi: Request queue; antrian request yang masuk pada sebuah server A
B
C
pop
push