BAB II Senarai Berantai (Linked List)

dokumen-dokumen yang mirip
Praktikum 2. Senarai Berantai (Linked List) POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

Senarai berantai. linked list. Pertemuan keenam Struktur data st3telkom.ac.id. by : tenia wahyuningrum & Sisilia Thya Safitri

Single Linked List (1)

KONSEP POINTER DAN LINKED LIST

LIST. Dewi Sartika, M.Kom

04. Single Linked List

MODUL 6 SINGLE & DOUBLE LINKED LIST

SINGLE LINKED LIST (NON CIRCULAR)

Pertemuan 3. Perubah Dinamis (Dinamic variable) Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

A. TUJUAN PEMBELAJARAN

05. Double Linked List

KONSEP POINTER DAN LINKED LIST

Algoritma dan Struktur Data. Pertemuan 7 Linked List

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

Data structure :Metode LINK LIST. Kusnawi, S.Kom, M.Eng STMIK AMIKOM Yogyakarta

STRUKTUR DATA (2) Single Linked List

BAB IX LINKED LIST (SENARAI BERANTAI)

Praktikum Algoritma dan Struktur Data

LAPORAN PRAKTIKUM IX. Oleh:

Review : Sifat Implementasi Linear List dengan Array

Linked List 6.3 & 7.3 NESTED LOOP

DOUBLE LINKED LIST. Danang Wahyu Utomo Danang Wahyu Utomo, M.Kom, M.CS

//membuat sebuah tipe data baru yang terdiri dari. //field data bertipe integer //field next merupakan pointer dari list

PENGENALAN List merupakan sebuah pemikiran/konsep struktur data yang sangat dasar pada pemrograman agar lebih fleksibel. Setiap elemen akan ditambahka

Algoritma dan Struktur Data. Linked List

1. Traversing Untuk algoritma traversing sama seperti pada single Link List

BAB IX LINKED LIST (SENARAI BERANTAI)

SINGLE LINKED LIST NON CIRCULAR (SENARAI BERANTAI TUNGGAL TIDAK BERPUTAR)

Struktur Data II. Single Linked List - Non circular

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

Array VS Linked List

Modul Praktikum Algoritma dan Struktur Data

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Lab. Teknik Informatika Struktur Data 1

Gambar 3.1. Circular Single Linked List. Deklarasi bisa dilihat kembali di Single Linked List atau Double Linked List.

Algoritma dan Struktur Data

Pengenalan Struktur Data dan Algoritma

Tutorial - Single Linked List

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

DOUBLY LINKED LIST PROGRAM : DOUBLY LINKED LIST (TAMBAH SIMPUL DI BELAKANG)

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

STRUKTUR DATA single linked list non circular

REPRESENTASI FISIK LIST LINEAR

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

ALGORITMA & PEMROGRAMAN

SENARAI BERANTAI (LINK LIST)

Kode : IF2121 NIM :... Matakuliah : Algoritma dan Struktur Data Nama :... Hari, Tanggal : Senin, 13 November 2017 Waktu : 150 Menit

Praktikum Algoritma dan Struktur Data 2010

Algoritma dan Struktur Data. Ramos Somya

A. TUJUAN PEMBELAJARAN

KERUGIAN DAN KEUNTUNGAN LINKED LIST

STRUKTUR DATA. Literatur

Double linked list. Gambar 1. Double linket list dengan empat simpul Deklarasi Double Linked List di dalam Pascal :

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

BAB IV Antrian(Queue)

Linked List dan Implementasinya dalam Bahasa Java

PERTEMUAN KE 11. Linked List. Apa Itu Linked List?

Bab 4 Pointer dan Struktur Data Dinamik 16 BAB IV POINTER DAN STRUKTUR DATA DINAMIK TUJUAN PRAKTIKUM TEORI PENUNJANG

Menghapus Pointer Statement yang digunakan untuk menghapus pointer adalah Dispose, yang mempunyai bentuk umum : Dispose(peubah) ;

A B C D E F. Gambar 1. Senarai berantai dengan 6 simpul

Algoritma Pemrograman & Struktur Data

List akan disimpan dalam bagian memori komputer yang dinamakan HEAP

03 LINKED LIST. Slide 0 voice. Slide 1 voice. Slide 2 voice. Thompson Susabda Ngoen 1 P a g e

Algoritma Pemrograman & Struktur Data

DIG1G3 Implementasi Struktur Data

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

TIM ASISTEN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN 2017

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 1)

BAB VII SENARAI BERANTAI (List)

Pertemuan 4. Single Linked List non Circular Menggunakan Head dan Tail

Variasi List Linier. Nisa ul Hafidhoh, MT

