SlideShare a Scribd company logo
Linked List
Tim Ajar Algoritma dan Struktur Data
Genap 2021/2022
Capaian Pembelajaran
● Mahasiswa memahami konsep linked list
● Mahasiswa memahami tahapan pembuatan linked list untuk menyelesaikan
masalah
Pengantar
● Konsep struktur data linked list mengatasi kelemahan dari struktur data array.
● Salah satu kekurangan ketika menggunakan data array sebagai penyimpanan data
adalah sifatnya yang statis.
● Array akan memesan sejumlah memori sesuai pada saat deklarasi, walaupun slot
memori tersebut belum terpakai untuk menyimpan data.
Definisi
● Linked list : struktur data linier yang dibangun dari satu atau
lebih node yang saling terhubung yang menempati alokasi
memori secara dinamis.
● Node : tempat penyimpanan data yang terdiri dari dua
bagian/field.
● Field 1 adalah Data, digunakan untuk menyimpan data/nilai.
● Field 2 adalah Pointer, untuk menyimpan alamat tertentu.
○ Pointer disebut juga sebagai link
Definisi Linked Lists
● Jika linked list hanya berisi satu node maka pointernya akan menunjuk ke NULL.
● Jika linked list memiliki lebih dari satu node maka pointer menyimpan alamat dari
node berikutnya. Sehingga antara node satu dengan node yang lain akan
terhubung, kecuali node terakhir.
● Node terakhir pada linked list akan menunjuk null (nilai null merepresentasikan nilai
tidak ada/nothing/unset reference).
● Awal dari struktur Linked List terdapat head.
● Akhir dari struktur Linked List merupakan tail
Catatan: head bukanlah node yang terpisah, melainkan node yang menunjuk ke node
pertama. Begitu pula dengan tail
Jika Linked List kosong, maka head dan tail akan merujuk ke null.
Array vs Linked List
Array VS Linked List
ARRAY LINKED LIST
Statis Dinamis
Penambahan/ Penghapusan data
terbatas
Penambahan/ Penghapusan data tidak
terbatas
Random Access Sequential access
Memiliki tipe data yang homogen Node terhubung melalui pointer ke
node berikutnya. Sehingga tidak harus
memiliki tipe data yang homogen
Array VS Linked List
● Menyimpan koleksi elemen secara non-contiguously.
○ Elemen dapat terletak pada lokasi memory yang saling berjauhan. Bandingkan
dengan array dimana tiap-tiap elemen akan terletak pada lokasi memory yang
berurutan.
a b c d e
c a e d b
Array representation
Linked list representation
Array VS Linked List
● Mengizinkan operasi penambahan atau penghapusan elemen ditengah-tengah
koleksi dengan hanya membutuhkan jumlah perpindahan elemen yang konstan.
○ Bandingkan dengan array. Berapa banyak elemen yang harus dipindahkan bila
akan menyisipi elemen ditengah-tengah array?
Kelebihan & Kekurangan Linked
Lists
● Kelebihan: Struktur data yang dinamis, jumlah node dapat bertambah sesuai
kebutuhan data.
● Kekurangan: Struktur data ini tidak dapat mengakses data berdasarkan index. Jika
dibutuhkan pendekatan seperti ini, maka perlu dilakukan proses dari head dan
mengikuti penunjuk next sampai didapatkan data/index yang diinginkan.
Jenis-jenis Linked Lists
● Single Linked List: Memiliki penunjuk ke node berikutnya (next)
● Double Linked List: mempunyai dua penunjuk, yaitu next dan prev
● Circular linked list
Gambaran Struktur Node
null
Link atau pointer
data
null
null
Single linked-list Double linked-list
Konsep Single Linked Lists
● Linked List merupakan struktur data dinamis.
● Jumlah node dapat bertambah sesuai dengan kebutuhan.
● Program yang tidak diketahui jumlah datanya, sebaiknya menggunakan struktur
data Linked List.
● Gambar berikut menunjukkan ilustrasi single linked lists.
Konsep Single Linked Lists
● Single :pointer-nya hanya satu buah dan satu arah, yaitu menunjuk ke node
sesudahnya.
● Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi
berhenti pada saat pembacaan isi linked list.
● Linked List tidak menggunakan memory cell secara berderet (row). Tetapi, ia
memanfaatkan memory secara acak.
● Lalu bagaimana komputer mengetahui bahwa node itu merupakan satu linked lists
yang sama ?
○ Kuncinya adalah data yang disimpan ke dalam node, setiap node juga
menyimpan memory address untuk node berikutnya dalam satu linked list.
Ilustrasi Single Linked List
● Ilustrasi single linked list pada memory :
● Karena node tidak ditunjuk oleh node manapun maka node ini adalah node yang
paling depan (node kepala).
Kepala
c a e d b
Ilustrasi Single Linked List
● Ilustrasi single linked list pada memory :
● Node e tidak menunjuk ke node manapun sehingga pointer dari node e adalah
NULL. Dapat disimpulkan bahwa node ini adalah node yang paling belakang (node
ekor).
c a e d b
Ekor
Contoh : “Single” Representation
Penjelasan:
● Pembuatan class bernama Node yang berisi 2 field/variabel, yaitu data bertipe
String dan pointer yang bertipe class Node
● Field data : digunakan untuk menyimpan data/nilai pada linked list. Field pointer :
digunakan untuk menyimpan alamat node berikutnya.
class Node
{
String data;
Node pointer;
}
pointer
data
Ilustrasi :
Implementasi Linked Lists (Node)
● Untuk merepresentasikan elemen data, diperlukan Node. Implementasi dalam
bahasa Java sebagai berikut:
● Terdapat dua atribut utama pada node yaitu data dan penunjuk next yang
menghubungkan dengan data berikutnya.
Implementasi Linked Lists (Node) Menggunakan
Tipe Data Generic
● Untuk penyimpanan tipe data yang lebih fleksibel, dapat menggunakan konsep
generic. Perhatikan contoh kode program berikut ini.
● Node bisa menerima berbagai tipe data: Integer, Float, String, Boolean
Pointer Head
● Untuk mengingat node yg paling depan (node kepala) digunakan sebuah pointer
yang akan menyimpan alamat dari node depan.
● Pointer ini biasanya diberi nama head.
head head
Pointer Tail
● Untuk mengingat node yg paling belakang (node ekor) digunakan sebuah pointer
yang akan menyimpan alamat dari node belakang.
● Pointer ini biasanya diberi nama tail.
tail tail
Contoh
● Linked list yang memiliki 4 node :
A0 A1 A2 A3
head tail
Cara Kerja Linked Lists
Operasi pada Linked Lists
● isEmpty: mengecek apakah head =
null (kosong).
● Print: menampilkan seluruh elemen
pada Linked Lists.
● Operasi penambahan node
○ Di awal
○ Di akhir
○ Setelah node tertentu
● Operasi menghapus node
○ Di awal
○ Di akhir
○ Di lokasi tertentu
● Operasi Linked List dengan Index
○ Pengaksesan data node
○ Pengaksesan index node
○ Penambahan data
○ Penghapusan data
Operasi isEmpty()
● Digunakan untuk mengetahui linked dalam kondisi kosong.
● Kondisi kosong : jika head=tail=null.
boolean isEmpty()
{
return head==null;
}
Proses Traverse pada Linked List
● Proses melakukan kunjungan pada setiap node tepat satu kali. Dengan melakukan
kunjungan secara lengkap, maka akan didapatkan urutan informasi secara linier
yang tersimpan dalam Linked List.
● Proses ini dilakukan pada operasi cetak data, penambahan data di akhir Linked Lists
dan pengaksesan Linked List menggunakan index
● Proses ini dimulai dari awal data (head) sampai menjumpai null. Proses ini tidak
merubah referensi dari head.
Operasi print()
● Untuk mencetak data seluruh node mulai dari yang paling depan(head) hingga tail
public void print() {
if (!isEmpty()) {
Node tmp = head;
while (tmp != null) {
System.out.print(tmp.data + "t");
tmp = tmp.next;
}
} else {
System.out.println("Linked list kosong");
}
}
Operasi Penambahan
● Penambahan dari depan (AddFirst)
● Penambahan di belakang (AddLast)
● Penambahan setelah key tertentu (InsertAfter)
Penambahan dari
Depan(addFirst)
● Jika kondisi awal node kosong maka head dan tail akan sama-sama menunjuk ke
node input.
● Jika pada linked list telah ada node, maka:
○ Next pada node input menunjuk node yang ditunjuk oleh head
○ Kemudian head akan menunjuk ke node input
1
2
1
2
Ilustrasi : addFirst(x)
 Menambahkan X pada lokasi paling depan.
