T910 List LinierDouble Linkedlist

download T910 List LinierDouble Linkedlist

of 72

Transcript of T910 List LinierDouble Linkedlist

  • 8/18/2019 T910 List LinierDouble Linkedlist

    1/72

    List Linear :

    Linked List (Double

    Linkedlist)

     Teknik Informatika

    Universitas Muhammadiyah Malang20

    PemrogrammanTerstruktur

  • 8/18/2019 T910 List LinierDouble Linkedlist

    2/72

     Tu!uan Instruksional

    • Mahasis"a mam#u :

     – Memahami struktur data linked list

     – Memahami $ara #engo#erasian strukturdata linked list

     – Mengim#lementasikan struktur datalinked list

  • 8/18/2019 T910 List LinierDouble Linkedlist

    3/72

  • 8/18/2019 T910 List LinierDouble Linkedlist

    4/72

    Double Linked List

    • Double : artinya *eld #ointer+nya dua buahdan dua arah, yang menun!uk ke nodesebelum dan sesudahnya-

    • %erguna bila #erlu melakukan #emba$aanlinkedlist dari dua arah-

    • Double linked list memiliki 2 buah #ointeryaitu #ointer next dan prev-

    • 'ointer ne.t : mengarah ke node belakang(tail)-

    • 'ointer #rev : mengarah ke node de#an(head)-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    5/72

    Ilustrasi /ode Double1

    • etika masih ada satu node maka kedua #ointer(ne.t dan #rev) akan menun!uk ke /ULL)

    •Double linked list da#at diakses dari dua arah :- Dari de#an ke belakang (head ke tail)

    2- Dari belakang ke de#an (tail ke head)

    prev

    DATA next

  • 8/18/2019 T910 List LinierDouble Linkedlist

    6/72

    Double Linked List

    • etika double linked list memiliki banyaknode maka node yang #aling de#an#ointer #rev+nya menun!uk ke /ULL-

    3edangkan node yang #aling belakang#ointer ne.t+nya yang menun!uk ke /ULL-

    a b c d e

    null

    firstNode

    null

    lastNode

  • 8/18/2019 T910 List LinierDouble Linkedlist

    7/72

    'ointer &ead dan Tail

    • 3ama se#erti single linked list, #adadouble linked dibutuhkan #ointer bantuyaitu head dan tail-

    • &ead : menun!uk #ada node yang #alingde#an-

    •  Tail : menun!uk #ada node yang #alingbelakang-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    8/72

    Double Linked List

    • 4ontoh ilustrasi double linked listyang memiliki node :

    previous

    next

  • 8/18/2019 T910 List LinierDouble Linkedlist

    9/72

    Double1 5e#resentation

    'en!elasan:

    • 'embuatan $lass bernama /ode2', yang berisivariabel data berti#e 6b!e$t dan 2 variabel #ointerberti#e /ode2' yaitu : ne.t dan #rev-

    • Field data : digunakan untuk menyim#an data7nilai#ada linked list- Field pointer : digunakan untukmenyim#an alamat node berikutnya-

    $lass /ode2'8

    int data9 77 data/ode2' ne.t9 77 #ointer ne.t/ode2' #rev9 77 #ointer #rev

    Ilustrasi :

    next

    data

    prev

  • 8/18/2019 T910 List LinierDouble Linkedlist

    10/72

    4lass /ode

    #ubli$ $lass /ode2' 8  int data9  /ode2' ne.t9  /ode2' #revious9

      /ode2'() 8

      /ode2'(int theData)  8 data ; theData9

      /ode2'(int theData, /ode2' the'revious, /ode2'

    the/e.t)  8  data; theData9  #rev ; the'revious9  ne.t ; the/e.t9 

    Constructor 1

    Constructor 2

    Constructor 3

    null

    null

    null

    null

    data

    null

    next

    data

    prev

  • 8/18/2019 T910 List LinierDouble Linkedlist

    11/72

  • 8/18/2019 T910 List LinierDouble Linkedlist

    12/72

    6#erasi Linked List

    - inisialisasi

    2- ise- 'enambahan

    ?- 'engha#usan

    @- 'enyisi#anA- 'en$arian

    B- 'engaksesan

  • 8/18/2019 T910 List LinierDouble Linkedlist

    13/72

    =

    () Inisialisasi "al 'ointer &ead C Tail

    /ode2' head ; null9/ode2' tail; null9

    head tailNULL

  • 8/18/2019 T910 List LinierDouble Linkedlist

    14/72

    (2)ise ; 0 atau !ika head;tail;null-

      boolean ise;;09 

  • 8/18/2019 T910 List LinierDouble Linkedlist

    15/72

    (=) si>e

    • Digunakan untuk mengetahui banyaknode #ada linked list-

    • 3i>e akan bertambah setia# adanode baru yang ditambahkan #adalinked list-

    • 3i>e akan berkurang setia# ada#engha#usan node-  int sie!"

      #

      return sie$

      %

  • 8/18/2019 T910 List LinierDouble Linkedlist

    16/72

    () 'enambahan

    • Dibedakan men!adi :

    -'enambahan dari de#an

    2-'enambahan dari belakang=-'enambahan setelah node tertentu

    -'enambahan sebelum node tertentu

  • 8/18/2019 T910 List LinierDouble Linkedlist

    17/72

    Membentuk 3im#ul "al

    •  ika kondisi a"al linked list kosong, makahead dan tail sama+sama menun!uk nodebaru-

    • head ; tail; %aru

    A

  • 8/18/2019 T910 List LinierDouble Linkedlist

    18/72

    'enambahan dari De#an

    •  ika linked list terda#at node, maka :

     – 'enambahan node baru diletakkan dide#an node yang ditun!uk oleh head-

     – 'ointer #rev dari node de#an diarahkanke node baru-

     – Ter!adi #ergeseran #ointer head kearah

    node baru-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    19/72

    'enambahan dari De#an

    void addEirst(/ode2' in#ut)8  if (iseFF9 

  • 8/18/2019 T910 List LinierDouble Linkedlist

    20/72

    20

    Insert Eirst

    - %aru-ne.t ; head

  • 8/18/2019 T910 List LinierDouble Linkedlist

    21/72

  • 8/18/2019 T910 List LinierDouble Linkedlist

    22/72

    22

    Insert Eirst

    =- head ; baru

  • 8/18/2019 T910 List LinierDouble Linkedlist

    23/72

    'enambahan dari %elakang

    •  ika linked list terda#at node, maka :

     – 'enambahan node baru diletakkan dibelakang node yang ditun!uk oleh tail-

     – 'ointer ne.t dari node belakangdiarahkan ke node baru-

     – Ter!adi #ergeseran #ointer tail kearah

    node baru-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    24/72

    'enambahan dari %elakang

    void addLast(/ode2' in#ut)8  if (iseFF9 

  • 8/18/2019 T910 List LinierDouble Linkedlist

    25/72

    2?

    Insert Last

    ondisi a"al linked list :

     Terda#at 2 node

  • 8/18/2019 T910 List LinierDouble Linkedlist

    26/72

    2@

    Insert Last

    - %aru-#rev ; tail

  • 8/18/2019 T910 List LinierDouble Linkedlist

    27/72

    2A

    Insert Last

    2- tail-ne.t ; %aru

  • 8/18/2019 T910 List LinierDouble Linkedlist

    28/72

    2B

    Insert Last

    =- tail; %aru

  • 8/18/2019 T910 List LinierDouble Linkedlist

    29/72

    'enambahan 3etelah /ode.

    • 'enambahan node baru dilakukandibelakang node . (node tertentu)-

    • /ode . adalah node yang memilikidata yang sama dengan key-

    •  ika tidak ditemukan node yangdimaksud maka #enambahan tidakter!adi-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    30/72

    'enambahan setelah /ode .

    void insertfter(6b!e$t key,/ode2' in#ut)8  /ode2' tem# ; head9  do8  if(tem#-data;;key)8

      in#ut-#revious ; tem#9  in#ut-ne.t ; tem#-ne.t9  tem#-ne.t-#revious ; in#ut9  tem#-ne.t ; in#ut9  si>eFF9  3ystem-out-#rintln(GInsert data issu$$eed-G)9  break9    tem# ; tem#-ne.t9  "hile (tem#H;null)9

     

  • 8/18/2019 T910 List LinierDouble Linkedlist

    31/72

    Insert fter /ode .

    ondisi a"al linked list :

     Terda#at = node #ada linked listmisalkan key ; 0

  • 8/18/2019 T910 List LinierDouble Linkedlist

    32/72

    Insert fter /ode .Dibutuhkan #ointer bantu untuk men$ari node .- Misalkan #ointer bantu tersebut adalah after-

    - /ode after ; head9

    'ointer after akan bergeser men$ari node yang sesuai-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    33/72

    Insert fter /ode .

    2- %aru-#rev ; after

  • 8/18/2019 T910 List LinierDouble Linkedlist

    34/72

    =

    Insert fter /ode .

    =- %aru-ne.t ; after-ne.t

  • 8/18/2019 T910 List LinierDouble Linkedlist

    35/72

    =?

    Insert fter /ode .

    - after-ne.t-#rev ; %aru

  • 8/18/2019 T910 List LinierDouble Linkedlist

    36/72

    =@

    Insert fter /ode .

    ?- after-ne.t ; %aru

  • 8/18/2019 T910 List LinierDouble Linkedlist

    37/72

    =A

    Insert fter /ode .

    &asil akhir :

  • 8/18/2019 T910 List LinierDouble Linkedlist

    38/72

    'enambahan 3ebelum /ode.

    • 'enambahan node baru dilakukandide#an node . (node tertentu)-

    • /ode . adalah node yang memilikidata yang sama dengan key-

    •  ika tidak ditemukan node yangdimaksud maka #enambahan tidakter!adi-

    ' b h b l / d

  • 8/18/2019 T910 List LinierDouble Linkedlist

    39/72

    'enambahan sebelum /odetertentu

    void insert%efore(6b!e$t key,/ode2' in#ut)8

      /ode2' tem# ; head9  "hile (tem# H; null)8  if (tem#-data ;; key)  8  if(tem# ;; head)  8  this-addEirst(in#ut)9  3ystem-out-#rintln(GInsert data is su$$eed-G)9  si>eFF9  break9    else  8  in#ut-#revious ; tem#-#revious9  in#ut-ne.t ; tem#9

      tem#-#revious-ne.t ; in#ut9  tem#-#revious ; in#ut9  3ystem-out-#rintln(GInsert data is su$$eed-G)9  si>eFF9  break9      tem# ; tem#-ne.t9

     

  • 8/18/2019 T910 List LinierDouble Linkedlist

    40/72

    0

    Insert %efore /ode .

     ondisi a"al linked list :

     Terda#at node #ada linked listmisalkan key ; ?

  • 8/18/2019 T910 List LinierDouble Linkedlist

    41/72

    Insert %efore /ode .

    - /ode before ; head9

    #ointer before men$ari node yangsesuai-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    42/72

    2

    Insert %efore /ode .

    2- %aru-#rev ; before-#rev

  • 8/18/2019 T910 List LinierDouble Linkedlist

    43/72

    =

    Insert %efore /ode .

    =- %aru-ne.t ; before

  • 8/18/2019 T910 List LinierDouble Linkedlist

    44/72

    Insert %efore /ode .

    - before-#rev-ne.t ; %aru

  • 8/18/2019 T910 List LinierDouble Linkedlist

    45/72

    ?

    Insert %efore /ode .

    ?- before-#rev ; %aru

  • 8/18/2019 T910 List LinierDouble Linkedlist

    46/72

  • 8/18/2019 T910 List LinierDouble Linkedlist

    47/72

    (?) 'engha#usan

    • Dibedakan men!adi :

    -&a#us node de#an

    2-&a#us node belakang=-&a#us node tertentu

  • 8/18/2019 T910 List LinierDouble Linkedlist

    48/72

  • 8/18/2019 T910 List LinierDouble Linkedlist

    49/72

    &a#us /ode De#an

    • 'engha#usan dilakukan #ada node#aling de#an, yaitu node yangditun!uk oleh head-

    •  Ter!adi #ergeseran head ke belakang-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    50/72

    &a#us node de#an

    void removeEirst()8/ode2' tem# ; head9

      if (Hise++9 

      else  3ystem-out-#rintln(GData is em#tyHG)9 

  • 8/18/2019 T910 List LinierDouble Linkedlist

    51/72

    ?

    Delete Eirst

    kondisi a"al linked list:

     Terdiri dari ? node

  • 8/18/2019 T910 List LinierDouble Linkedlist

    52/72

    ?2

    Delete Eirst

    - /ode ha#us ; head9

  • 8/18/2019 T910 List LinierDouble Linkedlist

    53/72

    ?=

    Delete Eirst

    2- head-ne.t-#rev ; null

  • 8/18/2019 T910 List LinierDouble Linkedlist

    54/72

    ?

    Delete Eirst

    =- head ; ha#us-ne.t

  • 8/18/2019 T910 List LinierDouble Linkedlist

    55/72

    Delete Eirst

     

    ??

    Node & sudah terhapus

  • 8/18/2019 T910 List LinierDouble Linkedlist

    56/72

    ?@

    Delete Eirst

    &asil akhir :

  • 8/18/2019 T910 List LinierDouble Linkedlist

    57/72

    &a#us /ode %elakang

    • 'engha#usan dilakukan #ada node#aling belakang, yaitu node yangditun!uk oleh tail-

    •  Ter!adi #ergeseran tail ke de#an-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    58/72

    &a#us node belakang

    void removeLast()8  /ode2' tem# ; tail9  if (Hise++9

        else 3ystem-out-#rintln(GData isem#tyHG)9 

  • 8/18/2019 T910 List LinierDouble Linkedlist

    59/72

    ?

    Delete Last

    ondisi a"al linked list :

    Linked list terdiri dari node

  • 8/18/2019 T910 List LinierDouble Linkedlist

    60/72

    @0

    Delete Last

    - /ode ha#us;tail9

  • 8/18/2019 T910 List LinierDouble Linkedlist

    61/72

  • 8/18/2019 T910 List LinierDouble Linkedlist

    62/72

    @2

    Delete Last

    =- tail; ha#us-#rev

  • 8/18/2019 T910 List LinierDouble Linkedlist

    63/72

    @=

    Delete Last

     Node ' sudah terhapus

  • 8/18/2019 T910 List LinierDouble Linkedlist

    64/72

    @

    Delete Last

    &asil akhir :

  • 8/18/2019 T910 List LinierDouble Linkedlist

    65/72

    &a#us /ode .

    • 'engha#usan dilakukan #ada node .(node tertentu)-

    • /ode . adalah node yang memiliki

    data sama dengan key-

    •  ika tidak ditemukan node yangsesuai maka #engha#usan tidak

    da#at dilakukan-

    & d t t t

  • 8/18/2019 T910 List LinierDouble Linkedlist

    66/72

    &a#us node tertentuvoid remove(6b!e$t key)8  /ode2' tem# ; head9  if (His

  • 8/18/2019 T910 List LinierDouble Linkedlist

    67/72

  • 8/18/2019 T910 List LinierDouble Linkedlist

    68/72

    @B

    Delete /ode .

    - /ode ha#us;head9ha#us adalah #ointer bantu yang akanmen$ari node yang dimaksud (node .)-

  • 8/18/2019 T910 List LinierDouble Linkedlist

    69/72

    @

    Delete /ode .

    2- ha#us-#rev-ne.t ; ha#us-ne.t9

  • 8/18/2019 T910 List LinierDouble Linkedlist

    70/72

    A0

    Delete /ode .

    =- ha#us-ne.t-#rev ; ha#us-#rev9

  • 8/18/2019 T910 List LinierDouble Linkedlist

    71/72

    A

    Delete /ode .

    Node 3 sudah terhapus

  • 8/18/2019 T910 List LinierDouble Linkedlist

    72/72

    3umber

    • rna Eari>a, lgoritma 3trukturData : Double Linked List1, '