3. DOUBLE LINK LIST. Lab. Teknik Informatika Struktur Data 1

Praktikum 3. Konsep double linked list Struktur double linked list Implementasi double linked list dalam Bahasa C

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

BAB V LINKED LIST. Pointer A 50 B Alamat Memori. Gambar 5-1 : Logika Linked List

A. TUJUAN PEMBELAJARAN

Struktur. Bab 4: Linked LIst 4/8/2015

Linked List. Bandung 2013

QUEUE (ANTRIAN) Depan=1 Belakang=

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

Struktur. Bab 4: Linked LIst 4/8/2015

ALGORITMA DAN STRUKTUR DATA

Search And Insert Problem (Sorted Double Linkedlist Solution)

LINKED LIST. Double Linked List adalah :

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

RESUME A B C D. Gambar 1 Double Linked list dengan Empat Simpul

KUM 3 IMPLEMENTASI LIST

LIST BERKAIT(LINKED LIST)

MODUL PRAKTIKUM STRUKTUR DATA. Dosen Pengampu M.Bahrul Ulum, S.Kom., M.Kom. Asisten Lab Mia Kastina PROGRAM STUDI TEKNIK INFORMATIKA

Variasi List Linier (Bagian 2)

Pengenalan Struktur Data. Farah Zakiyah Rahmanti 2014

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

Algoritma Pemrograman & Struktur Data

Transkripsi:

BAB II Senarai Berantai (Linked List) Tujuan 1. Memahami pengertian linked list, gunanya dan dapat mengimplementasikan dalam pemrograman 2. Dapat mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan menggunakan linked list, sekaligus menyelesaikannya Dalam pemakaian sehari-hari istilah senarai berantai (linked list) adalah kumpulan linear sejumlah data. Gambar 2.1 a di bawah ini menunjukkan senarai berantai yang berisi daftar belanjaan, yang berupa barang pertama, kedua, ketiga dan seterusnya. Untuk hari berikutnya, maka daftar tersebut bisa berubah sesuai dengan barang yang harus dibeli lagi atau barang yang tidak perlu dibeli lagi. Gambar 2.1 b menunjukkan daftar belanjaan semula setelah ditambah 3 barang lain dan menghapus 2 barang (dengan mencoret) yang tidak perlu dibeli lagi 2.1 Definisi Linked List Pengolahan data yang kita lakukan menggunakan komputer seringkali mirip dengan ilustrasi di atas, yang antara lain berupa penyimpanan data dan pengolahan lain dari sekelompok data yang telah terorganisir dalam sebuah urutan tertentu. Salah satu cara untuk menyimpan sekumpulan data yang kita miliki adalah menggunakan larik. Telah kita bicarakan dalam Bab 1, keuntungan dan kerugian pemakaian larik untuk menyimpan sekelompok data yang banyaknya selalu berubah dan tidak diketahui dengan pasti kapan penambahan atau penghapusan akan berakhir. 2.2 Single Linked List Single linked list atau biasa disebut linked list terdiri dari elemen-elemen individu, dimana masing-masing dihubungkan dengan pointer tunggal. Masing-masing elemen terdiri dari dua bagian, yaitu sebuah data dan sebuah pointer yang disebut dengan pointer net. Dengan menggunakan struktur two-member seperti ini, linked list dibentuk dengan 7

cara menunjuk pointer net suatu elemen ke elemen yang mengikutinya seperti gambar 2.1. Pointer net pada elemen terakhir merupakan NULL, yang menunjukkan akhir dari suatu list. Elemen pada awal suatu list disebut, dan elemen terakhir dari suatu list disebut tail. tail data pointer NULL Gambar 2.1 Elemen yang Dihubungkan Bersama Dalam Bentuk Linked List Untuk mengakses elemen dalam linked list, dimulai dari dan menggunakan pointer net dari elemen selanjutnya untuk berpindah dari elemen ke elemen berikutnya sampai elemen yang diminta dicapai. Dengan single linke list, list dapat dilintasi hanya satu arah dari ke tail karena masing-masing elemen tidak terdapat link dengan elemen sebelumnya. Sehingga, apabila kita mulai dari dan berpindah ke beberapa elemen dan berharap dapat mengakses elemen sebelumnya, kita harus mulai dari. Secara konseptual, linked list merupakan deretan elemen yang berdampingan. Akan tetapi, karena elemen-elemen tersebut dialokasikan secara dinamis (menggunakan malloc), sangat penting untuk diingat bahwa kenyataannya, linked list akan terpencarpencar di memori seperti Gambar 2.2. Pointer dari elemen ke elemen berarti sebagai penjamin bahwa semua elemen dapat diakses. data pointer NULL Gambar 2.2 Elemen Pada Linked List Dihubungkan Secara Terpencar-Pencar pada Alamat Memori 8