a b c d
head
x b
head
c d
a
x
Kondisi awal pada linked list :
Setelah penambahan node x didepan:
Node input
Operasi Linked Lists: AddFirst
void addFirst(Node input){
if (isEmpty()){
head=input;
tail=input;
}
else
{
input.next = head;
head = input;
}
}
Penambahan dari Belakang
(addLast)
● Operasi untuk menambah node di akhir elemen Linked Lists.
● Jika kondisi awal node kosong maka head dan tail akan sama-sama menunjuk ke
node input.
● Jika pada linked list telah ada node, maka:
○ Next pada node yang ditunjuk oleh tail menunjuk ke node input
○ kemudian tail akan menunjuk ke node input
Ilustrasi : addLast(x)
● menambahkan X pada akhir list :
a b c
tail
d x
a b c d
tail
x
Node input
Kondisi awal pada linked list :
Setelah penambahan node x dibelakang :
Operasi Linked Lists: addLast
void addLast(Node input){
if (isEmpty()){
head = input;
tail = input;
}
else
{
tail.pointer = input;
tail = input;
}
}
Penambahan setelah Node
tertentu(insertAfter)
● Dilakukan pencarian node yang memiliki data yang sama dengan key.
● Kemudian dilakukan penambahan node setelah node yang memiliki data sama
dengan key
● Contoh di bawah ini merupakan penambahan setelah key E : insertAfter(E)
key
a
Ilustrasi : Insert After(a)
● Kondisi Awal
 Menyisipkan X pada lokasi setelah key.
