Algoritma dan Struktur Data Pertemuan 9 Circular Linked

  • Slides: 17
Download presentation
Algoritma dan Struktur Data Pertemuan 9 Circular Linked List Page 1 1

Algoritma dan Struktur Data Pertemuan 9 Circular Linked List Page 1 1

Struktur Circular Linked List p. List A B C Ø Node (elemen) circular linked

Struktur Circular Linked List p. List A B C Ø Node (elemen) circular linked list saling berkait melalui pointer. Bagian next sebuah node menunjuk alamat node selanjutnya Ø p. List: pointer yang menunjuk salah satu node pada list Page 2 2

Struktur Circular Linked List p. List A B C Ø Node terakhir menunjuk node

Struktur Circular Linked List p. List A B C Ø Node terakhir menunjuk node pertama Ø Setiap node terdiri atas § Isi data § Next, yaitu pointer ke node selanjutnya pada list Page 3 3

Struktur Sebuah Node struct node { //bagian data tipedata 1; tipedata 2; … tipedata

Struktur Sebuah Node struct node { //bagian data tipedata 1; tipedata 2; … tipedata n; //pointer ke node selanjutnya struct node *next; }; typedef struct node; Page 4 4

Deklarasi p. List Sebelum membuat circular linked list, perlu dideklarasikan diinisialisasikan p. List, yaitu

Deklarasi p. List Sebelum membuat circular linked list, perlu dideklarasikan diinisialisasikan p. List, yaitu pointer yang menunjuk salah satu node dari circular linked list node *p. List = NULL; Page 5 5

Operasi dasar linked list 1. 2. 3. 4. Menambah sebuah node. Menghapus sebuah node.

Operasi dasar linked list 1. 2. 3. 4. Menambah sebuah node. Menghapus sebuah node. Mencari sebuah node. List tranversal Page 6 6

Menambahkan node pada linked list Terdapat empat tahap untuk menambah node linked list: •

Menambahkan node pada linked list Terdapat empat tahap untuk menambah node linked list: • Membuat node baru. • Mendapatkan node yang terletak sebelum node baru disisipkan (p. Pre) • Atur next node baru agar menunjuk node sesudah posisi penyisipan. Atur next p. Pre agar menunjuk node baru. • Nilai (p. Pre) dapat berisi : • it can contain the address of a node (i. e. you are adding somewhere after the first node – in the middle or at the end) • it can be NULL i. e. you are adding to an empty list Page 7 7

Menambahkan node ke list kosong Before: Code: p. New -> next = p. New;

Menambahkan node ke list kosong Before: Code: p. New -> next = p. New; p. New 39 p. List = p. New; // point list to first node p. List p. Pre After: p. New 39 p. List p. Pre Page 8 8

Menambahkan node di tengah list Before: Code p. New -> next = p. Pre

Menambahkan node di tengah list Before: Code p. New -> next = p. Pre -> next; p. New 64 p. Pre -> next = p. New; 55 124 p. Pre After: p. New 64 55 124 p. Pre Page 9 9

Latihan : bagaimana menyisipkan node sebelum p. List? Before: Code ? p. New p.

Latihan : bagaimana menyisipkan node sebelum p. List? Before: Code ? p. New p. List 39 75 124 p. Pre After ? Page 10 10

Kode untuk menambah data ke linked list • Untuk menambah data pada linked list,

Kode untuk menambah data ke linked list • Untuk menambah data pada linked list, harus diketahui p. List, pointer yang menunjuk node sebelum tempat penyisipan (p. Pre) dan data yang akan disisipkan (item). //insert a node into a linked list node *p. New; p. New = (node *) malloc(sizeof(node)); p. New -> data = item; if (p. Pre == NULL){ //add an empty list p. New -> next = p. New; p. List = p. New; } else { //add in the middle or at the end p. New -> next = p. Pre -> next; p. Pre -> next = p. New; } Page 11 11

Menghapus node dari linked list • Untuk menghapus sebuah node: – Cari node yang

Menghapus node dari linked list • Untuk menghapus sebuah node: – Cari node yang akan dihapus (p. Cur) dan node pendahulunya (p. Pre). – Ubah p. Pre->next agar menunjuk p. Cur->next. – Hapus p. Cur menggunakan fungsi free Page 12 12

Menghapus node pertama dari linked list Before: Code: p. Pre -> next = p.

Menghapus node pertama dari linked list Before: Code: p. Pre -> next = p. Cur->next; p. List = p. List->next; 75 124 free(p. Cur); p. List p. Pre p. Cur After: p. List p. Pre Recycled 124 p. Cur Page 13 13

Menghapus node dari linked list – kasus umum Before: Code: 75 96 p. Pre

Menghapus node dari linked list – kasus umum Before: Code: 75 96 p. Pre -> next = p. Cur -> next; 124 free(p. Cur); p. Cur p. Pre After: Recycled 75 p. Pre 124 p. Cur Page 14 14

Kode untuk menghapus node dari linked list • Untuk menghapus node dari linked list,

Kode untuk menghapus node dari linked list • Untuk menghapus node dari linked list, harus diketahui p. List, node yang akan dihapus (p. Cur), serta pendahulunya (p. Pre) //delete a node from a linked list if (p. Pre == p. Cur) //list satu node p. List = NULL; else if (p. Cur == p. List) //menghapus node pertama p. Pre -> next = p. Cur -> next; p. List = p. List->next; Else p. Pre -> next = p. Cur -> next; free(p. Cur). Page 15 15

Mencari node yang mengandung data tertentu dari linked list • Operasi insert dan delete

Mencari node yang mengandung data tertentu dari linked list • Operasi insert dan delete membutuhkan pencarian pada list untuk menentukan posisi penyisipan atau pointer yang menunjuk data yang akan dihapus //search the nodes in a linked list p. Pre = p. List; p. Cur = p. List; //search until the target value is found or the end of the list is reached Do while (p. Cur->next != p. List && p. Cur -> data != target) { p. Pre = p. Cur; p. Cur = p. Cur -> next; } //determine if the target is found or ran off the end of the list if (p. Cur->data == target) found = 1; else found = 0; Page 16 16

Traversing a Linked List • mengunjungi semua node yang ada pada list dari head

Traversing a Linked List • mengunjungi semua node yang ada pada list dari head sampai node terakhir //traverse a linked list node *p. Walker; p. Walker = p. List; printf(“List contains: n”); while (p. Walker->next != p. List){ printf(“%d ”, p. Walker -> data); p. Walker = p. Walker -> next; } printf(“%d ”, p. Walker -> data); Page 17 17