2.2.1 Representasi Simpul (Node) Struktur node pada linked list merupakan suatu simpul(node) yang berisi pointer ke suatu data yang merupakan data dirinya sendiri. Model struktur dari linked list tersebut dalam C adalah sebagai berikut: typedef struct node *list; struct node { int datalist; struct node *net; }; dilanjutkan dengan deklarasi dari pointer ke struktur di atas sebagai berikut: struct node *; atau list ; 2.2.2 Alokasi Simpul Ketika sebuah variabel dideklarasikan, terlebih dahulu harus diinisialisasi. Demikian juga dengan pengalokasian secara dinamis. Sehingga, fungsi untuk mengalokasikan sebuah node baru, fungsi allocate_node() menggunakan malloc() untuk mendapatkan memori aktual, yang akan menginisialisasi suatu field data. net selalu diinisialisasi sebagai NULL. Untuk melihat kemungkinan alokasi memori gagal, maka fungsi allocate_node menghasilkan 0, bila berhasil maka menghasilkan 1. Untuk membebaskan node digunakan fungsi free_node. Fungsi dari alokasi node adalah sebagai berikut : int allocate_node(int data, list *new) { new = (list) malloc (sizeof(node)); if(new==null) return 0; } new->datalist = data; new->net=null; return 1; 9

Untuk inisialisasi list setelah alokasi untuk node pertama maka ditambahkan statement sebagai berikut: = new; Ilustrasi dari fungsi i allocate_node() adalah sebagai berikut new = (list) malloc (sizeof(node)); new->datalist = data; new new->net=null; new Untuk inisialisasi list setelah alokasi untuk node pertama ilustrasinya adalah sebagai berikut: = new; new Fungsi free_node()menggunakan memori dinamis dengan fungsi free(). free() akan menghancurkan node yang menunjuk ke pointer yang dilewati, sehingga tempat yang ada dapat dipakai untuk lainnya. Akan tetapi, pointer yang melewati free() tidak otomatis menjadi null, tetapi akan menunjuk ke node yang sudah tidak ada. Karena itu pointer harus didefinisikan dengan NULL. void free_node(list p_l) { free(p_l); p_l=null; } Ilustrasi dari fungsi free_node()dapat dilihat pada gambar berikut : free(*p_l); 10

p_l *p_l=null; p_l 2.2.3 Operasi pada Linked List Pada sub bab ini akan dijelaskan mengenai operasi yang terpenting pada linked list, yaitu menambahkan node () dan menghapus node (delete). 2.2.3.1 Insert Fungsi pada linked list meliputi : - sebagai node awal () dari linked list - setelah node tertentu - sebelum node tertentu - sebagai node akhir (tail) dari linked list Insert sebagai node awal () dari linked list Statement kelanjutan dengan deklarasi seperti diatas untuk sebagai node awal () dari linked list adalah sebagai berikut: void as(list ) { ->net=; = ; } ilustrasi dari fungsi diatas adalah sebagai berikut: kondisi awal 11

->net=; = ; Insert setelah node tertentu Statement untuk setelah node tertentu dari linked list adalah sebagai berikut: void afternode(int, list ) { list after; after = ; do after = after->net; while (after->datalist!= ); ->net = after->net; after->net = ; } ilustrasi dari fungsi diatas adalah sebagai berikut: after = ; after 12

do after = after->net; while (after->datalist!= ); after ->net = after->net; after after->net = ; after Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Pointer net dari elemen baru menunjuk elemen setelah elemen tertentu 2. Pointer net elemen sebelumnya menunjuk ke elemen baru Insert sebelum node tertentu Statement untuk setelah node tertentu dari linked list adalah sebagai berikut: void beforenode(int, list ) { list before, prevbefore; if (->datalist = ) as() 13

} else { } before = ; do prevbefore = before; before = before->net; while (before->datalist!= ); ->net = before; prevbefore->net = ; ilustrasi dari fungsi diatas adalah sebagai berikut: before = ; before do prevbefore = before; before = before->net; while (before->datalist!= ); prevbefore before ->net = before; prevbefore before 1

prevbefore->net = ; prevbefore before Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Telusuri list sampai elemen tertentu, catat juga elemen sebelumnya 2. Lakukan penyisipan sebelum elemen tertentu tersebut Insert di akhir (tail) dari linked list Statement untuk di akhir dari list adalah sebagai berikut: void astail(list ) { list tail; tail = ; do tail = tail->net; while (tail->net!= NULL); tail->net = ; tail = tail->net; } ilustrasi dari fungsi diatas adalah sebagai berikut: tail = ; tail 15