a b c d
key
b
x
Key
c d
x
Operasi Linked Lists: insertAfter
public void insertAfter(Object key,Node input){
Node temp = head;
do{
if(temp.data==key){
input.next = temp. next;
temp. next = input;
System.out.println("Insert data is succeed.");
break;
}
temp = temp. next;
}while (temp!=null);
}
Operasi Penghapusan
Dibedakan menjadi :
● Hapus node depan (removeFirst)
● Hapus node belakang (removeLast)
● Hapus node tertentu (remove)
Linked Lists: menghapus elemen
X
● Proses menghapus dilakukan dengan mengabaikan elemen yang hendak dihapus
dengan cara melewati pointer (reference) dari elemen tersebut langsung pada
elemen selanjutnya.
● Elemen x dihapus dengan meng-assign field next pada elemen a dengan alamat b
a b
x
key
a b
key
a b
x
key
Hasil akhir :
Kondisi awal :
Langkah-langkah menghapus
elemen
● Tidak ada elemen lain yang menyimpan alamat node x.
● Node x tidak bisa diakses lagi.
● Java Garbage Collector akan membersihkan alokasi memory yang tidak dipakai lagi
atau tidak bisa diakses.
● Dengan kata lain, menghapus node x.
a b
x
temp
Operasi Linked Lists:
Remove/Delete
Ketika proses penghapusan perlu diperhatikan juga beberapa kondisi tambahan dari
data Linked Lists, yaitu:
● Linked List kosong, maka tidak dapat dilakukan penghapusan;
● Penghapusan node yang merupakan head, maka head harus menunjuk ke node
berikutnya;
● Node yang ingin dihapus harus ada dalam Linked List.
Hapus node depan
public void removeFirst(){
if(isEmpty()) System.out.println("Linked List masih Kosong!");
else if(head==tail){
head = tail = null;
}
else{
head = head.next;
}
}
Hapus node belakang
public void removeLast() {
if(isEmpty()) System.out.println("Linked List masih Kosong!");
else if(head==tail){
head = tail = null;
}
else{
Node current = head;
while(current.next != tail){
current = current.next;
}
current.next = null;
tail=current;
}
}
Hapus node tertentu
public void remove(int key){
if(isEmpty()) System.out.println("Linked List masih Kosong, tidak dapat dihapus!");
else{
Node temp = head;
while (temp != null){
if ((temp.data == key)&&(temp == head)){
this.removeFirst();
break;
}
else if (temp.next.data == key){
temp.next = temp.next.next;
if(temp.next == null)
tail=temp;
break;
}
temp = temp.next;
}
}
}
Operasi Linked List dengan Index
● Pengaksesan data node
● Pengaksesan index node
● Penambahan data
● Penghapusan data
Pengaksesan data node:
getData(int index)
public int getData(int index)
{
Node tmp = head;
for (int i = 0; i < index; i++)
tmp = tmp.next;
return tmp.data;
}
Operasi pencarian indeks data pada node :
indexOf(key)
public int indexOf(int key) {
Node tmp = head;
int index = 0;
while (tmp != null && tmp.data != key) {
tmp = tmp.next;
index++;
}
if (tmp == null) {
return -1;
} else {
return index;
}
}
Method remove(int index)
public void removeAt(int index) {
if (index == 0) {
removeFirst();
} else {
Node temp = head;
for (int i = 0; i < index - 1; i++) {
temp = temp.next;
}
temp.next = temp.next.next;
if (temp.next == null) {
tail = temp;
}
}
}
Method add(int index,Object theElement)
public void insertAt(int index, int input) {
if (index < 0) {
System.out.println("indeks salah");
} else if (index == 0)
{
addFirst(input);
} else {
Node temp = head;
for (int i = 0; i < index - 1; i++) {
temp = temp.next;
}
temp.next = new Node(input, temp.next);
}
}
Latihan
Jelaskan Langkah-langkah dari 4 node berikut dengan kondisi awal linked list kosong:
1. Tambahkan node baru dengan data 500 dari belakang.
2. Tambahkan node baru dengan data 50 dari depan.
3. Tambahkan node dengan data 250 setelah node 200.
4. Tambahkan node dengan data 150 pada indeks ke-1
5. Hapus node depan
6. hapus node belakang
7. hapus node yg memiliki data 300.
8. Hapus node pada indeks ke-3
*Tampilkan semua data dari seluruh node pada linked list untuk setiap
penambahan/penghapusan
100 200 300 400
Terima Kasih


