SlideShare a Scribd company logo
1 of 33
Download to read offline
DOUBLE LINKED LIST
W Pokok Bahasan
1 ADT Stack
2 ADT Queue
3 List Linear
4 List Linear
5 List Linear
6 Representasi Fisik List Linear
7 Variasi List Linear
8 UjianTengah Semester
W Pokok Bahasan
9 Variasi List Linear
10 Double Linked List
11 Stack dengan Representasi List
12 Queue dengan Representasi List
13 List Rekursif
14 Pohon dan Pohon Biner
15 Multi List
16 Ujian Akhir Semester
RENCANA KEGIATAN PERKULIAHAN SEMESTER
Double Linked List
null null
� Memiliki dua buah pointer yaitu Pointer Prev dan Pointer
Next
� Pointer Prev mengarah ke node sebelumnya
� Pointer Next mengarah ke node setelahnya
Pointer
Prev
Data
Pointer
Next
Double Linked List
� Setiap node pada linked list memiliki data dan pointer
� Inisialisasi, pointer prev dan pointer next mengarah ke
NULL
� Selanjutnya, pointer prev mengarah ke node sebelumnya
dan pointer next mengarah ke node setelahnya
null null
4 7 9
Deklarasi dan Node Baru
� Deklarasi Node
typedef struct Tnode{
int data;
Tnode *prev;
Tnode *next;
};
� Node Baru
Tnode *baru;
baru = new Tnode;
Keyword new mempersiapkan
Sebuah node baru
beserta alokasi memori
baru->data = databaru;
baru->prev = NULL;
baru->next = NULL;
Double Linked List dengan Head
� Dibutuhkan satu buah variabel pointer : Head
� Head selalu menunjuk pada node pertama
� Manipulasi linked list harus melalui node pertama dalam
linked list
Tnode *head;
� Inisialisasi :
void init(){
head=NULL;
}
head
null null
4 7 9
Double Linked List dengan Head
� Deklarasi Pointer Penunjuk Kepala Double Linked List
Tnode *head;
void init(){
head=NULL;
}
int isEmpty(){
if(head==NULL) return 1;
else return 0;
}
head
null null
4 7 9
Insert Depan
� Penambahan node baru dikaitkan pada node paling
depan
� Jika masih kosong, penambahan data dilakukan pada
headnya
� Prinsipnya :
- Mengaitkan data baru dengan head
- Head menunjuk pada data baru (head selalu menjadi
data terdepan)
- Untuk menghubungkan node terakhir dengan node
terdepan dibutuhkan pointer bantu
Insert Depan
Void insertDepan(int databaru){
Tnode *baru;
baru= new Tnode;
baru->data=databaru;
baru->prev=NULL;
baru->next=NULL;
if(isEmpty()==1){
head=baru;
head->prev=NULL;
head->next=NULL;
}
else{
}
}
baru->next = head;
baru->prev = baru;
head=baru;
printf(“Data Masukn”);
Insert Depan
Insert Belakang
� Penambahan data dilakukan di belakang, namun pada
saat pertama kali data langsung ditunjuk pada head-nya
� Penambahan di belakang lebih sulit karena membutuhkan
pointer bantu untuk mengetahui data paling belakang,
kemudian kaitkan dengan data baru.
Insert Belakang
Void insertBelakang(int databaru){
Tnode *baru, *bantu;
baru = new Tnode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
head->next = NULL;
head->prev = NULL;
}
else{
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
bantu->next = baru;
baru->prev = bantu;
}
}
Insert Belakang
Insert Belakang
Tampil
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
printf(“%d “,bantu->data);
bantu=bantu->next;
}
printf(“n”);
} else printf("Masih kosongn“);
}
Hapus Node
� 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
Hapus Node Depan
void hapusDepan (){
Tnode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = head;
d = hapus->data;
head = head->next;
head->prev = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
}
}
}
Hapus Node Depan
Hapus Node Belakang
void hapusBelakang(){
Tnode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = head;
while(hapus->next!=NULL){
hapus = hapus->next;
}
d = hapus->data;
hapus->prev->next = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
}
}
}
Hapus Node Belakang
Hapus Semua Node
void clear(){
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
Double Linked List dengan Head & Tail
4 7 9
� Dibutuhkan dua buah variabel pointer : Head dan Tail
� Head akan selalu menunjuk pada node pertama
� Tail akan selalu menunjuk pada node terakhir
Head Tail
Double Linked List dengan Head & Tail
� Inisialisasi
Tnode *head, *tail;
� Fungsi Inisialisasi Double Linked List
void init(){
head=NULL;
tail=NULL;
}
� Fungsi untuk mengetahui list kosong
int isEmpty(){
if(tail==NULL) return 1;
else return 0;
}
Insert Depan dengan Head & Tail
Insert Depan dengan Head & Tail
Insert Depan dengan Head & Tail
void insertDepan (int databaru){
Tnode *baru;
baru = new Tnode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
tail=head;
head->next = NULL;
head->prev = NULL;
tail->prev = NULL;
tail->next = NULL;
}
else {
baru->next = head;
head->prev = baru;
head = baru;
}
}
Insert Belakang dengan Head & Tail
Insert Belakang dengan Head & Tail
Insert Belakang dengan Head & Tail
Insert Belakang dengan Head & Tail
void insertBelakang(int databaru){
Tnode *baru;
baru = new Tnode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
tail=head;
head->next = NULL;
head->prev = NULL;
tail->prev = NULL;
tail->next = NULL;
}
else {
tail->next = baru;
baru->prev = tail;
tail = baru;
tail->next = NULL;
}
}
Hapus Node Depan
void hapusDepan(){
Tnode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = head;
d = hapus->data;
head = head->next;
head->prev = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
tail = NULL;
}
cout<<d<<" terhapusn";
} else cout<<"Masih kosongn";
}
Hapus Node Belakang
void hapusBelakang(){
Tnode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = tail;
d = tail->data;
tail = tail->prev;
tail->next = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
tail = NULL;
}
cout<<d<<" terhapusn";
} else cout<<"Masih kosongn";
}
Hapus Semua Node
void clear(){
Tnode *bantu,*hapus;
bantu = head;
while(bantu!=NULL){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;
}

More Related Content

Similar to DOUBLE LINKED LIST..docx

Similar to DOUBLE LINKED LIST..docx (15)

Pertemuan 4 revisijan2013-mhs
Pertemuan 4 revisijan2013-mhsPertemuan 4 revisijan2013-mhs
Pertemuan 4 revisijan2013-mhs
 
Single Linked List - Insert .pptx
Single Linked List - Insert .pptxSingle Linked List - Insert .pptx
Single Linked List - Insert .pptx
 
Tugas kelompok mi d3_sore
Tugas kelompok mi d3_soreTugas kelompok mi d3_sore
Tugas kelompok mi d3_sore
 
Tistrukdat6
Tistrukdat6Tistrukdat6
Tistrukdat6
 
Bab 5 linked list
Bab 5 linked listBab 5 linked list
Bab 5 linked list
 
Linked list
Linked listLinked list
Linked list
 
Stack with linked list(algodat)
Stack with linked list(algodat)Stack with linked list(algodat)
Stack with linked list(algodat)
 
Pert.5 linked list
Pert.5 linked listPert.5 linked list
Pert.5 linked list
 
Resume praktikum 5__linked_list
Resume praktikum 5__linked_listResume praktikum 5__linked_list
Resume praktikum 5__linked_list
 
Senarai berantai
Senarai berantaiSenarai berantai
Senarai berantai
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
 
Sd bab 8a (senarai)
Sd bab 8a (senarai)Sd bab 8a (senarai)
Sd bab 8a (senarai)
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sort
 
Pertemuan 3.pptx
Pertemuan 3.pptxPertemuan 3.pptx
Pertemuan 3.pptx
 
Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)
 

