際際滷

際際滷Share a Scribd company logo
STRUKTUR DATA (6) single linked list non circular Oleh   Antonius Rachmat C, S.Kom
History of Linked List Dikembangkan tahun 1955-1956 oleh  Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa Information Processing Language (IPL).  IPL dibuat untuk mengembangkan program  artificial intelligence , seperti pembuatan Chess Solver.  Victor Yngve di Massachusetts Institute of Technology (MIT) juga menggunakan linked list pada natural language processing dan machine transitions pada bahasa pemrograman COMMIT.
Linked List Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang  tersusun  secara sekuensial,  saling sambung-menyambung, dinamis  dan  terbatas . Linked List sering disebut juga Senarai Berantai Linked List saling terhubung dengan bantuan variabel pointer Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.
Array VS Linked List
Bentuk Node Single Linked List non Circular Pengertian: Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir node, pointernya menunjuk NULL Linked List : artinya node-node tersebut saling terhubung satu sama lain. Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.
Pembuatan Single Linked List  non Circular (1) Deklarasi Node typedef struct TNode{ int data; TNode *next; }; Penjelasan : Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan field  next  yang bertipe pointer dari TNode Setelah pembuatan struct, buat variabel head yang bertipe pointer dari TNode yang berguna sebagai kepala linked list.
Pembuatan Single Linked List non Circular (2) Digunakan keyword  new  yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya ditunjuk ke NULL. TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL;
Cara lain alokasi pointer Menggunakan alokasi memori secara manual Menggunakan header  stdlib.h  atau  malloc.h Menggunakan fungsi: <pointer type>  * malloc(int size);
油
SLLNC MENGGUNAKAN HEAD   Dibutuhkan satu buah variabel pointer:  head Head akan selalu menunjuk pada  node pertama Deklarasi Pointer Penunjuk Kepala Single Linked List Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus menggunakan suatu pointer penunjuk ke node pertama dalam linked list (dalam hal ini adalah head).  Deklarasinya sebagai berikut: TNode *head;
SLLNC menggunakan Head Fungsi Inisialisasi Single LinkedList void init(){ head = NULL; } Function untuk mengetahui kosong tidaknya Single  LinkedList Jika pointer head tidak menunjuk pada suatu node maka kosong int isEmpty(){ if(head == NULL) return 1; else return 0; }
SLLNC dengan HEAD Penambahan data di depan Penambahan node baru akan dikaitan di node  paling depan,  namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara: node head ditunjukkan ke node baru tersebut. Pada prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan.
SLLNC dengan HEAD void insertDepan(int databaru){   TNode *baru;   baru = new TNode;   baru->data = databaru;   baru->next = NULL;   if(isEmpty()==1){   head=baru;   head->next = NULL;   }   else { baru->next = head; head = baru;   }   printf(Data masuk\n); }
SLLNC dengan HEAD
SLLNC dengan Head Penambahan data di belakang Penambahan data dilakukan  di belakang , namun pada saat pertama kali, node langsung ditunjuk oleh head. Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui node terbelakang, kemudian setelah itu, dikaitkan dengan node baru.  Untuk mengetahui data terbelakang perlu digunakan perulangan.
SLLNC dengan HEAD void insertBelakang (int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; } else { bantu=head; while(bantu->next!=NULL){   bantu=bantu->next; } bantu->next = baru; } printf(&quot;Data masuk\n); }
SLLNC dengan HEAD
SLLNC dengan HEAD  Bagaimana dengan penambahan di tengah?
SLLNC dengan HEAD void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ cout<<bantu->data<<&quot; &quot;; bantu=bantu->next; } printf(\n); } else printf(Masih kosong\n); }
SLLNC dengan HEAD Function di atas digunakan untuk menampilkan semua isi list, di mana linked list ditelusuri satu-persatu dari awal node sampai akhir node.  Penelusuran ini dilakukan dengan menggunakan suatu pointer bantu, karena pada prinsipnya pointer head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. Penelusuran dilakukan terus sampai node terakhir ditemukan menunjuk ke nilai NULL.  Jika tidak NULL, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait. Jika head masih NULL berarti data masih kosong!
SLLNC dengan HEAD Function untuk menghapus data terdepan void hapusDepan (){ TNode *hapus; int d; if (isEmpty()==0){   if(head->next != NULL){ hapus = head; d = hapus->data; head = head->next; delete hapus;   } else { d = head->data; head = NULL;   }   printf(%d terhapus\n,d); } else cout<<&quot;Masih kosong\n&quot;; }
SLLNC dengan HEAD Function di atas akan menghapus data  teratas (pertama)  yang ditunjuk oleh head pada linked list Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunakan suatu pointer lain yang digunakan untuk menunjuk node yang akan dihapus, misalnya pointer hapus dan barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete. Sebelum data terdepan dihapus, head harus ditunjukkan ke node sesudahnya terlebih dahulu agar list tidak putus, sehingga node setelah head lama akan menjadi head baru (data terdepan yang baru). Jika head masih NULL maka berarti data masih kosong!
SLLNC dengan HEAD Hapus Belakang void hapusBelakang(){ TNode *hapus,*bantu; int d; if (isEmpty()==0){   if(head->next != NULL){ bantu = head; while(bantu->next->next!=NULL){     bantu = bantu->next; } hapus = bantu->next; d = hapus->data; bantu->next = NULL; delete hapus;   } else { d = head->data; head = NULL;   }   printf(%d terhapus\n,d); } else printf(Masih kosong\n); }
SLLNC dengan HEAD Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus, dan pointer bantu digunakan untuk menunjuk node sebelum node yang dihapus yang kemudian selanjutnya akan menjadi node terakhir. Pointer bantu akan digunakan untuk menunjuk ke nilai NULL. Pointer bantu akan selalu bergerak sampai sebelum node yang akan dihapus, baru kemudian pointer hapus diletakkan setelah pointer bantu.  Setelah itu pointer hapus akan dihapus, pointe bantu akan menunjuk ke NULL.
SLLNC dengan HEAD
SLLNC dengan HEAD Function untuk menghapus semua elemen Linked List void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; }
SLLNC dengan HEAD & TAIL Dibutuhkan dua buah variabel pointer:  head  dan  tail Head akan selalu menunjuk pada node  pertama , sedangkan tail akan selalu menunjuk pada node  terakhir .
SLLNC dengan HEAD & TAIL Inisialisasi LinkedList TNode *head, *tail; Fungsi Inisialisasi LinkedList void  init(){ head = NULL; tail = NULL; } Function untuk mengetahui kosong tidaknya LinkedList int  isEmpty(){ if(tail == NULL) return 1; else return 0; }
SLLNC dengan HEAD & TAIL Pengkaitan node baru ke linked list di depan Penambahan data baru di depan akan selalu menjadi head. void insertDepan(int databaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=tail=baru; tail->next=NULL; } else { baru->next = head; head = baru; } printf(Data masuk\n); }
SLLNC dengan HEAD & TAIL
SLLNC dengan HEAD & TAIL Penambahan Data di belakang void tambahBelakang(int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){   head=baru;   tail=baru;   tail->next = NULL; } else { tail->next = baru; tail=baru; }  printf(&quot;Data masuk\n); }
SLLNC dengan HEAD & TAIL
SLLNC dengan HEAD & TAIL Kelebihan dari Single Linked List dengan Head & Tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu. Function untuk menampilkan isi linked list: void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ printf(%d\n,bantu->data); bantu=bantu->next; } printf(\n); } else printf(Masih kosong\n); }
SLLNC dengan HEAD & TAIL Function untuk menghapus data di depan void  hapusDepan(){ TNode *hapus; int d; if (isEmpty()==0){ if(head!=tail){   hapus = head;   d = hapus->data;   head = head->next;   delete hapus; } else {   d = tail->data;   head=tail=NULL; } printf(%d terhapus\n,d); } else printf(&quot;Masih kosong\n); }
SLLNC dengan HEAD & TAIL Function di atas akan menghapus data  terdepan (pertama)  yang ditunjuk oleh head pada linked list Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan pointer hapus pada head, kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi head baru,  kemudian menghapus pointer hapus dengan menggunakan perintah delete. Jika tail masih NULL maka berarti list masih kosong!
SLLNC dengan HEAD & TAIL Function untuk menghapus data di belakang: void  hapusBelakang(){ TNode *bantu,*hapus; int d; if (isEmpty()==0){ bantu = head; if(head!=tail){ while(bantu->next!=tail){ bantu = bantu->next; } hapus = tail; tail=bantu; d = hapus->data; delete hapus; tail->next = NULL; }else { d = tail->data; head=tail=NULL; } cout<<d<<&quot; terhapus\n&quot;; } else cout<<&quot;Masih kosong\n&quot;; }
SLLNC dengan HEAD & TAIL
SLLNC dengan HEAD & TAIL Function di atas akan menghapus data  terbelakang (terakhir)  yang ditunjuk oleh tail pada linked list Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada tail, kemudian dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu tersebut, dan bantu tersebut akan menjadi tail yang baru.  Setelah itu hapus pointer hapus dengan menggunakan perintah delete. Jika tail masih NULL maka berarti list masih kosong!
SLLNC dengan HEAD & TAIL Function untuk menghapus semua elemen LinkedList void  clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; tail = NULL; }
NEXT  SOAL LATIHAN Buatlah program lengkap dari semua algoritma dan function di atas dalam bentuk menu untuk menambah data, melihat data, dan menghapus data! Buatlah function tambahan yang berguna untuk mencari data yang ada dalam linked list baik secara ber-Head maupun ber-Head dan Tail! Buatlah function untuk menghapus data tertentu dalam linked list! Buatlah penyisipan node setelah atau sebelum data tertentu. NEXT Single Linked List Circular (SLLC) dengan head & tail