More Related Content

PPT
Salinan 2. linked-listnnnnnnnn-materi.ppt
DOC
Modul 3 strukdat
PPT
Tugas kelompok mi d3_sore
PPT
Bab 5 linked list
PPT
Bab 6 singly_linked_list
PDF
Pertemuan 4 revisijan2013-mhs
PPTX
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
Salinan 2. linked-listnnnnnnnn-materi.ppt
Modul 3 strukdat
Tugas kelompok mi d3_sore
Bab 5 linked list
Bab 6 singly_linked_list
Pertemuan 4 revisijan2013-mhs
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO

Similar to Pertemuan 11 (ASD_SD 2022)- Linked List.ppsx (20)

PPTX
PPT KELOMPOK III LINEAR SINGLY LINKED LIST.pptx
PPTX
Linked List
PPTX
Pemahaman dasar tentang Struktur Data Linked List dan Algoritmanya
PDF
Linked List dalam Struktur Data
PPTX
PPT STRUKTUR DATA(1).pptx
PPTX
SINGLE_LINKED_LIST.pptx
DOCX
Stack with linked list(algodat)
DOC
Linked list
PPT
Linked List.ppt
PPTX
3 Linked List
PPTX
Persentasi linked list
PPTX
Persentasi linked list
DOCX
MAKALAH LINKED LIST DALAM BAHASA C.docx
DOCX
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
PPTX
Pert.5 linked list
PPTX
Linked List - LL Lanjutan (pertemuan 3).pptx
DOCX
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
PPTX
PPT
Tistrukdat6
PPTX
Linked list
PPT KELOMPOK III LINEAR SINGLY LINKED LIST.pptx
Linked List
Pemahaman dasar tentang Struktur Data Linked List dan Algoritmanya
Linked List dalam Struktur Data
PPT STRUKTUR DATA(1).pptx
SINGLE_LINKED_LIST.pptx
Stack with linked list(algodat)
Linked list
Linked List.ppt
3 Linked List
Persentasi linked list
Persentasi linked list
MAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
Pert.5 linked list
Linked List - LL Lanjutan (pertemuan 3).pptx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
Tistrukdat6
Linked list
Ad

Recently uploaded (20)

