1 / 26

Struktur Data ( Data Structure ) – IS 2313

Imam Rozali , S.T., M.T. Struktur Data ( Data Structure ) – IS 2313. Chapter 8 : Double L inked L ist C ircular. Double Linked List Circular.

kare
Download Presentation

Struktur Data ( Data Structure ) – IS 2313

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. Imam Rozali, S.T., M.T. Struktur Data(Data Structure) – IS 2313

  2. Chapter 8 : DoubleLinked ListCircular

  3. Double Linked List Circular • DLLC adalah Double Linked List yang memiliki 2 buah pointer yaitu pointer next dan prev. Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya. • Pengertian: • Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya. • Linked List : artinya node-node tersebut saling terhubung satu sama lain. • Circular : artinya pointer prev dan next-nya akan menunjuk dirinya sendiri sehingga berputar.

  4. IlustrasiDLLC • Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya • Untukpembentukan node baru, mulanya pointer next danprevakanmenunjukkenilaidirinya sendiri. • Selanjutnya pointer prevakanmenunjukke node sebelumnya, dan pointer next akanmenunjukke node selanjutnyapada list.

  5. 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;

  6. DLLC dengan HEAD • Dibutuhkan satu buah variabel pointer: head • Head akan selalu menunjuk pada node pertama

  7. DLLC dengan HEAD Deklarasi Pointer PenunjukKepala Double Linked List • Manipulasi linked list tidakbisadilakukanlangsungke node yang dituju, melainkanharusmelalui node pertamadalam linked list. Deklarasinyasebagaiberikut: • TNode *head; • FungsiInisialisasiDouble LinkedListCircular • void init(){ • head = NULL; • }

  8. DLLC dengan HEAD Function untukmengetahuikosongtidaknyaDLLC • 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.

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

  10. DLLC dengan HEAD Penambahan data di belakang • Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya. • Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.

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

  12. DLLC dengan HEAD Function untukmenampilkanisiDLLC • voidtampil(){ • TNode *bantu; • bantu = head; • if(isEmpty()==0){ • do{ • cout<<bantu->data<<" "; • bantu=bantu->next; • } while(bantu!=head); • cout<<endl; • } else cout<<"Masihkosong\n"; • }

  13. DLLC dgn HEAD • Bagaimanacaramembaca data list secaraterbalik? • Function untukmenghapus data didepan: • voidhapusDepan (){ • TNode *hapus; • int d; • if (isEmpty()==0){ • if(head->next != head){ • hapus = head; • d = hapus->data; • head = head->next; • head->prev = hapus->prev; • hapus->prev->next=head; • delete hapus; • } else { • d = head->data; • head = NULL; • } • cout<<d<<" terhapus\n"; • } else cout<<"Masihkosong\n"; • }

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

  15. DLLC dengan HEAD • Tidak diperlukan pointer bantu yang mengikuti pointer hapus yang berguna untuk menunjuk ke NULL • Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya dengan menggunakan elemen prev ke node sebelumnya, yang akan diset agar menunjuk ke NULL setelah penghapusan dilakukan.

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

  17. DLLC dengan HEAD dan TAIL • Dibutuhkan dua buah variabel pointer: head dan tail • Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu menunjuk pada node terakhir.

  18. DLLC dengan HEAD dan TAIL InisialisasiDLLC • TNode *head, *tail; FungsiInisialisasiDLLC • void init(){ • head = NULL; • tail = NULL; • } Function untukmengetahuikosongtidaknyaDLLC • intisEmpty(){ • if(tail == NULL) return 1; • else return 0; • }

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

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

  21. 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"; • }

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

  23. DLLC dengan HEAD & TAIL • Function untukmenghapus node terbelakang • voidhapusBelakang(){ • TNode *hapus; • int d; • if (isEmpty()==0){ • if(head->next != head){ • hapus = tail; • d = tail->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"; • }

  24. DLLC dengan HEAD & TAIL • Pointer hapustidakperludi loop untukmencari node terakhir. Pointer hapushanyaperlumenunjukpada pointer tail saja. • Karena pointer hapussudahbisamenunjukke pointer sebelumnyadenganmenggunakanelemenprev, maka pointer prevhanyaperludiset agar menunjukkehead. Lalu pointer hapusdidelete.

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

  26. DLLC dengan HEAD & TAIL • Menggunakan pointer bantu yang digunakan untuk bergerak sepanjang list, dan menggunakan pointer hapus yang digunakan untuk menunjuk node-node yang akan dihapus. • Pada saat pointer hapus menunjuk pada node yang akan dihapus, pointer bantu akan bergerak ke node selanjutnya, dan kemudian pointer hapus akan didelete.

More Related