25
Linked List (Runut Berantai)

Linked List

Embed Size (px)

DESCRIPTION

struktur data

Citation preview

  • Linked List(Runut Berantai)

  • Linked List Linked List adalah sebuah kumpulan nilai yang

    terhubung

    Linked List menggunkan node untuk menyimpan nilai tersebut

    setiap node dihubungkan dengan sebuah pointer yang merujuk ke node berikut atau sebelum

  • node node

    next

    prevhead

    next

    prev

    null

    tail

    next

    prev

    tail

  • Linked List (2)

    prev merujuk ke node sebelum dan next ke node sesudahnya

    Singly Linked List adalah list dimana setiap node HANYA memiliki next

    Double Linked list adalah list dimana setiap node memiliki next dan prev

  • Linked List (3)

    Head adalah node pertama dan tidak memiliki prev (prev == null)

    Tail adalah node terakhir dan tidak memiliki next (next == null)

  • Linked List: Problem

    Bagaimana mencari sebuah node dengan value tertentu?

    Bagaimana mencari node dengan value terbesar?

    Bagaimana menukar posisi 2 buah node?

  • Linked List: Implementasi

    class Node{Node * next;Node *prev;int value;}

  • Linked List: Mencari Node dengan Nilai Tertentu

    Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;}

  • Linked List: Mencari Node dengan Nilai Tertentu

    Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;}

    mulai dari head

  • Linked List: Mencari Node dengan Nilai Tertentu

    Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;}

    jika curr tidak kosong, belum selesai

  • Linked List: Mencari Node dengan Nilai Tertentu

    Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;}

    badingkan nilai curr dengan nilai yang dicari

    jika sesuai, kembalikan

    jika tidak, masuk ke node berikutnya

  • Linked List: Mencari Node dengan Nilai Tertentu

    Node* findNode(Node head, int value){Node * curr = head;while (curr != null){if (curr->value == value){return curr;}curr = curr->next; }return null;} jika kita sudah melewati tail,

    dan nilai belum ditemukan kembalikan null

  • Linked List: Membalikkan 2 Node bersebelahan

    node1 node2

    next

    prevhead

    next

    prev

    null

    tail

    next

    prev

    tail

    node2 node1

    next

    prevhead

    next

    prev

    null

    tail

    next

    prev

    tail

  • Linked List: Membalikkan 2 Node bersebelahan

    Masalah: prev dan next dari node1 dan node2 sudah berubah

    Pre: prev dari node1 adalah head, next adalah node2; prev dari node2 adalah node1, next adalah tail

    Post: prev dari node1 adalah node2, next adalah tail, prev dari node2 adalah head, next adalah node1

  • Linked List: Membalikkan 2 Node bersebelahan

    Node* switchNode(Node * first, Node * second){Node * firstPrev = first->prev;first->prev = second;

    Node * secondNext = second->next;second->next = first;

    first->next = secondNext;second->prev = firstPrev;}

  • Linked List: Membalikkan 2 Node bersebelahan

    Node* switchNode(Node * first, Node * second){Node * firstPrev = first->prev;first->prev = second;

    Node * secondNext = second->next;second->next = first;

    first->next = secondNext;second->prev = firstPrev;}

    Simpan first->prev karena akan digunakan

    oleh second->prev Ubah nilai first->prev

  • node1 node2

    next

    prevhead

    next

    prev

    null

    tail

    next

    prev

    tail

  • Linked List: Membalikkan 2 Node bersebelahan

    Node* switchNode(Node * first, Node * second){Node * firstPrev = first->prev;first->prev = second;

    Node * secondNext = second->next;second->next = first;

    first->next = secondNext;second->prev = firstPrev;}

    Simpan second->next karena akan digunakan

    oleh first->next Ubah nilai second->next

  • node1 node2

    next

    prevhead

    next

    prev

    null

    tail

    prev

    tail

    next

  • Linked List: Membalikkan 2 Node bersebelahan

    Node* switchNode(Node * first, Node * second){Node * firstPrev = first->prev;first->prev = second;

    Node * secondNext = second->next;second->next = first;

    first->next = secondNext;second->prev = firstPrev;} ubah yang lain dengan

    menggunakan nilai yang telah disimpan

  • node2 node1

    next

    prevhead

    next

    prev

    null

    tail

    next

    prev

    tail

    DONE! :)

  • Q: Bagaimana mengubah 2 Node yang tidak bersebelahan?

  • Stack dan Queue

    Linked List umum digunakan untuk mengimplementasikan barisan

    Salah satu barisan yang umum adalah stack dan queue

  • Stack

    Arti: Tumpukan

    First In Last Out (FILO): element yang pertama masuk akan keluar paling terakhir

    Implementasi: Call Stack; peyimpanan state pada saat pemanggilan function

    A

    B

    C

    D

    poppush

  • Queue

    Arti: Antrian

    First In First Out (FILO): element yang pertama masuk akan keluar paling pertama

    Implementasi: Request queue; antrian request yang masuk pada sebuah server A

    B

    C

    pop

    push