PDF
Pengenalan Undang-undang pengakap laut.pdf
PDF
lembar kerja LMS tugas pembelajaran mendalam
DOCX
Modul Ajar Deep Learning PKN Kelas 10 SMA Terbaru 2025
PDF
INSTRUMEN IMPLEMENTASI DAN REFLEKSI PERENCANAAN PEMBELAJARAN-ARNI.pdf
DOCX
Modul Ajar Deep Learning Prakarya Kerajinan Kelas 12 SMA Terbaru 2025
PDF
Lembar Kerja Mahasiswa Konsep Sistem Operasi
PPTX
Pancasila: fondasi peradaban dan kebudayaan berkelanjutan
PDF
PPT IPS Geografi SMA Kelas X_Bab 1 Pengantar Geografi_May.pdf
DOCX
Modul Ajar Deep Learning Bahasa Inggris Kelas 12 SMA Terbaru 2025
PPTX
Rancangan Kegiatan Kokurikuler SMP N 1 Karanggede
PPTX
Presentasi_Pembelajaran_Mendalam_Lengkap.pptx
DOCX
Modul Ajar Deep Learning Biologi Kelas 10 SMA Terbaru 2025
PDF
PPT Resources Seminar AITalks: AI dan Konseling GPT
PPTX
MATERI MPLS TENTANG KURIKULUM DAN KEGIATAN PEMBELAJARAN
PDF
KELOMPOK 4 LK Modul 4 KP4 Asesmen PM (3).pdf
PDF
Materi Seminar AITalks: AI dan Konseling GPT
PPTX
5. Bahan Bacaan Asinkronus Modul 5_ Perencanaan Pembelajaran.pptx
PPT
Teknologi-Pangan-Pertemuan-820728132309-.ppt
DOCX
Modul Ajar Pembelajaran Mendalam Senbud Seni Tari Kelas XII Terbaru 2025
PDF
Digital Statecraft Menuju Indonesia Emas 2045: Diplomasi Digital, Ketahanan N...
Pengenalan Undang-undang pengakap laut.pdf
lembar kerja LMS tugas pembelajaran mendalam
Modul Ajar Deep Learning PKN Kelas 10 SMA Terbaru 2025
INSTRUMEN IMPLEMENTASI DAN REFLEKSI PERENCANAAN PEMBELAJARAN-ARNI.pdf
Modul Ajar Deep Learning Prakarya Kerajinan Kelas 12 SMA Terbaru 2025
Lembar Kerja Mahasiswa Konsep Sistem Operasi
Pancasila: fondasi peradaban dan kebudayaan berkelanjutan
PPT IPS Geografi SMA Kelas X_Bab 1 Pengantar Geografi_May.pdf
Modul Ajar Deep Learning Bahasa Inggris Kelas 12 SMA Terbaru 2025
Rancangan Kegiatan Kokurikuler SMP N 1 Karanggede
Presentasi_Pembelajaran_Mendalam_Lengkap.pptx
Modul Ajar Deep Learning Biologi Kelas 10 SMA Terbaru 2025
PPT Resources Seminar AITalks: AI dan Konseling GPT
MATERI MPLS TENTANG KURIKULUM DAN KEGIATAN PEMBELAJARAN
KELOMPOK 4 LK Modul 4 KP4 Asesmen PM (3).pdf
Materi Seminar AITalks: AI dan Konseling GPT
5. Bahan Bacaan Asinkronus Modul 5_ Perencanaan Pembelajaran.pptx
Teknologi-Pangan-Pertemuan-820728132309-.ppt
Modul Ajar Pembelajaran Mendalam Senbud Seni Tari Kelas XII Terbaru 2025
Digital Statecraft Menuju Indonesia Emas 2045: Diplomasi Digital, Ketahanan N...
Ad