More Related Content

What's hot (20)

Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3
azmi007
Tugas kelompok mi d3_sore
Tugas kelompok mi d3_soreTugas kelompok mi d3_sore
Tugas kelompok mi d3_sore
tio_arkarna
Modul 2
Modul 2Modul 2
Modul 2
Vincentius Kristanto
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_list
Wandi Parlente
Modul 3 strukdat
Modul 3 strukdatModul 3 strukdat
Modul 3 strukdat
Vincentius Kristanto
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTOPOWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
Amalia Puspita Sari
Linked list
Linked listLinked list
Linked list
Tenia Wahyuningrum
Linked list
Linked listLinked list
Linked list
Rista Fuji
Circular linked list
Circular linked listCircular linked list
Circular linked list
Laxer Pratama
Pertemuan 1 revisijan2013-mhs
Pertemuan 1 revisijan2013-mhsPertemuan 1 revisijan2013-mhs
Pertemuan 1 revisijan2013-mhs
Bina Sarana Informatika
Struktur data
Struktur dataStruktur data
Struktur data
yusriren20
Double linked list
Double linked listDouble linked list
Double linked list
Materi Kuliah Online
Dasar matlab
Dasar matlabDasar matlab
Dasar matlab
dedidarwis
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circular
Hitesh Wagle
Algoritma dan Struktur Data (Python) - Struktur Data
Algoritma dan Struktur Data (Python) - Struktur DataAlgoritma dan Struktur Data (Python) - Struktur Data
Algoritma dan Struktur Data (Python) - Struktur Data
AndiNurkholis1
Modul Praktikum Mic Excel 1 2
Modul Praktikum Mic Excel 1 2Modul Praktikum Mic Excel 1 2
Modul Praktikum Mic Excel 1 2
mtr2009
Linked List
Linked ListLinked List
Linked List
said zulhelmi
Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3
azmi007
Tugas kelompok mi d3_sore
Tugas kelompok mi d3_soreTugas kelompok mi d3_sore
Tugas kelompok mi d3_sore
tio_arkarna
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_list
Wandi Parlente
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTOPOWER POINT STRUKTUR DATA AMIK  BSI PURWOKERTO
POWER POINT STRUKTUR DATA AMIK BSI PURWOKERTO
Amalia Puspita Sari
Linked list
Linked listLinked list
Linked list
Rista Fuji
Circular linked list
Circular linked listCircular linked list
Circular linked list
Laxer Pratama
Struktur data
Struktur dataStruktur data
Struktur data
yusriren20
Dasar matlab
Dasar matlabDasar matlab
Dasar matlab
dedidarwis
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circular
Hitesh Wagle
Algoritma dan Struktur Data (Python) - Struktur Data
Algoritma dan Struktur Data (Python) - Struktur DataAlgoritma dan Struktur Data (Python) - Struktur Data
Algoritma dan Struktur Data (Python) - Struktur Data
AndiNurkholis1
Modul Praktikum Mic Excel 1 2
Modul Praktikum Mic Excel 1 2Modul Praktikum Mic Excel 1 2
Modul Praktikum Mic Excel 1 2
mtr2009

