algoritma dan struktur data

20
Algoritma dan Struktur Data Pertemuan 7 Linked List

Upload: dahlia

Post on 11-Jan-2016

28 views

Category:

Documents


2 download

DESCRIPTION

Algoritma dan Struktur Data. Pertemuan 7 Linked List. Definitions. Linked List Struktur data yang terdiri atas sekumpulan data bertipe sama Memperhatikan urutan Array Struktur data yang terdiri atas sekumpulan data bertipe sama Memperhatikan urutan Apa perbedaannya?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algoritma dan Struktur Data

Algoritma dan Struktur Data

Pertemuan 7

Linked List

Page 2: Algoritma dan Struktur Data

Definitions

Linked List Struktur data yang terdiri atas sekumpulan data bertipe

sama Memperhatikan urutan

Array Struktur data yang terdiri atas sekumpulan data bertipe

sama Memperhatikan urutan

Apa perbedaannya?

Page 3: Algoritma dan Struktur Data

Array vs linked list

Cara mengakses elemen Elemen array diakses lewat indeks Untuk mengakses elemen linked list, harus dilakukan

penelusuran elemen list

Banyaknya anggota Banyaknya elemen array ditentukan di awal &

jumlahnya tetap Elemen linked list dibuat di memori ketika

dibutuhkan (ingat pertemuan 6). Jumlahnya dinamis, dapat bertambah dan berkurang sesuai keperluan

Page 4: Algoritma dan Struktur Data

Struktur linked List

Node (elemen) linked list saling berkait melalui pointer. Bagian next sebuah node menunjuk alamat node selanjutnya

pHead: pointer yang menunjuk node pertama

ApHead

B C

Page 5: Algoritma dan Struktur Data

Struktur linked List

Node terakhir menunjuk NULL Setiap node terdiri atas

Isi data Next, yaitu pointer ke node selanjutnya

pada list

ApHead

B C

Page 6: Algoritma dan Struktur Data

Struktur Sebuah Node

struct node { //bagian data tipedata data 1; tipedata data 2; … tipedata data n;

//pointer ke node selanjutnya struct node *next; };typedef struct node node;

Page 7: Algoritma dan Struktur Data

Deklarasi head

Sebelum membuat linked list, perlu dideklarasikan dan diinisialisasikan head, yaitu pointer yang menunjuk node pertama dari linked list

node *pHead = NULL;

Page 8: Algoritma dan Struktur Data

Operasi dasar linked list

1. Menambah sebuah node.

2. Menghapus sebuah node.

3. Mencari sebuah node.

4. List tranversal

Page 9: Algoritma dan Struktur Data

Menambahkan node pada linked list

Terdapat empat tahap untuk menambah node linked list: • Membuat node baru.• Mendapatkan node yang terletak sebelum node baru

disisipkan (pPre)• Atur next node baru agar menunjuk node sesudah posisi

penyisipan.• Atur next pPre agar menunjuk node baru. Nilai (pPre) 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 either to an empty list or at

the beginning of the list)

Page 10: Algoritma dan Struktur Data

Menambahkan node ke list kosong

Before: Code: pNew -> next = pHead; // set link to

NULL

pHead = pNew;// point list to first node

After:

39pNew

pHead

pPre

39pNew

pHead

pPre

Page 11: Algoritma dan Struktur Data

Menambahkan node ke awal list

Before: Code (same): pNew -> next = pHead; // set link to

NULL

pHead = pNew;// point list to first node

After:

39pNew

pHead

pPre

75 124

39pNew

pHead

pPre

75 124

Page 12: Algoritma dan Struktur Data

Menambahkan node di tengah list

Before: Code pNew -> next = pPre -> next;

pPre -> next = pNew;

After:

64pNew

pPre

55 124

64pNew

pPre

55 124

Page 13: Algoritma dan Struktur Data

Menambahkan node akhir list

Before: Code pNew -> next = NULL;

pPre -> next = pNew;

After:

144pNew

pPre

55 124

144pNew

pPre

55 124

Page 14: Algoritma dan Struktur Data

Kode untuk menambah data ke linked list

• Untuk menambah data pada linked list, harus diketahui head pointer (pHead), pointer yang menunjuk node sebelum tempat penyisipan (pPre) data yang akan disisipkan (item).

//insert a node into a linked list struct node *pNew; pNew = (struct node *) malloc(sizeof(struct node)); pNew -> data = item; if (pPre == NULL){ //add before first logical node or to an empty list

pNew -> next = pHead; pHead = pNew; } else { //add in the middle or at the end pNew -> next = pPre -> next; pPre -> next = pNew; }

Page 15: Algoritma dan Struktur Data

Menghapus node dari linked list

• Untuk menghapus sebuah node:

– Cari node yang akan dihapus (pCur) dan node pendahulunya (pPre).

– Ubah pPre->next agar menunjuk pCur->next.

– Hapus pCur menggunakan fungsi free

Page 16: Algoritma dan Struktur Data

Menghapus node pertama dari linked list

Before: Code:

pHead = pCur -> next;

free(pCur);

After:

pHead

pPre

75 124

pCur

pHead

pPre

Recycled 124

pCur

Page 17: Algoritma dan Struktur Data

Menghapus node dari linked list – kasus umum

Before: Code:

pPre -> next = pCur -> next;

free(pCur);

After:

75 12496

pPre pCur

75 124Recycled

pPre pCur

Page 18: Algoritma dan Struktur Data

Kode untuk menghapus node dari linked list

• Untuk menghapus node dari linked list, harus diketahui head pointer (pHead), node yang akan dihapus (pCur), serta pendahulunya,

//delete a node from a linked list

if (pPre == NULL)

//deletion is on the first node of the list

pHead = pCur -> next;

else

//deleting a node other than the first node of the list

pPre -> next = pCur -> next;

free(pCur).

Page 19: Algoritma dan Struktur Data

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 listpPre = NULL;pCur = pHead;//search until the target value is found or the end of the list is reachedwhile (pCur != NULL && pCur -> data != target) { pPre = pCur; pCur = pCur -> next;}//determine if the target is found or ran off the end of the listif (pCur != NULL) found = 1;else found = 0;

Page 20: Algoritma dan Struktur Data

Traversing a Linked List

• mengunjungi semua node yang ada pada list dari head sampai node terakhir

//traverse a linked list

Struct node *pWalker;

pWalker = pHead;

printf(“List contains:\n”);

while (pWalker != NULL){

printf(“%d ”, pWalker -> data);

pWalker = pWalker -> next;

}