Pertemuan 11 (ASD_SD 2022)- Linked List.ppsx

  • 1. Linked List Tim Ajar Algoritma dan Struktur Data Genap 2021/2022
  • 2. Capaian Pembelajaran ● Mahasiswa memahami konsep linked list ● Mahasiswa memahami tahapan pembuatan linked list untuk menyelesaikan masalah
  • 3. Pengantar ● Konsep struktur data linked list mengatasi kelemahan dari struktur data array. ● Salah satu kekurangan ketika menggunakan data array sebagai penyimpanan data adalah sifatnya yang statis. ● Array akan memesan sejumlah memori sesuai pada saat deklarasi, walaupun slot memori tersebut belum terpakai untuk menyimpan data.
  • 4. Definisi ● Linked list : struktur data linier yang dibangun dari satu atau lebih node yang saling terhubung yang menempati alokasi memori secara dinamis. ● Node : tempat penyimpanan data yang terdiri dari dua bagian/field. ● Field 1 adalah Data, digunakan untuk menyimpan data/nilai. ● Field 2 adalah Pointer, untuk menyimpan alamat tertentu. ○ Pointer disebut juga sebagai link
  • 5. Definisi Linked Lists ● Jika linked list hanya berisi satu node maka pointernya akan menunjuk ke NULL. ● Jika linked list memiliki lebih dari satu node maka pointer menyimpan alamat dari node berikutnya. Sehingga antara node satu dengan node yang lain akan terhubung, kecuali node terakhir. ● Node terakhir pada linked list akan menunjuk null (nilai null merepresentasikan nilai tidak ada/nothing/unset reference). ● Awal dari struktur Linked List terdapat head. ● Akhir dari struktur Linked List merupakan tail Catatan: head bukanlah node yang terpisah, melainkan node yang menunjuk ke node pertama. Begitu pula dengan tail Jika Linked List kosong, maka head dan tail akan merujuk ke null.
  • 7. Array VS Linked List ARRAY LINKED LIST Statis Dinamis Penambahan/ Penghapusan data terbatas Penambahan/ Penghapusan data tidak terbatas Random Access Sequential access Memiliki tipe data yang homogen Node terhubung melalui pointer ke node berikutnya. Sehingga tidak harus memiliki tipe data yang homogen
  • 8. Array VS Linked List ● Menyimpan koleksi elemen secara non-contiguously. ○ Elemen dapat terletak pada lokasi memory yang saling berjauhan. Bandingkan dengan array dimana tiap-tiap elemen akan terletak pada lokasi memory yang berurutan. a b c d e c a e d b Array representation Linked list representation
  • 9. Array VS Linked List ● Mengizinkan operasi penambahan atau penghapusan elemen ditengah-tengah koleksi dengan hanya membutuhkan jumlah perpindahan elemen yang konstan. ○ Bandingkan dengan array. Berapa banyak elemen yang harus dipindahkan bila akan menyisipi elemen ditengah-tengah array?
  • 10. Kelebihan & Kekurangan Linked Lists ● Kelebihan: Struktur data yang dinamis, jumlah node dapat bertambah sesuai kebutuhan data. ● Kekurangan: Struktur data ini tidak dapat mengakses data berdasarkan index. Jika dibutuhkan pendekatan seperti ini, maka perlu dilakukan proses dari head dan mengikuti penunjuk next sampai didapatkan data/index yang diinginkan.
  • 11. Jenis-jenis Linked Lists ● Single Linked List: Memiliki penunjuk ke node berikutnya (next) ● Double Linked List: mempunyai dua penunjuk, yaitu next dan prev ● Circular linked list
  • 12. Gambaran Struktur Node null Link atau pointer data null null Single linked-list Double linked-list
  • 13. Konsep Single Linked Lists ● Linked List merupakan struktur data dinamis. ● Jumlah node dapat bertambah sesuai dengan kebutuhan. ● Program yang tidak diketahui jumlah datanya, sebaiknya menggunakan struktur data Linked List. ● Gambar berikut menunjukkan ilustrasi single linked lists.
  • 14. Konsep Single Linked Lists ● Single :pointer-nya hanya satu buah dan satu arah, yaitu menunjuk ke node sesudahnya. ● Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list. ● Linked List tidak menggunakan memory cell secara berderet (row). Tetapi, ia memanfaatkan memory secara acak. ● Lalu bagaimana komputer mengetahui bahwa node itu merupakan satu linked lists yang sama ? ○ Kuncinya adalah data yang disimpan ke dalam node, setiap node juga menyimpan memory address untuk node berikutnya dalam satu linked list.
  • 15. Ilustrasi Single Linked List ● Ilustrasi single linked list pada memory : ● Karena node tidak ditunjuk oleh node manapun maka node ini adalah node yang paling depan (node kepala). Kepala c a e d b
  • 16. Ilustrasi Single Linked List ● Ilustrasi single linked list pada memory : ● Node e tidak menunjuk ke node manapun sehingga pointer dari node e adalah NULL. Dapat disimpulkan bahwa node ini adalah node yang paling belakang (node ekor). c a e d b Ekor
  • 17. Contoh : “Single” Representation Penjelasan: ● Pembuatan class bernama Node yang berisi 2 field/variabel, yaitu data bertipe String dan pointer yang bertipe class Node ● Field data : digunakan untuk menyimpan data/nilai pada linked list. Field pointer : digunakan untuk menyimpan alamat node berikutnya. class Node { String data; Node pointer; } pointer data Ilustrasi :
  • 18. Implementasi Linked Lists (Node) ● Untuk merepresentasikan elemen data, diperlukan Node. Implementasi dalam bahasa Java sebagai berikut: ● Terdapat dua atribut utama pada node yaitu data dan penunjuk next yang menghubungkan dengan data berikutnya.
  • 19. Implementasi Linked Lists (Node) Menggunakan Tipe Data Generic ● Untuk penyimpanan tipe data yang lebih fleksibel, dapat menggunakan konsep generic. Perhatikan contoh kode program berikut ini. ● Node bisa menerima berbagai tipe data: Integer, Float, String, Boolean
  • 20. Pointer Head ● Untuk mengingat node yg paling depan (node kepala) digunakan sebuah pointer yang akan menyimpan alamat dari node depan. ● Pointer ini biasanya diberi nama head. head head
  • 21. Pointer Tail ● Untuk mengingat node yg paling belakang (node ekor) digunakan sebuah pointer yang akan menyimpan alamat dari node belakang. ● Pointer ini biasanya diberi nama tail. tail tail
  • 22. Contoh ● Linked list yang memiliki 4 node : A0 A1 A2 A3 head tail
  • 24. Operasi pada Linked Lists ● isEmpty: mengecek apakah head = null (kosong). ● Print: menampilkan seluruh elemen pada Linked Lists. ● Operasi penambahan node ○ Di awal ○ Di akhir ○ Setelah node tertentu ● Operasi menghapus node ○ Di awal ○ Di akhir ○ Di lokasi tertentu ● Operasi Linked List dengan Index ○ Pengaksesan data node ○ Pengaksesan index node ○ Penambahan data ○ Penghapusan data
  • 25. Operasi isEmpty() ● Digunakan untuk mengetahui linked dalam kondisi kosong. ● Kondisi kosong : jika head=tail=null. boolean isEmpty() { return head==null; }
  • 26. Proses Traverse pada Linked List ● Proses melakukan kunjungan pada setiap node tepat satu kali. Dengan melakukan kunjungan secara lengkap, maka akan didapatkan urutan informasi secara linier yang tersimpan dalam Linked List. ● Proses ini dilakukan pada operasi cetak data, penambahan data di akhir Linked Lists dan pengaksesan Linked List menggunakan index ● Proses ini dimulai dari awal data (head) sampai menjumpai null. Proses ini tidak merubah referensi dari head.
  • 27. Operasi print() ● Untuk mencetak data seluruh node mulai dari yang paling depan(head) hingga tail public void print() { if (!isEmpty()) { Node tmp = head; while (tmp != null) { System.out.print(tmp.data + "t"); tmp = tmp.next; } } else { System.out.println("Linked list kosong"); } }
  • 28. Operasi Penambahan ● Penambahan dari depan (AddFirst) ● Penambahan di belakang (AddLast) ● Penambahan setelah key tertentu (InsertAfter)
  • 29. Penambahan dari Depan(addFirst) ● Jika kondisi awal node kosong maka head dan tail akan sama-sama menunjuk ke node input. ● Jika pada linked list telah ada node, maka: ○ Next pada node input menunjuk node yang ditunjuk oleh head ○ Kemudian head akan menunjuk ke node input 1 2 1 2
  • 30. Ilustrasi : addFirst(x)  Menambahkan X pada lokasi paling depan. a b c d head x b head c d a x Kondisi awal pada linked list : Setelah penambahan node x didepan: Node input
  • 31. Operasi Linked Lists: AddFirst void addFirst(Node input){ if (isEmpty()){ head=input; tail=input; } else { input.next = head; head = input; } }
  • 32. Penambahan dari Belakang (addLast) ● Operasi untuk menambah node di akhir elemen Linked Lists. ● Jika kondisi awal node kosong maka head dan tail akan sama-sama menunjuk ke node input. ● Jika pada linked list telah ada node, maka: ○ Next pada node yang ditunjuk oleh tail menunjuk ke node input ○ kemudian tail akan menunjuk ke node input
  • 33. Ilustrasi : addLast(x) ● menambahkan X pada akhir list : a b c tail d x a b c d tail x Node input Kondisi awal pada linked list : Setelah penambahan node x dibelakang :
  • 34. Operasi Linked Lists: addLast void addLast(Node input){ if (isEmpty()){ head = input; tail = input; } else { tail.pointer = input; tail = input; } }
  • 35. Penambahan setelah Node tertentu(insertAfter) ● Dilakukan pencarian node yang memiliki data yang sama dengan key. ● Kemudian dilakukan penambahan node setelah node yang memiliki data sama dengan key ● Contoh di bawah ini merupakan penambahan setelah key E : insertAfter(E) key
  • 36. a Ilustrasi : Insert After(a) ● Kondisi Awal  Menyisipkan X pada lokasi setelah key. a b c d key b x Key c d x
  • 37. Operasi Linked Lists: insertAfter public void insertAfter(Object key,Node input){ Node temp = head; do{ if(temp.data==key){ input.next = temp. next; temp. next = input; System.out.println("Insert data is succeed."); break; } temp = temp. next; }while (temp!=null); }
  • 38. Operasi Penghapusan Dibedakan menjadi : ● Hapus node depan (removeFirst) ● Hapus node belakang (removeLast) ● Hapus node tertentu (remove)
  • 39. Linked Lists: menghapus elemen X ● Proses menghapus dilakukan dengan mengabaikan elemen yang hendak dihapus dengan cara melewati pointer (reference) dari elemen tersebut langsung pada elemen selanjutnya. ● Elemen x dihapus dengan meng-assign field next pada elemen a dengan alamat b a b x key a b key a b x key Hasil akhir : Kondisi awal :
  • 40. Langkah-langkah menghapus elemen ● Tidak ada elemen lain yang menyimpan alamat node x. ● Node x tidak bisa diakses lagi. ● Java Garbage Collector akan membersihkan alokasi memory yang tidak dipakai lagi atau tidak bisa diakses. ● Dengan kata lain, menghapus node x. a b x temp
  • 41. Operasi Linked Lists: Remove/Delete Ketika proses penghapusan perlu diperhatikan juga beberapa kondisi tambahan dari data Linked Lists, yaitu: ● Linked List kosong, maka tidak dapat dilakukan penghapusan; ● Penghapusan node yang merupakan head, maka head harus menunjuk ke node berikutnya; ● Node yang ingin dihapus harus ada dalam Linked List.
  • 42. Hapus node depan public void removeFirst(){ if(isEmpty()) System.out.println("Linked List masih Kosong!"); else if(head==tail){ head = tail = null; } else{ head = head.next; } }
  • 43. Hapus node belakang public void removeLast() { if(isEmpty()) System.out.println("Linked List masih Kosong!"); else if(head==tail){ head = tail = null; } else{ Node current = head; while(current.next != tail){ current = current.next; } current.next = null; tail=current; } }
  • 44. Hapus node tertentu public void remove(int key){ if(isEmpty()) System.out.println("Linked List masih Kosong, tidak dapat dihapus!"); else{ Node temp = head; while (temp != null){ if ((temp.data == key)&&(temp == head)){ this.removeFirst(); break; } else if (temp.next.data == key){ temp.next = temp.next.next; if(temp.next == null) tail=temp; break; } temp = temp.next; } } }
  • 45. Operasi Linked List dengan Index ● Pengaksesan data node ● Pengaksesan index node ● Penambahan data ● Penghapusan data
  • 46. Pengaksesan data node: getData(int index) public int getData(int index) { Node tmp = head; for (int i = 0; i < index; i++) tmp = tmp.next; return tmp.data; }
  • 47. Operasi pencarian indeks data pada node : indexOf(key) public int indexOf(int key) { Node tmp = head; int index = 0; while (tmp != null && tmp.data != key) { tmp = tmp.next; index++; } if (tmp == null) { return -1; } else { return index; } }
  • 48. Method remove(int index) public void removeAt(int index) { if (index == 0) { removeFirst(); } else { Node temp = head; for (int i = 0; i < index - 1; i++) { temp = temp.next; } temp.next = temp.next.next; if (temp.next == null) { tail = temp; } } }
  • 49. Method add(int index,Object theElement) public void insertAt(int index, int input) { if (index < 0) { System.out.println("indeks salah"); } else if (index == 0) { addFirst(input); } else { Node temp = head; for (int i = 0; i < index - 1; i++) { temp = temp.next; } temp.next = new Node(input, temp.next); } }
  • 50. Latihan Jelaskan Langkah-langkah dari 4 node berikut dengan kondisi awal linked list kosong: 1. Tambahkan node baru dengan data 500 dari belakang. 2. Tambahkan node baru dengan data 50 dari depan. 3. Tambahkan node dengan data 250 setelah node 200. 4. Tambahkan node dengan data 150 pada indeks ke-1 5. Hapus node depan 6. hapus node belakang 7. hapus node yg memiliki data 300. 8. Hapus node pada indeks ke-3 *Tampilkan semua data dari seluruh node pada linked list untuk setiap penambahan/penghapusan 100 200 300 400

Editor's Notes

  • #8: con•tig•u•ous adj. 1 in physical contact; touching along all or most of one side 2 near, next, or adjacent SYN. adjacent