Similar to Tistrukdat6 (20)

SINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxSINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptx
legiafatah
Bab 7 double_linked_list
Bab 7 double_linked_listBab 7 double_linked_list
Bab 7 double_linked_list
arii_manroe
Pertemuan 3.pptx
Pertemuan 3.pptxPertemuan 3.pptx
Pertemuan 3.pptx
jonamanalu
Resume praktikum 5__linked_list
Resume praktikum 5__linked_listResume praktikum 5__linked_list
Resume praktikum 5__linked_list
Deprilana Ego Prakasa
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
Irsyad Casanova
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
Irsyad Casanova
DOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docxDOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docx
Subandi Wahyudi
Single Linked List - Insert .pptx
Single Linked List - Insert .pptxSingle Linked List - Insert .pptx
Single Linked List - Insert .pptx
Umi Sa'adah
Pemahaman dasar tentang Struktur Data Linked List dan Algoritmanya
Pemahaman dasar tentang Struktur Data Linked List dan AlgoritmanyaPemahaman dasar tentang Struktur Data Linked List dan Algoritmanya
Pemahaman dasar tentang Struktur Data Linked List dan Algoritmanya
MuhammadRaihanXIMIPA
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sort
Yunan Helmi Nasution
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docxMAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
Dikicandra6
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docxMAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
Dikicandra6
3 Linked List
3   Linked List3   Linked List
3 Linked List
ahmad haidaroh
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
Noval C. Kesuma
MAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docxMAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docx
Dikicandra6
IMPLEMENTASI STACK MENGGUNAKAN LINKED LIST (1) (1).pptx
IMPLEMENTASI STACK MENGGUNAKAN LINKED LIST (1) (1).pptxIMPLEMENTASI STACK MENGGUNAKAN LINKED LIST (1) (1).pptx
IMPLEMENTASI STACK MENGGUNAKAN LINKED LIST (1) (1).pptx
41522010020
Sd bab 8a (senarai)
Sd bab 8a (senarai)Sd bab 8a (senarai)
Sd bab 8a (senarai)
Nm Aditya Danger
Senarai berantai
Senarai berantaiSenarai berantai
Senarai berantai
Dina Putri
Struktur data
Struktur dataStruktur data
Struktur data
yusriren20
SINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxSINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptx
legiafatah
Bab 7 double_linked_list
Bab 7 double_linked_listBab 7 double_linked_list
Bab 7 double_linked_list
arii_manroe
Pertemuan 3.pptx
Pertemuan 3.pptxPertemuan 3.pptx
Pertemuan 3.pptx
jonamanalu
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
Irsyad Casanova
Persentasi linked list
Persentasi linked listPersentasi linked list
Persentasi linked list
Irsyad Casanova
DOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docxDOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docx
Subandi Wahyudi
Single Linked List - Insert .pptx
Single Linked List - Insert .pptxSingle Linked List - Insert .pptx
Single Linked List - Insert .pptx
Umi Sa'adah
Pemahaman dasar tentang Struktur Data Linked List dan Algoritmanya
Pemahaman dasar tentang Struktur Data Linked List dan AlgoritmanyaPemahaman dasar tentang Struktur Data Linked List dan Algoritmanya
Pemahaman dasar tentang Struktur Data Linked List dan Algoritmanya
MuhammadRaihanXIMIPA
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sort
Yunan Helmi Nasution
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docxMAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
MAKALAH SINGLE LINKED LIST DALAM BAHASA.docx
Dikicandra6
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docxMAKALAH DOUBLE LINKED LIST BAHASA C.docx
MAKALAH DOUBLE LINKED LIST BAHASA C.docx
Dikicandra6
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
Noval C. Kesuma
MAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docxMAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docx
Dikicandra6
IMPLEMENTASI STACK MENGGUNAKAN LINKED LIST (1) (1).pptx
IMPLEMENTASI STACK MENGGUNAKAN LINKED LIST (1) (1).pptxIMPLEMENTASI STACK MENGGUNAKAN LINKED LIST (1) (1).pptx
IMPLEMENTASI STACK MENGGUNAKAN LINKED LIST (1) (1).pptx
41522010020
Senarai berantai
Senarai berantaiSenarai berantai
Senarai berantai
Dina Putri
Struktur data
Struktur dataStruktur data
Struktur data
yusriren20