do tail = tail->net; while (tail->net!= NULL); tail tail->net = ; tail tail = tail->net; tail Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Telusuri list sampai elemen terakhir (tail->net=null) 2. Lakukan pentisipan setelah elemen terakhir 2.2.3.2 Delete Fungsi delete pada linked list meliputi : - delete sebagai simpul pertama() dari linked list - delete setelah simpul tertentu - delete simpul terakhir 16

Penghapusan Simpul Pertama: first 1 2 3 first 1 2 3 p first 2 3 1 p first 2 3 Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Pointer first diarahkan pada data ke-2 2. Pointer p diarahkan pada data ke-1 3. Bebaskan pointer p (secara otomatis data ke-1 terhapus) Penghapusan Setelah Simpul Tertentu first 1 2 3 first 1 2 3 p first 1 2 3 p 17

first 1 2 Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Arahkan pointer first s/d data yang ditunjuk 2. Pointer p diarahkan pada first->net 3. Arahkan pointer first->net pada p->net. Bebaskan pointer p (secara otomatis data setelah simpul tertentu terhapus) Penghapusan Simpul Terakhir first 1 2 3 first 1 2 3 p first 1 2 3 first 1 2 3 Langkah-langkah untuk proses di atas adalah sebagai berikut: 1. Telusuri simpul s/d first->net = NULL 2. Arahkan pointer p ke first 3. Bebaskan pointer p->net (Simpul Terakhir). Arahkan p->net ke NULL 18

2.3 Double Linked List Elemen-elemen dihubungkan dengan dua pointer dalam satu elemen. Struktur ini menyebabkan list melintas baik ke depan maupun ke belakang. Masing-masing elemen pada double linked list terdiri dari tiga bagian, disamping data dan pointer net, masing-masing elemen dilengkapi dengan pointer prev yang menunjuk ke elemen sebelumnya. Double linked list dibentuk dengan menyusun sejumlah elemen sehingga pointer net menunjuk ke elemen yang mengikutinya dan pointer prev menunjuk ke elemen yang mendahuluinya. Untuk menunjukkan dari double linked list, maka pointer prev dari elemen pertama menunjuk NULL. Untuk menunjukkan tail dari double linked list tersebut, maka pointer net dari elemen terakhir menunjuk NULL. Susunan elemen yang dihubungkan dalam bentuk double linked list dapat dilihat pada Gambar 2.3 he ta da poin NUL Gambar 2.3 Elemen yang Dihubungkan dalam Bentuk Double Linked List Untuk melintas kembali melalui double linked list, kita gunakan pointer prev dari elemen yang berurutan pada arah tail ke. Double linked list mempunyai fleksibilitas yang lebih tinggi daripada single linked list dalam perpindahan pada list. Bentuk ini sangat berguna ketika akan meletakkan suatu elemen pada list dan dapat memilih dengan lebih bijaksana bagaimana memindahkannya. Sebagai contoh, salah satu fleksibilitas dari double linked list adalah dalam hal memindahkan elemen daripada menggunakan single linked list. 2. Circular List Circular list adalah bentuk lain dari linked list yang memberikan fleksibilitas dalam melewatkan elemen. Circular list bisa berupa single linked list atau double linked list, tetapi tidak mempunyai tail. Pada circular list, pointer net dari elemen terakhir menunjuk ke elemen pertama dan bukan menunjuk NULL. Pada double linked circular list, pointer prev dari elemen pertama menunjuk ke elemen terakhir. 19

Gambar 2. menunjukkan bagaimana susunan dari single linked circular list. Circular list yang akan dijelaskan pada bab ini merupakan single linked circular list. Kita hanya menangani link dari elemen terakhir kembali ke elemen pertama. data pointer NULL Gambar 2. Single Linked Circular List 2.5 Kesimpulan 1. Linked list adalah sebuah struktur untuk menyimpan data yang bersifat dinamik 2. Beberapa operasi dapat diterapkan pada linked list seperti sisip(), hapus(delete) 3. Operasi-operasi yang ada pada linked list relatif lebih sulit jika dibandingkan dengan operasi-operasi pada struktur yang statis 2.6 Latihan 1. Buatlah linked list untuk data mahasiswa, tambahkan prosedur untuk menambah dan menghapus data 2. Tambahkan tampilan di output pada program di atas untuk menghitung nilai ratarata, dimana nrata=total/jumlah_siswa; total didapatkan dari menambahkan nilai yang didapat tiap mahasiswa 20