Double Linked List - PowerPoint PPT Presentation

About This Presentation
Title:

Double Linked List

Description:

Title: STRUKTUR DATA (1) Author: Antonie Last modified by: Sandy N Mantja Created Date: 8/27/2006 8:31:27 AM Document presentation format: On-screen Show – PowerPoint PPT presentation

Number of Views:166
Avg rating:3.0/5.0
Slides: 39
Provided by: Anto129
Category:
Tags: bantu | double | linked | list

less

Transcript and Presenter's Notes

Title: Double Linked List


1
Double Linked List
2
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.

prev
next
3
Ilustrasi Double Linked List
  • 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.

4
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-gtdata databaru
  • baru-gtnext NULL
  • baru-gtprev NULL

5
Double Linked List menggunakan HEAD
  • Dibutuhkan satu buah variabel pointer yaitu head
  • Head akan selalu menunjuk pada node pertama

6
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

7
Penambahan data dari depanpada 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.

8
Penambahan data dari depanpada double linked
list dengan head (lanjutan)
1. List masih kosong (headNULL)
NULL
2. Masukkan data baru, misal 10
9
Penambahan data dari depanpada double linked
list dengan head (lanjutan)
3. Masukkan data baru lagi dari depan, misal 15
10
Penambahan data dari depanpada double linked
list dengan head (lanjutan)
  • void insertDepan(int databaru)
  • TNode baru
  • baru new TNode
  • baru-gtdata databaru
  • baru-gtnext NULL
  • baru-gtprev NULL
  • if(isEmpty()1)
  • headbaru
  • head-gtnext NULL
  • head-gtprev NULL
  • else
  • baru-gtnext head
  • head-gtprev baru
  • head baru
  • coutltltData masuk\n

11
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.

12
Penambahan data dari belakang pada double linked
list dengan head (lanjutan)
1. List masih kosong (headNULL)
NULL
2. Masukkan data baru, misal 10
13
Penambahan data dari belakang pada double linked
list dengan head (lanjutan)
3. Masukkan data baru lagi dari belakang, misal 15
14
Penambahan data dari belakang pada double linked
list dengan head (lanjutan)
  • void insertBelakang (int databaru)
  • TNode baru,bantu
  • baru new TNode
  • baru-gtdata databaru
  • baru-gtnext NULL
  • baru-gtprev NULL
  • if(isEmpty()1)
  • headbaru
  • head-gtnext NULL
  • head-gtprev NULL
  • else
  • bantuhead
  • while(bantu-gtnext!NULL)
  • bantubantu-gtnext
  • bantu-gtnext baru
  • baru-gtprev bantu

15
Function untuk menampilkan isi Double Linked List
  • void tampil()
  • TNode bantu
  • bantu head
  • if(isEmpty()0)
  • while(bantu!NULL)
  • coutltltbantu-gtdataltlt" "
  • bantubantu-gtnext
  • coutltltendl
  • else coutltlt"Masih kosong\n"

16
Hapus data dari depanpada double linked list
dengan head
Proses penghapusan data 10 dari depan
17
Hapus data dari depanpada double linked list
dengan head (lanjutan)
  • void hapusDepan ()
  • TNode hapus
  • int d
  • if (isEmpty()0)
  • if(head-gtnext ! NULL)
  • hapus head
  • d hapus-gtdata
  • head head-gtnext
  • head-gtprev NULL
  • delete hapus
  • else
  • d head-gtdata
  • head NULL
  • coutltltdltlt" terhapus\n"
  • else coutltlt"Masih kosong\n"

18
Hapus data dari belakangpada double linked list
dengan head
19
Hapus data dari belakangpada double linked list
dengan head (lanjutan)
  • void hapusBelakang()
  • TNode hapus
  • int d
  • if (isEmpty()0)
  • if(head-gtnext ! NULL)
  • hapus head
  • while(hapus-gtnext!NULL)
  • hapus hapus-gtnext
  • d hapus-gtdata
  • hapus-gtprev-gtnext NULL
  • delete hapus
  • else
  • d head-gtdata
  • head NULL
  • coutltltdltlt" terhapus\n"
  • else coutltlt"Masih kosong\n"