More from Subandi Wahyudi

week_11_-_Stack_dengan_List.pptx
week_11_-_Stack_dengan_List.pptxweek_11_-_Stack_dengan_List.pptx
week_11_-_Stack_dengan_List.pptxSubandi Wahyudi
 
Contoh Bill Of Material Sepatu Kantor.docx
Contoh Bill Of Material Sepatu Kantor.docxContoh Bill Of Material Sepatu Kantor.docx
Contoh Bill Of Material Sepatu Kantor.docxSubandi Wahyudi
 
Fungsi Array pada VB.docx
Fungsi Array pada VB.docxFungsi Array pada VB.docx
Fungsi Array pada VB.docxSubandi Wahyudi
 
Open text web_site_management_server_11.2.1_-_smartedit_guide_english_(wsmsse...
Open text web_site_management_server_11.2.1_-_smartedit_guide_english_(wsmsse...Open text web_site_management_server_11.2.1_-_smartedit_guide_english_(wsmsse...
Open text web_site_management_server_11.2.1_-_smartedit_guide_english_(wsmsse...Subandi Wahyudi
 
Tutorial 22 mastering olap reporting drilling through using mdx
Tutorial 22 mastering olap reporting drilling through using mdxTutorial 22 mastering olap reporting drilling through using mdx
Tutorial 22 mastering olap reporting drilling through using mdxSubandi Wahyudi
 
Sql server integration services
Sql server integration servicesSql server integration services
Sql server integration servicesSubandi Wahyudi
 

More from Subandi Wahyudi (8)

week_11_-_Stack_dengan_List.pptx
week_11_-_Stack_dengan_List.pptxweek_11_-_Stack_dengan_List.pptx
week_11_-_Stack_dengan_List.pptx
 
Contoh Bill Of Material Sepatu Kantor.docx
Contoh Bill Of Material Sepatu Kantor.docxContoh Bill Of Material Sepatu Kantor.docx
Contoh Bill Of Material Sepatu Kantor.docx
 
contoh bom meja.docx
contoh bom meja.docxcontoh bom meja.docx
contoh bom meja.docx
 
Fungsi Array pada VB.docx
Fungsi Array pada VB.docxFungsi Array pada VB.docx
Fungsi Array pada VB.docx
 
Open text web_site_management_server_11.2.1_-_smartedit_guide_english_(wsmsse...
Open text web_site_management_server_11.2.1_-_smartedit_guide_english_(wsmsse...Open text web_site_management_server_11.2.1_-_smartedit_guide_english_(wsmsse...
Open text web_site_management_server_11.2.1_-_smartedit_guide_english_(wsmsse...
 
Cd108 sap personas
Cd108   sap personasCd108   sap personas
Cd108 sap personas
 
Tutorial 22 mastering olap reporting drilling through using mdx
Tutorial 22 mastering olap reporting drilling through using mdxTutorial 22 mastering olap reporting drilling through using mdx
Tutorial 22 mastering olap reporting drilling through using mdx
 
Sql server integration services
Sql server integration servicesSql server integration services
Sql server integration services
 

DOUBLE LINKED LIST..docx

  • 2. W Pokok Bahasan 1 ADT Stack 2 ADT Queue 3 List Linear 4 List Linear 5 List Linear 6 Representasi Fisik List Linear 7 Variasi List Linear 8 UjianTengah Semester W Pokok Bahasan 9 Variasi List Linear 10 Double Linked List 11 Stack dengan Representasi List 12 Queue dengan Representasi List 13 List Rekursif 14 Pohon dan Pohon Biner 15 Multi List 16 Ujian Akhir Semester RENCANA KEGIATAN PERKULIAHAN SEMESTER
  • 3. Double Linked List null null � Memiliki dua buah pointer yaitu Pointer Prev dan Pointer Next � Pointer Prev mengarah ke node sebelumnya � Pointer Next mengarah ke node setelahnya Pointer Prev Data Pointer Next
  • 4. Double Linked List � Setiap node pada linked list memiliki data dan pointer � Inisialisasi, pointer prev dan pointer next mengarah ke NULL � Selanjutnya, pointer prev mengarah ke node sebelumnya dan pointer next mengarah ke node setelahnya null null 4 7 9
  • 5. Deklarasi dan Node Baru � Deklarasi Node typedef struct Tnode{ int data; Tnode *prev; Tnode *next; }; � Node Baru Tnode *baru; baru = new Tnode; Keyword new mempersiapkan Sebuah node baru beserta alokasi memori baru->data = databaru; baru->prev = NULL; baru->next = NULL;
  • 6. Double Linked List dengan Head � Dibutuhkan satu buah variabel pointer : Head � Head selalu menunjuk pada node pertama � Manipulasi linked list harus melalui node pertama dalam linked list Tnode *head; � Inisialisasi : void init(){ head=NULL; } head null null 4 7 9
  • 7. Double Linked List dengan Head � Deklarasi Pointer Penunjuk Kepala Double Linked List Tnode *head; void init(){ head=NULL; } int isEmpty(){ if(head==NULL) return 1; else return 0; } head null null 4 7 9
  • 8. Insert Depan � Penambahan node baru dikaitkan pada node paling depan � Jika masih kosong, penambahan data dilakukan pada headnya � Prinsipnya : - Mengaitkan data baru dengan head - Head menunjuk pada data baru (head selalu menjadi data terdepan) - Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu
  • 9. Insert Depan Void insertDepan(int databaru){ Tnode *baru; baru= new Tnode; baru->data=databaru; baru->prev=NULL; baru->next=NULL; if(isEmpty()==1){ head=baru; head->prev=NULL; head->next=NULL; } else{ } } baru->next = head; baru->prev = baru; head=baru; printf(“Data Masukn”);
  • 11. Insert Belakang � Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya � Penambahan di belakang lebih sulit karena membutuhkan pointer bantu untuk mengetahui data paling belakang, kemudian kaitkan dengan data baru.
  • 12. Insert Belakang Void insertBelakang(int databaru){ Tnode *baru, *bantu; baru = new Tnode; baru->data = databaru; baru->next = NULL; baru->prev = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; head->prev = NULL; } else{ bantu=head; while(bantu->next!=NULL){ bantu=bantu->next; } bantu->next = baru; baru->prev = bantu; } }
  • 15. Tampil void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ printf(“%d “,bantu->data); bantu=bantu->next; } printf(“n”); } else printf("Masih kosongn“); }
  • 16. Hapus Node � 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
  • 17. Hapus Node Depan void hapusDepan (){ Tnode *hapus; int d; if (isEmpty()==0){ if(head->next != NULL){ hapus = head; d = hapus->data; head = head->next; head->prev = NULL; delete hapus; } else { d = head->data; head = NULL; } } }
  • 19. Hapus Node Belakang void hapusBelakang(){ Tnode *hapus; int d; if (isEmpty()==0){ if(head->next != NULL){ hapus = head; while(hapus->next!=NULL){ hapus = hapus->next; } d = hapus->data; hapus->prev->next = NULL; delete hapus; } else { d = head->data; head = NULL; } } }
  • 21. Hapus Semua Node void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; }
  • 22. Double Linked List dengan Head & Tail 4 7 9 � Dibutuhkan dua buah variabel pointer : Head dan Tail � Head akan selalu menunjuk pada node pertama � Tail akan selalu menunjuk pada node terakhir Head Tail
  • 23. Double Linked List dengan Head & Tail � Inisialisasi Tnode *head, *tail; � Fungsi Inisialisasi Double Linked List void init(){ head=NULL; tail=NULL; } � Fungsi untuk mengetahui list kosong int isEmpty(){ if(tail==NULL) return 1; else return 0; }
  • 24. Insert Depan dengan Head & Tail
  • 25. Insert Depan dengan Head & Tail
  • 26. Insert Depan dengan Head & Tail void insertDepan (int databaru){ Tnode *baru; baru = new Tnode; baru->data = databaru; baru->next = NULL; baru->prev = NULL; if(isEmpty()==1){ head=baru; tail=head; head->next = NULL; head->prev = NULL; tail->prev = NULL; tail->next = NULL; } else { baru->next = head; head->prev = baru; head = baru; } }
  • 27. Insert Belakang dengan Head & Tail
  • 28. Insert Belakang dengan Head & Tail
  • 29. Insert Belakang dengan Head & Tail
  • 30. Insert Belakang dengan Head & Tail void insertBelakang(int databaru){ Tnode *baru; baru = new Tnode; baru->data = databaru; baru->next = NULL; baru->prev = NULL; if(isEmpty()==1){ head=baru; tail=head; head->next = NULL; head->prev = NULL; tail->prev = NULL; tail->next = NULL; } else { tail->next = baru; baru->prev = tail; tail = baru; tail->next = NULL; } }
  • 31. Hapus Node Depan void hapusDepan(){ Tnode *hapus; int d; if (isEmpty()==0){ if(head->next != NULL){ hapus = head; d = hapus->data; head = head->next; head->prev = NULL; delete hapus; } else { d = head->data; head = NULL; tail = NULL; } cout<<d<<" terhapusn"; } else cout<<"Masih kosongn"; }
  • 32. Hapus Node Belakang void hapusBelakang(){ Tnode *hapus; int d; if (isEmpty()==0){ if(head->next != NULL){ hapus = tail; d = tail->data; tail = tail->prev; tail->next = NULL; delete hapus; } else { d = head->data; head = NULL; tail = NULL; } cout<<d<<" terhapusn"; } else cout<<"Masih kosongn"; }
  • 33. Hapus Semua Node void clear(){ Tnode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL; tail = NULL; }