More from Antonius Rachmat C (6)

Tistrukdat9
Tistrukdat9Tistrukdat9
Tistrukdat9
Antonius Rachmat C

Tistrukdat6

  • 1. STRUKTUR DATA (6) single linked list non circular Oleh Antonius Rachmat C, S.Kom
  • 2. History of Linked List Dikembangkan tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa Information Processing Language (IPL). IPL dibuat untuk mengembangkan program artificial intelligence , seperti pembuatan Chess Solver. Victor Yngve di Massachusetts Institute of Technology (MIT) juga menggunakan linked list pada natural language processing dan machine transitions pada bahasa pemrograman COMMIT.
  • 3. Linked List Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung-menyambung, dinamis dan terbatas . Linked List sering disebut juga Senarai Berantai Linked List saling terhubung dengan bantuan variabel pointer Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.
  • 5. Bentuk Node Single Linked List non Circular Pengertian: Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir node, pointernya menunjuk NULL Linked List : artinya node-node tersebut saling terhubung satu sama lain. Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.
  • 6. Pembuatan Single Linked List non Circular (1) Deklarasi Node typedef struct TNode{ int data; TNode *next; }; Penjelasan : Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan field next yang bertipe pointer dari TNode Setelah pembuatan struct, buat variabel head yang bertipe pointer dari TNode yang berguna sebagai kepala linked list.
  • 7. Pembuatan Single Linked List non Circular (2) Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya ditunjuk ke NULL. TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL;
  • 8. Cara lain alokasi pointer Menggunakan alokasi memori secara manual Menggunakan header stdlib.h atau malloc.h Menggunakan fungsi: <pointer type> * malloc(int size);
  • 9.
  • 10. SLLNC MENGGUNAKAN HEAD Dibutuhkan satu buah variabel pointer: head Head akan selalu menunjuk pada node pertama Deklarasi Pointer Penunjuk Kepala Single Linked List Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus menggunakan suatu pointer penunjuk ke node pertama dalam linked list (dalam hal ini adalah head). Deklarasinya sebagai berikut: TNode *head;
  • 11. SLLNC menggunakan Head Fungsi Inisialisasi Single LinkedList void init(){ head = NULL; } Function untuk mengetahui kosong tidaknya Single LinkedList Jika pointer head tidak menunjuk pada suatu node maka kosong int isEmpty(){ if(head == NULL) return 1; else return 0; }
  • 12. SLLNC dengan HEAD Penambahan data di depan Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara: node head ditunjukkan ke node baru tersebut. Pada prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan.
  • 13. SLLNC dengan HEAD void insertDepan(int databaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; } else { baru->next = head; head = baru; } printf(Data masuk\n); }
  • 15. SLLNC dengan Head Penambahan data di belakang Penambahan data dilakukan di belakang , namun pada saat pertama kali, node langsung ditunjuk oleh head. Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui node terbelakang, kemudian setelah itu, dikaitkan dengan node baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.
  • 16. SLLNC dengan HEAD void insertBelakang (int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; } else { bantu=head; while(bantu->next!=NULL){ bantu=bantu->next; } bantu->next = baru; } printf(&quot;Data masuk\n); }
  • 18. SLLNC dengan HEAD Bagaimana dengan penambahan di tengah?
  • 19. SLLNC dengan HEAD void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ cout<<bantu->data<<&quot; &quot;; bantu=bantu->next; } printf(\n); } else printf(Masih kosong\n); }
  • 20. SLLNC dengan HEAD Function di atas digunakan untuk menampilkan semua isi list, di mana linked list ditelusuri satu-persatu dari awal node sampai akhir node. Penelusuran ini dilakukan dengan menggunakan suatu pointer bantu, karena pada prinsipnya pointer head yang menjadi tanda awal list tidak boleh berubah/berganti posisi. Penelusuran dilakukan terus sampai node terakhir ditemukan menunjuk ke nilai NULL. Jika tidak NULL, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait. Jika head masih NULL berarti data masih kosong!
  • 21. SLLNC dengan HEAD Function untuk menghapus data terdepan void hapusDepan (){ TNode *hapus; int d; if (isEmpty()==0){ if(head->next != NULL){ hapus = head; d = hapus->data; head = head->next; delete hapus; } else { d = head->data; head = NULL; } printf(%d terhapus\n,d); } else cout<<&quot;Masih kosong\n&quot;; }
  • 22. SLLNC dengan HEAD Function di atas akan menghapus data teratas (pertama) yang ditunjuk oleh head pada linked list Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunakan suatu pointer lain yang digunakan untuk menunjuk node yang akan dihapus, misalnya pointer hapus dan barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete. Sebelum data terdepan dihapus, head harus ditunjukkan ke node sesudahnya terlebih dahulu agar list tidak putus, sehingga node setelah head lama akan menjadi head baru (data terdepan yang baru). Jika head masih NULL maka berarti data masih kosong!
  • 23. SLLNC dengan HEAD Hapus Belakang void hapusBelakang(){ TNode *hapus,*bantu; int d; if (isEmpty()==0){ if(head->next != NULL){ bantu = head; while(bantu->next->next!=NULL){ bantu = bantu->next; } hapus = bantu->next; d = hapus->data; bantu->next = NULL; delete hapus; } else { d = head->data; head = NULL; } printf(%d terhapus\n,d); } else printf(Masih kosong\n); }
  • 24. SLLNC dengan HEAD Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus, dan pointer bantu digunakan untuk menunjuk node sebelum node yang dihapus yang kemudian selanjutnya akan menjadi node terakhir. Pointer bantu akan digunakan untuk menunjuk ke nilai NULL. Pointer bantu akan selalu bergerak sampai sebelum node yang akan dihapus, baru kemudian pointer hapus diletakkan setelah pointer bantu. Setelah itu pointer hapus akan dihapus, pointe bantu akan menunjuk ke NULL.
  • 26. SLLNC dengan HEAD Function untuk menghapus semua elemen Linked List void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; }
  • 27. SLLNC dengan HEAD & TAIL Dibutuhkan dua buah variabel pointer: head dan tail Head akan selalu menunjuk pada node pertama , sedangkan tail akan selalu menunjuk pada node terakhir .
  • 28. SLLNC dengan HEAD & TAIL Inisialisasi LinkedList TNode *head, *tail; Fungsi Inisialisasi LinkedList void init(){ head = NULL; tail = NULL; } Function untuk mengetahui kosong tidaknya LinkedList int isEmpty(){ if(tail == NULL) return 1; else return 0; }
  • 29. SLLNC dengan HEAD & TAIL Pengkaitan node baru ke linked list di depan Penambahan data baru di depan akan selalu menjadi head. void insertDepan(int databaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=tail=baru; tail->next=NULL; } else { baru->next = head; head = baru; } printf(Data masuk\n); }
  • 31. SLLNC dengan HEAD & TAIL Penambahan Data di belakang void tambahBelakang(int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = NULL; if(isEmpty()==1){ head=baru; tail=baru; tail->next = NULL; } else { tail->next = baru; tail=baru; } printf(&quot;Data masuk\n); }
  • 33. SLLNC dengan HEAD & TAIL Kelebihan dari Single Linked List dengan Head & Tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu. Function untuk menampilkan isi linked list: void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ printf(%d\n,bantu->data); bantu=bantu->next; } printf(\n); } else printf(Masih kosong\n); }
  • 34. SLLNC dengan HEAD & TAIL Function untuk menghapus data di depan void hapusDepan(){ TNode *hapus; int d; if (isEmpty()==0){ if(head!=tail){ hapus = head; d = hapus->data; head = head->next; delete hapus; } else { d = tail->data; head=tail=NULL; } printf(%d terhapus\n,d); } else printf(&quot;Masih kosong\n); }
  • 35. SLLNC dengan HEAD & TAIL Function di atas akan menghapus data terdepan (pertama) yang ditunjuk oleh head pada linked list Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan pointer hapus pada head, kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus pointer hapus dengan menggunakan perintah delete. Jika tail masih NULL maka berarti list masih kosong!
  • 36. SLLNC dengan HEAD & TAIL Function untuk menghapus data di belakang: void hapusBelakang(){ TNode *bantu,*hapus; int d; if (isEmpty()==0){ bantu = head; if(head!=tail){ while(bantu->next!=tail){ bantu = bantu->next; } hapus = tail; tail=bantu; d = hapus->data; delete hapus; tail->next = NULL; }else { d = tail->data; head=tail=NULL; } cout<<d<<&quot; terhapus\n&quot;; } else cout<<&quot;Masih kosong\n&quot;; }
  • 38. SLLNC dengan HEAD & TAIL Function di atas akan menghapus data terbelakang (terakhir) yang ditunjuk oleh tail pada linked list Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada tail, kemudian dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu tersebut, dan bantu tersebut akan menjadi tail yang baru. Setelah itu hapus pointer hapus dengan menggunakan perintah delete. Jika tail masih NULL maka berarti list masih kosong!
  • 39. SLLNC dengan HEAD & TAIL Function untuk menghapus semua elemen LinkedList void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; tail = NULL; }
  • 40. NEXT SOAL LATIHAN Buatlah program lengkap dari semua algoritma dan function di atas dalam bentuk menu untuk menambah data, melihat data, dan menghapus data! Buatlah function tambahan yang berguna untuk mencari data yang ada dalam linked list baik secara ber-Head maupun ber-Head dan Tail! Buatlah function untuk menghapus data tertentu dalam linked list! Buatlah penyisipan node setelah atau sebelum data tertentu. NEXT Single Linked List Circular (SLLC) dengan head & tail