20
Hapus data dari belakangpada 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.

21
Function untuk menghapus semua elemen
  • void clear()
  • TNode bantu,hapus
  • bantu head
  • while(bantu!NULL)
  • hapus bantu
  • bantu bantu-gtnext
  • delete hapus
  • head NULL

22
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.

23
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

24
Penambahan data dari depanpada double linked
list dgn head dan tail
1. List masih kosong (headtailNULL)
2. Masukkan data baru, misal 10
25
Penambahan data dari depanpada double linked
list dgn head dan tail (lanjutan)
3. Masukkan data baru lagi dari belakang, misal 15
26
Penambahan data dari depanpada double linked
list dgn head dan tail (lanjutan)
  • void insertDepan (int databaru)
  • TNode baru
  • baru new TNode
  • baru-gtdata databaru
  • baru-gtnext NULL
  • baru-gtprev NULL
  • if(isEmpty()1)
  • headbaru
  • tailhead
  • head-gtnext NULL
  • head-gtprev NULL
  • tail-gtprev NULL
  • tail-gtnext NULL
  • else
  • baru-gtnext head
  • head-gtprev baru
  • head baru

27
Penambahan data dari belakangpada double linked
list dgn head dan tail
1. List masih kosong (headtailNULL)
2. Masukkan data baru, misal 10
28
Penambahan data dari belakangpada double linked
list dgn head dan tail (lanjutan)
3. Masukkan data baru lagi dari belakang, misal 15
29
Penambahan data dari belakangpada 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-gtdata databaru
  • baru-gtnext NULL
  • baru-gtprev NULL
  • if(isEmpty()1)
  • headbaru
  • tailhead
  • head-gtnext NULL
  • head-gtprev NULL
  • tail-gtprev NULL
  • tail-gtnext NULL
  • else
  • tail-gtnext baru
  • baru-gtprev tail
  • tail baru

30
Function untuk menampilkan isi linked list
  • void tampil()
  • TNode bantu
  • bantu head
  • if(isEmpty()0)
  • while(bantu!tail-gtnext)
  • coutltltbantu-gtdataltlt" "
  • bantubantu-gtnext
  • coutltltendl
  • else coutltlt"Masih kosong\n"

31
Hapus data dari depanpada double linked list dgn
head dan tail
Proses penghapusan data 10 dari depan
32
Hapus data dari depanpada double linked list dgn
head dan tail (lanjutan)
  • void hapusDepan()
  • TNode hapus
  • int d
  • if (isEmpty()0)
  • if(head-gtnext ! NULL)
  • hapus head
  • d hapus-gtdata
  • head head-gtnext
  • head-gtprev NULL
  • delete hapus
  • else
  • d head-gtdata
  • head NULL
  • tail NULL
  • coutltltdltlt" terhapus\n"
  • else coutltlt"Masih kosong\n"

33
Hapus data dari belakangpada double linked list
dgn head dan tail
34
Hapus data dari belakangpada double linked list
dgn head dan tail (lanjutan)
  • void hapusBelakang()
  • TNode hapus
  • int d
  • if (isEmpty()0)
  • if(head-gtnext ! NULL)
  • hapus tail
  • d tail-gtdata
  • tail tail-gtprev
  • tail-gtnext NULL
  • delete hapus
  • else
  • d head-gtdata
  • head NULL
  • tail NULL
  • coutltltdltlt" terhapus\n"
  • else coutltlt"Masih kosong\n"

35
Hapus data dari belakangpada 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.

36
Function untuk menghapus semua elemen LinkedList
  • void clear()
  • TNode bantu,hapus
  • bantu head
  • while(bantu!NULL)
  • hapus bantu
  • bantu bantu-gtnext
  • delete hapus
  • head NULL
  • tail NULL

37
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.

38
Sumber
  • lecturer.ukdw.ac.id/anton/download/TIstrukdata8.pd
    f
  • hansmichael.com/download/SD09.pdf
Write a Comment
User Comments (0)
About PowerShow.com