Double Linked List.

Slides:



Advertisements
Presentasi serupa
STRUKTUR DATA (10) tree manipulation
Advertisements

Single linked list.
STRUKTUR DATA (7) single linked list circular
STRUKTUR DATA (8.1) double linked list non circular
LINKED LIST.
LINKED LIST.
CARA MEMBUAT SINGLE LINKED LIST DENGAN BORLAND C++
Pertemuan 2 STRUKTUR DATA LINKED LIST
LINKED LIST (List linier)
Mata Kuliah : Struktur Data Pertemuan : V
LINKED LIST Single Linked List.
LINKED LIST.
LINK LIST Latifah Rifani.
Algoritma dan Struktur Data Daniel Riano Kaparang.
Struktur Data Departemen Ilmu Komputer FMIPA-IPB 2010
SENARAI BERANTAI TUNGGAL
Pemrograman Terstruktur
Queue.
Quiz struktur data Genap 2013.
Pertemuan (6) QUEUE (ANTREAN) IMAM SIBRO MALISI NIM :
STACK (Tumpukan).
Pointer dalam Stack.
STACK.
SINGLE LINKED LIST (Lanjutan) Pertemuan 4 IMAM SIBRO MALISI
PERTEMUAN 3 SINGLE LINKED LIST (Non Circular).
STRUKTUR DATA (6) single linked list non circular
Single Linked List Yuliana Setiowati, S.Kom.
BY YOHANA N Sumber Kepustakaan : yohananugraheni.files.wordpress.com/.../linked- lis... 1 LINKED LIST.
Algoritma & Struktur Data Linked List Evangs Mailoa.
LINKED LIST by Yohana N.
Struktur Data List Linear : Linked List (Double Linkedlist)
Linear Data Structures (Linked List). Node Link atau pointer data field.
Algoritma dan Struktur Data
Pertemuan ketujuh Struktur data st3telkom.ac.id
Tenia Wahyuningrum, S.Kom. MT
Linear List.
Struktur Data List Linear : Linked List (Single Linkedlist)
LINKED LIST.
STRUKTUR DATA tree manipulation
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Struktur Data (Data Structure) – IS 2313
Apakah Stack itu ?. Apakah Stack itu ? Pengertian STACK Secara sederhana diartikan dengan : sebagai tumpukan dari benda sekumpulan data yang seolah-olah.
STRUKTUR DATA QUEUE.
1 Pertemuan 3 Data Komposit Linked list Matakuliah: T0026/Struktur Data Tahun: 2005 Versi: 1/1.
LINK LIST “Suatu cara menyimpan data dengan terstruktur sehingga programmer dapat secara otomatis menciptakan suatu tempat baru didalam memori komputer.
SENARAI BERANTAI TUNGGAL
Double linked list non circular
Struktur Data Linked List
STRUKTUR DATA (2) Single Linked List
STRUKTUR DATA Linked List Oleh : Yuli Praptomo PHS, S.Kom.
Single Linked List.
STRUKTUR DATA QUIZ.
12. Doubly Linear Linked List
Algoritma dan Struktur Data
STACK (Tumpukan).
Defri Kurniawan DOUBLE LINKED LIST Defri Kurniawan
11. Singly Circular Linked List
Doubel Linked List.
Stack.
Algoritme dan Stuktur Data
STRUKTUR DATA (7) single linked list circular
Stack.
Doubel Linked List.
Single Linked List Circular (SLLC)
STRUKTUR DATA (8.2) double linked list circular
Double Linked List.
Defri Kurniawan VARIASI LIST Defri Kurniawan
Variable Static & Linked List
Defri Kurniawan DOUBLE LINKED LIST Defri Kurniawan
SINGLE LINKED LIST (SLL)
Transcript presentasi:

Double Linked List

Double Linked List (non circular) Double Linked List 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. Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL. A prev next

Ilustrasi Double Linked List 10 15 20 prev next Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya Untuk pembentukan node baru, mulanya pointer next dan prev akan menunjuk ke nilai NULL. Selanjutnya pointer prev akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk ke node selanjutnya pada list. head

Deklarasi dan Pembentukan Node baru pada Double Linked List Deklarasi node typedef struct TNode{ int data; TNode *next; Tnode *prev; }; Pembentukan node baru TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; baru->prev = NULL;

Double Linked List menggunakan HEAD Dibutuhkan satu buah variabel pointer yaitu head Head akan selalu menunjuk pada node pertama 10 15 20 head

