1 / 34

LINKED LIST

LINKED LIST. Double Linked List Circular.

elie
Télécharger la présentation

LINKED LIST

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LINKED LIST

  2. Double Linked List Circular • Double Linked List Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. • Double Linked List Circular pointer next dan prev nya menunjuk ke dirinya sendiri secara circular. • Pengertian: • Double: artinya field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next • Linked List: artinya node-node tersebut saling terhubung satu sama lain. • Circular: artinya pointer next dan prev-nya menunjuk ke dirinya sendiri

  3. Ilustrasi DLLC • Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya • Untukpembentukan node baru, mulanya pointer next danprevakanmenunjukkedirinyasendiri. • Jikasudahlebihdarisatu node, maka pointer prevakanmenunjukke node sebelumnya, dan pointer next akanmenunjukke node sesudahnya.

  4. Deklarasi dan node baru DLLC Deklarasi node • Dibuatdaristructberikutini: • typedefstructTNode{ • int data; • TNode *next; • TNode*prev; }; • Pembentukan node baru • Digunakan keyword new yang berartimempersiapkansebuah node barubersertaalokasimemorinya. • TNode *baru; • baru = new TNode; • baru->data = databaru; • baru->next = baru; • baru->prev = baru;

  5. DLLC dengan HEAD • Dibutuhkansatubuahvariabel pointer: head • Head akanselalumenunjukpada node pertama

  6. DLLNC dengan HEAD Deklarasi Pointer PenunjukKepala DLLC • Manipulasi linked list tidakbisadilakukanlangsungke node yang dituju, melainkanharusmelalui node pertamadalam linked list. Deklarasinyasebagaiberikut: • TNode *head; • FungsiInisialisasi Single LinkedList Circular • void init(){ • head = NULL; • }

  7. DLLC dengan HEAD Function untukmengetahuikosongtidaknya DLLC • intisEmpty(){ • if(head == NULL) return 1; • else return 0; • } Penambahan data didepan • Penambahan node baruakandikaitandi node paling depan, namunpadasaatpertama kali (data masihkosong), makapenambahan data dilakukanpada head nya. • Padaprinsipnyaadalahmengkaitkan data barudengan head, kemudian head akanmenunjukpada data barutersebutsehingga head akantetapselalumenjadi data terdepan. Untukmenghubungkan node terakhirdengan node terdepandibutuhkan pointer bantu.

  8. DLLC menggunakan Head voidinsertDepan(intdatabaru){ TNode *baru, *bantu; baru = new TNode; baru->data = databaru; baru->next = baru; baru->prev = baru; if(isEmpty()==1){ head=baru; head->next = head; head->prev = head; } else { bantu = head->prev; baru->next = head; head->prev = baru; head = baru; head->prev = bantu; bantu->next = head; } cout<<"Data masuk\n"; }

  9. DLLC dengan HEAD

  10. DLLC dengan HEAD Penambahan data dibelakang • Penambahan data dilakukandibelakang, namunpadasaatpertama kali data langsungditunjukpada head-nya. • Penambahandibelakanglebihsulitkarenakitamembutuhkan pointer bantu untukmengetahui data terbelakang, kemudiandikaitkandengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.

  11. DLLC dengan Head void insertBelakang (int databaru){ TNode *baru,*bantu; baru = new TNode; baru->data = databaru; baru->next = baru; baru->prev = baru; if(isEmpty()==1){ head=baru; head->next = head; head->prev = head; } else { bantu=head->prev; bantu->next = baru; baru->prev = bantu; baru->next = head; head->prev = baru; } cout<<"Data masuk\n"; }

  12. DLLC dengan HEAD

  13. DLLC dengan HEAD Function untukmenampilkanisi linked list void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ do{ cout<<bantu->data<<" "; bantu=bantu->next; }while(bantu!=head); cout<<endl; } else cout<<"Masihkosong\n"; }

  14. DLLC dgn HEAD voidhapusDepan (){ TNode *hapus,*bantu; int d; if (isEmpty()==0){ if(head->next != head){ hapus = head; d = hapus->data; bantu = head->prev; head = head->next; bantu->next = head; head->prev = bantu; delete hapus; } else { d = head->data; head = NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masihkosong\n"; }

  15. DLLC dengan HEAD Function untukmenghapus node terbelakang voidhapusBelakang(){ TNode *hapus,*bantu; int d; if (isEmpty()==0){ if(head->next != head){ bantu = head; while(bantu->next->next != head){ bantu = bantu->next; } hapus = bantu->next; d = hapus->data; bantu->next = head; delete hapus; } else { d = head->data; head = NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masihkosong\n"; }

  16. DLLC dengan HEAD • Diperlukan pointer bantu yang mengikuti pointer hapus yang bergunauntukmenunjukke node sebelumterakhir. • Kemudian pointer hapusditunjukkanke node setelah pointer bantu, kemudianhapus pointer hapusdenganperintah delete.

  17. DLLC dengan HEAD

  18. DLLC dengan HEAD Function untukmenghapussemuaelemen void clear(){ TNode *bantu,*hapus; if (isEmpty()==0){ bantu = head; while(bantu->next!=head){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; } }

  19. DLLC dengan HEAD dan TAIL • Dibutuhkanduabuahvariabel pointer: head dan tail • Head akanselalumenunjukpada node pertama, sedangkan tail akanselalumenunjukpada node terakhir.

  20. DLLC dengan HEAD dan TAIL Inisialisasi DLLNC • TNode *head, *tail; FungsiInisialisasi DLLNC • void init(){ • head = NULL; • tail = NULL; • } Function untukmengetahuikosongtidaknya DLLNC • intisEmpty(){ • if(tail == NULL) return 1; • else return 0; • }

  21. DLLC dengan HEAD dan TAIL voidinsertDepan (intdatabaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = baru; baru->prev = baru; if(isEmpty()==1){ head=baru; tail=baru; head->next = head; head->prev = head; tail->next = tail; tail->prev = tail; } else { baru->next = head; head->prev = baru; head = baru; head->prev = tail; tail->next = head; } cout<<"Data masuk\n"; }

  22. DLLC dengan HEAD dan TAIL

  23. DLLC dengan HEAD & TAIL Penambahan node dibelakang Penambahan node di belakang akan selalu dikaitkan dengan tail dan kemudian node baru tersebut akan menjadi tail voidinsertBelakang(intdatabaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = baru; baru->prev = baru; if(isEmpty()==1){ head=baru; tail=baru; head->next = head; head->prev = head; tail->next = tail; tail->prev = tail; } else { tail->next = baru; baru->prev = tail; tail = baru; tail->next = head; head->prev = tail; } cout<<"Data masuk\n"; }

  24. DLLC dengan HEAD & TAIL

  25. DLLC dengan HEAD & TAIL

  26. DLLC dengan HEAD & TAIL • Function untukmenampilkanisi linked list voidtampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ do{ cout<<bantu->data<<" "; bantu=bantu->next; }while(bantu!=tail->next); cout<<endl; } else cout<<"Masihkosong\n"; }

  27. DLLC dengan HEAD & TAIL Function untukmenghapus data di data terdepan void hapusDepan(){ TNode *hapus; int d; if (isEmpty()==0){ if(head != tail){ hapus = head; d = hapus->data; head = head->next; tail->next = head; head->prev = tail; delete hapus; } else { d = head->data; head = NULL; tail = NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masihkosong\n"; }

  28. DLLC dengan HEAD & TAIL

  29. DLLC dengan HEAD & TAIL Function untukmenghapus node terbelakang voidhapusBelakang(){ TNode *hapus; int d; if (isEmpty()==0){ if(head != tail){ hapus = tail; d = hapus->data; tail = tail->prev; tail->next = head; head->prev = tail; delete hapus; } else { d = head->data; head = NULL; tail = NULL; } cout<<d<<" terhapus\n"; } else cout<<"Masihkosong\n"; }

  30. DLLC dengan HEAD & TAIL • Pointer hapustidakperludi loop untukmencari node terakhir. Pointer hapushanyaperlumenunjukpada pointer tail saja. • Karena pointer hapussudahbisamenunjukke pointer sebelumnyadenganmenggunakanelemenprevke node sebelumnya. Kemudian pointer tail akanberpindahke node sebelumnya.

  31. DLLC dengan HEAD & TAIL

  32. DLLC dengan HEAD & TAIL • Function untukmenghapussemuaelemenLinkedList void clear(){ TNode *bantu,*hapus; if (isEmpty()==0){ bantu = head; while(bantu->next!=head){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; } }

  33. DLLNC dengan HEAD & TAIL • Menggunakan pointer bantu yang digunakanuntukbergeraksepanjang list, danmenggunakan pointer hapus yang digunakanuntukmenunjuk node-node yang akandihapus. • Padasaat pointer hapusmenunjukpada node yang akandihapus, pointer bantu akanbergerakke node selanjutnya, dankemudian pointer hapusakandidelete.

  34. SOAL-SOAL • Buatlah program lengkapdarisemuaalgoritmadan function diatasdalambentuk menu untukmenambah data, melihat data, danmenghapus data! • Buatlah function tambahan yang bergunauntukmencari data yang adadalam linked list baikdengan head maupun head & tail! • Buatlah function untukmenghapus data tertentudalam linked list! • Buatlah function untukmenampilkan data secaraterbalik!

More Related