Double Linked List.

Slides:



Advertisements
Presentasi serupa
Double Linked List.
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
Queue.
Pertemuan (6) QUEUE (ANTREAN) IMAM SIBRO MALISI NIM :
Algoritma dan Struktur Data
STACK (Tumpukan).
STACK.
STACK.
SINGLE LINKED LIST (Lanjutan) Pertemuan 4 IMAM SIBRO MALISI
STRUKTUR DATA (6) single linked list non circular
Single Linked List Yuliana Setiowati, S.Kom.
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.
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
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.
Pertemuan : Algoritma & Struktur Data
LINK LIST “Suatu cara menyimpan data dengan terstruktur sehingga programmer dapat secara otomatis menciptakan suatu tempat baru didalam memori komputer.
STRUKTUR DATA Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.
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.
LINKED LIST by Yohana N.
Single Linked List.
STRUKTUR DATA QUIZ.
12. Doubly Linear Linked List
Algoritma dan Struktur Data
STRUKTUR DATA QUEUE (Antrian)
STACK (Tumpukan).
11. Singly Circular Linked List
Doubel Linked List.
STACK (Tumpukan).
Stack.
Algoritme dan Stuktur Data
STRUKTUR DATA (7) single linked list circular
Doubel Linked List.
Single Linked List Circular (SLLC)
QUEUE (ANTRIAN) Queue atau antrian didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan elemen (Enqueue) dan pengambilan.
LINKED LIST GANDA Linked list ganda (doubly linked list) adalah linked list yang setiap simpul-nya (node) memiliki dua buah pointer, masing-masing berada.
LINKED LIST by Yohana N Sumber Kepustakaan : yohananugraheni.files.wordpress.com/.../linked-lis...
STRUKTUR DATA (8.2) double linked list circular
Defri Kurniawan VARIASI LIST Defri Kurniawan
Variable Static & Linked List
Bina Sarana Informatika
QUEUE (Antrian).
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