Double Linked List menggunakan HEAD (lanjutan) Deklarasi Pointer Double Linked List menggunakan head TNode *head; Fungsi Inisialisasi Double LinkedList void init(){ head = NULL; } Function untuk mengetahui kosong tidaknya Double LinkedList int isEmpty(){ if(head == NULL) return 1; else return 0;

Penambahan data dari depan pada double linked list dengan head Penambahan node baru akan diletakkan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head nya. Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu.

Penambahan data dari depan pada double linked list dengan head (lanjutan) 1. List masih kosong (head=NULL) NULL head 2. Masukkan data baru, misal 10 10 head

Penambahan data dari depan pada double linked list dengan head (lanjutan) 3. Masukkan data baru lagi dari depan, misal 15 10 15 head baru 15 10 baru head 15 10 head

Penambahan data dari depan pada double linked list dengan head (lanjutan) void insertDepan(int databaru){ TNode *baru; baru = new TNode; baru->data = databaru; baru->next = NULL; baru->prev = NULL; if(isEmpty()==1){ head=baru; head->next = NULL; head->prev = NULL; } else { baru->next = head; head->prev = baru; head = baru; cout<<”Data masuk\n”;

Penambahan data dari belakang pada double linked list dengan head 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.

Penambahan data dari belakang pada double linked list dengan head (lanjutan) 1. List masih kosong (head=NULL) NULL head 2. Masukkan data baru, misal 10 10 head

Penambahan data dari belakang pada double linked list dengan head (lanjutan) 3. Masukkan data baru lagi dari belakang, misal 15 10 15 head baru 10 15 head bantu baru 10 15 head

Penambahan data dari belakang pada double linked list dengan head (lanjutan) 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; cout<<"Data masuk\n";

Function untuk menampilkan isi Double Linked List void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=NULL){ cout<<bantu->data<<" "; bantu=bantu->next; } cout<<endl; } else cout<<"Masih kosong\n";} 10 15 21 head bantu

Hapus data dari depan pada double linked list dengan head Proses penghapusan data 10 dari depan 10 15 21 hapus head 15 21 head

Hapus data dari depan pada double linked list dengan head (lanjutan) 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; } cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";

Hapus data dari belakang pada double linked list dengan head 15 21 34 head hapus 15 21 34 head hapus 15 21 head

Hapus data dari belakang pada double linked list dengan head (lanjutan) 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; cout<<d<<" terhapus\n"; } else cout<<"Masih kosong\n";

Hapus data dari belakang pada double linked list dengan head (lanjutan) 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.

Function untuk menghapus semua elemen void clear(){ TNode *bantu,*hapus; bantu = head; while(bantu!=NULL){ hapus = bantu; bantu = bantu->next; delete hapus; } head = NULL;

Double Linked List menggunakan 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. 10 15 20 head tail

Double Linked List menggunakan HEAD dan TAIL (lanjutan) Inisialisasi DLLNC TNode *head, *tail; Fungsi Inisialisasi DLLNC void init(){ head = NULL; tail = NULL; } Function untuk mengetahui kosong tidaknya DLLNC int isEmpty(){ if(tail == NULL) return 1; else return 0;

Penambahan data dari depan pada double linked list dgn head dan tail 1. List masih kosong (head=tail=NULL) head tail 2. Masukkan data baru, misal 10 10 head tail

Penambahan data dari depan pada double linked list dgn head dan tail (lanjutan) 3. Masukkan data baru lagi dari belakang, misal 15 10 15 head tail baru 15 10 head tail baru 15 10 head tail

Penambahan data dari depan pada double linked list dgn head dan tail (lanjutan) 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; cout<<"Data masuk\n";

Penambahan data dari belakang pada double linked list dgn head dan tail 1. List masih kosong (head=tail=NULL) head tail 2. Masukkan data baru, misal 10 10 head tail

Penambahan data dari belakang pada double linked list dgn head dan tail (lanjutan) 3. Masukkan data baru lagi dari belakang, misal 15 10 15 head tail baru 10 15 head tail baru 10 15 head tail

Penambahan data dari belakang pada double linked list dgn head dan tail (lanjutan) Penambahan node di belakang akan selalu dikaitkan dengan tail dan kemudian node baru tersebut akan menjadi 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; cout<<"Data masuk\n";

Function untuk menampilkan isi linked list void tampil(){ TNode *bantu; bantu = head; if(isEmpty()==0){ while(bantu!=tail->next){ cout<<bantu->data<<" "; bantu=bantu->next; } cout<<endl; } else cout<<"Masih kosong\n"; 10 15 21 head bantu tail

Hapus data dari depan pada double linked list dgn head dan tail Proses penghapusan data 10 dari depan 10 15 21 hapus head tail 15 21 head tail

Hapus data dari depan pada double linked list dgn head dan tail (lanjutan) 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<<" terhapus\n"; } else cout<<"Masih kosong\n";

Hapus data dari belakang pada double linked list dgn head dan tail 15 21 34 head hapus tail 15 21 34 head tail hapus 15 21 head tail

Hapus data dari belakang pada double linked list dgn head dan tail (lanjutan) 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<<" terhapus\n"; } else cout<<"Masih kosong\n";

Hapus data dari belakang pada double linked list dgn head dan tail (lanjutan) Pointer hapus tidak perlu di loop untuk mencari node terakhir. Pointer hapus hanya perlu menunjuk pada pointer tail saja. Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya dengan menggunakan elemen prev, maka pointer prev hanya perlu diset agar menunjuk ke NULL. Lalu pointer hapus didelete.

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;

Function untuk menghapus semua elemen LinkedList 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.

Sumber : lecturer.ukdw.ac.id/anton/download/TIstrukdata8.pdf hansmichael.com/download/SD09.pdf