Lecture Notes On Algorithms and Data Structures. Oleh Thompson Susabda Ngoen

dokumen-dokumen yang mirip
DOUBLY LINKED LIST PROGRAM : DOUBLY LINKED LIST (TAMBAH SIMPUL DI BELAKANG)

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

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

Algoritma dan Struktur Data. Ramos Somya

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

MODUL 6 SINGLE & DOUBLE LINKED LIST

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

KONSEP POINTER DAN LINKED LIST

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

Linked List dan Implementasinya dalam Bahasa Java

KONSEP POINTER DAN LINKED LIST

Array VS Linked List

Algoritma dan Struktur Data

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

SINGLE LINKED LIST (NON CIRCULAR)

: Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Linked List. Single Linked List

LIST. Dewi Sartika, M.Kom

Tutorial - Single Linked List

ALGORITMA DAN STRUKTUR DATA

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

Algoritma Pemrograman & Struktur Data

KONSEP POINTER DAN LINKED LIST

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

DIG1G3 Implementasi Struktur Data

Single Linked List. Single Linked List

Review : Sifat Implementasi Linear List dengan Array

LAPORAN PRAKTIKUM IX. Oleh:

STRUKTUR DATA (2) Single Linked List

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

Gambar 1. Single Linked List

Praktikum Algoritma dan Struktur Data

Struktur Data II. Single Linked List - Non circular

Algoritma dan Struktur Data. Pertemuan 7 Linked List

List: Pokok Bahasan dan TIK

05. Double Linked List

SENARAI BERANTAI (LINK LIST)

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

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

STRUKTUR DATA single linked list non circular

BAB IX LINKED LIST (SENARAI BERANTAI)

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

Linked List 6.3 & 7.3 NESTED LOOP

Ujian Tengah Semester Struktur Data dan Algoritma Fakultas Ilmu Komputer, Universitas Indonesia 9 November 2006

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

Gambar 1. Single Linked List

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

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

DIG1G3 Implementasi Struktur Data

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

Algoritma dan Struktur Data. Linked List

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

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

BAB IX LINKED LIST (SENARAI BERANTAI)

MODUL IV STACK A. TUJUAN

Lab. Teknik Informatika Struktur Data 1

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

KUM 3 IMPLEMENTASI LIST

STRUKTUR DATA. Literatur

Praktikum Algoritma dan Struktur Data 2010

Single Linked List (1)

Modul Praktikum Algoritma dan Struktur Data

BAB IV Antrian(Queue)

Gambar 1. Single Linked List

BAB II Senarai Berantai (Linked List)

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

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

LAPORAN PRAKTIKUM RESMI QUEUE

Algoritma Pemrograman & Struktur Data

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

STL DLL STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 3 : 29 Juni 2015

Pada kondisi ini proses penghapusan tidak bisa dilakukan Kondisi linked list memiliki hanya 1 data{satu simpul} Akhir. Akhir

Gambar 1. Single Linked List

04. Single Linked List

STL DLL STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 3 : 27 Juni 2016

4 LINKED LIST. 4.1 Istilah-istilah 1. Simpul Simpul terdiri dari dua bagian, yaitu : Bagian data Bagian pointer yang menunjuk ke simpul berikutnya.

Array dan Vector Linked List STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 2 : 23 Juni 2015

REPRESENTASI FISIK LIST LINEAR

MODUL PRAKTIKUM STRUKTUR DATA

KERUGIAN DAN KEUNTUNGAN LINKED LIST

Gambar 17.1Representasi Sebuah Node di Double Linked List. Gambar 17.2 Double Linked List

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

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

A. TUJUAN PEMBELAJARAN

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

Pertemuan 7. REVIEW dan QUIS

TIPE DATA ABSTRAK MENGGUNAKAN BAHASA C

Algoritma Dan Struktur Data II

ARNA FARIZA YULIANA SETIOWATI

5. QUEUE (ANTRIAN) TUJUAN PRAKTIKUM

QUEUE (ANTREAN) Pertemuan 6 PENGERTIAN QUEUE (ANTREAN)

Variasi List Linier. Nisa ul Hafidhoh, MT

QUEUE (ANTREAN) Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu

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

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II

Stack. Gambar 1.1 Stack

Struktur Data Array. Rijal Fadilah S.Si

Transkripsi:

Lecture Notes On Algorithms and Data Structures LINKED LIST Singly dan Doubly Oleh Thompson Susabda Ngoen Universitas Bina Nusantara Fakultas Ilmu Komputer 2003

Thompson S.Ngoen Linked List 1 Linked List adalah suatu struktur data linier. Berbeda dengan array yang juga merupakan struktur data linier dan tipe data komposit, linked list dibentuk secara dinamik. Pada saat awal program dijalankan elemen linked list belum data. Elemen linked list (disebut node) dibentuk sambil jalan sesuai instruksi. Apabila setiap elemen array dapat diakses secara langsung dengan menggunakan indeks, sebuah node linked list diakses dengan menggunakan pointer yang mengacu (menunjuk) ke node tersebut. Awal atau kepala linked list harus diacu sebuah pointer yang biasa diberi nama head. Pointer current (disingkat curr) digunakan untuk memindahkan pengacuan kepada node tertentu. Node Pembentuk Linked List Elemen pembentuk linked list disebut node. Node terdiri dari dua bagian, bagian data dan bagian kait (link). Bagian data berupa satu atau beberapa field. Bagian link terdiri dari pointer. Linked list yang node-nya mempunyai satu buah pointer disebut singly-linked list. Linked list yang node-nya mempunyai dua pointer, satu untuk mengait ke node berikutnya dan yang lain untuk mengait ke node sebelumnya, disebut doubly-linked list. Node dibentuk dengan structure. Untuk menyederhanakan pembahasan, dalam tulisan ini bagian data berupa satu buah field. Operasi Pada Linked List struct tnode { int data; struct tnode *next; ; Operasi yang berkaitan dengan struktur data linked list adalah: create, empty, insertathead, insertaftercurr, insertattail, retrieve, update, findfirst, findnext, findprev, deletenode, dan clear. ceate( ) membentuk linked list kosong empty( ) memeriksa status kosong suatu linked list insert_head( ) menambah node baru pada posisi awal linked list sehingga node ini menjadi node yang pertama, pointer current menunjuk ke node yang baru ditambahkan ini insert_curr( ) menambah node baru pada posisi setelah pointer current, pointer current menunjuk ke node yang baru ditambahkan ini insert_tail( ) menambah node pada akhir linked list, sehingga node ini menjadi node terakhir linked list; pointer current menunjuk kepada node yang baru ditambahkan ini

Thompson S.Ngoen Linked List 2 retrieve( ) mengembalikan nilai data node yang ditunjuk pointer current update( ) mengubah nilai data node yang ditunjuk pointer current findfirst( ) memindahkan pointer current ke posisi node pertama findnext( ) memindahkan pointer current ke posisi node berikutnya apabila tidak sedang berada pada posisi node terakhir findprev( ) memindahkan pointer current ke posisi node sebelumnya apabila tidak sedang berada pada posisi node pertama deletenode( ) menghapus node pada posisi current dan memindahkan pointer current ke posisi node pertama clear( ) menghapus linked list dengan membebaskan seluruh node satu persatu. Implementasi Linked List Fungsi create( ) memberi nilai awal NULL kepada pointer head dan curr (current). void create(struct tnode **head, struct tnode **curr) { *head= *curr= NULL; Fungsi empty( ) mengembalikan nilai satu apabila linked list masih kosong yang ditandai dengan pointer head yang bernilai NULL., selain itu dikembalikan nilai nol. int empty(struct tnode *head) { if (head== NULL) return 1; return 0; Fungsi insert_head( ) menambah node baru pada posis awal linked list. Node baru ini menjadi node pertama. Pointer head dan curr diubah sehingga mengacu ke node ini. Sebelum insert_head Setelah insert_head 10

Thompson S.Ngoen Linked List 3 Mula-mula bentuk node baru (). Pointer next pada node baru ini dikaitkan (menunjuk) ke node yang ditunjuk pointer head (). Ubah pointer head dan curr sehingga menunjuk node baru tersebut (). void insert_head(struct tnode **head, struct tnode **curr, int e) { struct tnode * node; node= (struct tnode *) malloc(sizeof(int)); node->data= e; node->next= *head; *head= *curr= node; Fungsi insert_curr( ) menambah node baru pada posisi setelah pointer curr. Apabila linked list masih kosong maka node ini menjadi node pertama. Pointer curr menunjuk ke node baru tersebut. Sebelum insert_curr Setelah insert_curr 10 Mula-mula bentuk node baru (). Pointer next pada node baru ini dikaitkan (menunjuk) ke node yang ditunjuk field next dari pointer curr (). Kaitkan field next pada node yang ditunjuk pointer

Thompson S.Ngoen Linked List 4 curr ke node baru tersebut (). Terakhir pindahkan pointer curr sehingga mengacu node baru tersebut (). void insert_curr(struct tnode **head, struct tnode **curr, int e) { struct tnode * node; node= (struct tnode *) malloc(sizeof(int)); node->data= e; if (*head==null) { *head= node; node->next= NULL; else { node->next= (*curr)->next; (*curr)->next= node; *curr= node; Fungsi insert_tail( ) menambah node baru pada posis akhir linked list. Pointer curr digerakkan sampai menunjuk node terakhir, lalu node baru dikaitkan. Node baru ini menjadi node terakhir. Pointer curr diubah sehingga mengacu ke node ini. Sebelum insert_tail Setelah insert_tail 10

Thompson S.Ngoen Linked List 5 Mula-mula bentuk node baru (). Pointer curr dipindahkan ke posisi node terakhir (). Ubah link pada node terakhir ini sehingga menujuk kepada node baru(). Terakhir pindahkan pointer curr sehingga mengacu node baru tersebut (). void insert_tail(struct tnode **head, struct tnode **curr, int e) { struct tnode *node; node= (struct tnode *) malloc(sizeof(int)); node->data= e; node->next= NULL; if (*head== NULL) *head= node; else { while ((*curr)->next!= NULL) *curr= (*curr)->next; (*curr)->next= node; *curr= node; Fungsi retrieve( ) mengembalikan data pada node yang sedang ditunjuk pointer curr atau mengembalikan suatu nilai tertentu apabila linked list dalam keadaan kosong. int retrieve(struct tnode *head, struct tnode *curr) { if (empty(head)) return -32768; return curr->data; Fungsi update( ) mengubah nilai data pada node yang ditunjuk pointer curr jika linked list tidak kosong. Nilai satu akan dikembalikan apabila perubahan data berhasil dilakukan.

Thompson S.Ngoen Linked List 6 int update(struct tnode *head, struct tnode* curr, int e) { if (empty(head)) return 0; curr->data= e; return 1; Fungsi findfirst( ) akan memindahkan pointer curr ke posisi node pertama, yaitu node yang ditunjuk pointer head, jika linked list tidak kosong. Nilai satu akan dikembalikan apabila pemindahan pointer curr berhasil dilakukan. int findfirst(struct tnode *head, struct tnode **curr) { if (empty(head)) return 0; *curr= head; return 1; Fungsi findnext( ) akan memindahkan pointer curr ke posisi node berikutnya apabila linked list tidak kosong dan pointer curr tidak sedang berada pada posisi node terakhir. Nilai satu akan dikembalikan apabila pemindahan pointer curr berhasil dilakukan. int findnext(struct tnode *head, struct tnode **curr) { if (empty(head)) return 0; if ((*curr)->next == NULL) return 0; *curr= (*curr)->next; return 1; Fungsi findprev( ) akan memindahkan pointer curr ke posisi node sebelumnya apabila linked list tidak kosong dan pointer curr tidak sedang berada pada posisi node pertama. Nilai satu akan dikembalikan apabila pemindahan pointer curr berhasil dilakukan. Pemindahan dilakukan dengan bantuan sebuah pointer lain. Pada mulanya pointer ini mengacu kepada node pertama. Pointer ini berpindah ke node selanjutnya sampai pada posisi satu node sebelum node yang diacu pointer curr. int findprev(struct tnode *head, struct tnode **curr) { if (*curr== head) return 0; struct tnode *temp= head; while (temp->next!= *curr) temp= temp->next; *curr= temp; return 1; Fungsi deletenode( ) akan menghapus node pada posisi curr jika linked list tidak kosong dan memindahkan pointer curr ke posisi node pertama, atau curr bernilai NULL apabila linked list menjadi kosong setelah dihapus. Sebelum deletenode Setelah deletenode

Thompson S.Ngoen Linked List 7 Penghapusan dilakukan dengan bantuan sebuah pointer lain. Pada mulanya pointer ini mengacu kepada node pertama (). Pointer ini berpindah ke node selanjutnya sampai pada posisi satu node sebelum node yang diacu pointer curr (). Mengubah link pada node yang diacu pointer temp sehingga menunjuk kepada node setelah node hyang ditunjuk pointer curr (), dan membebaskan node yang sedang diacu pointer curr (). int deletenode(struct tnode **head, struct tnode **curr) { struct tnode *temp; if (empty(*head)) return 0; if (*curr== *head) *head= (*head)->next; else { temp= *head; while(temp->next!= *curr) temp= temp->next;

Thompson S.Ngoen Linked List 8 temp->next= (*curr)->next; free(*curr); *curr= *head; return 1; Fungsi clear( ) menghapus linked list dengan membebaskan seluruh node satu persatu. Pointer head dan curr diberi nilai NULL. void clear(struct tnode **head, struct tnode **curr) { *curr= *head; while (*curr!= NULL) { *head= *curr; *curr= (*curr)->next; free(*head); *head= *curr= NULL; Node Pembentuk Doubly-Linked List Doubly-linked list mempunyai dua field pointer, satu untuk mengait ke node berikutnya (biasanya diberi nama next) dan yang lainnya untuk mengait ke node sebelumnya (biasanya diberi nama prev). struct tnode { int data; struct tnode *prev, *next; ; Operasi Pada Doubly-Linked List Operasi yang berkaitan dengan struktur data doubly linked list adalah: create, empty, insertafter, insertbeforer, retrieve, update, findfirst, findnext, findprev, deletenode, dan clear. Operasi yang berbeda dengan singly linked list dijelas di bawah ini. insert_after( ) menambah node baru pada posisi setelah pointer current, pointer current menunjuk ke node yang baru ditambahkan ini insert_before( ) menambah node pada posisi sebelum pointer current, pointer current menunjuk kepada node yang baru ditambahkan ini Implementasi Doubly-Linked List Fungsi insert_after( ) menambah node baru pada posisi setelah pointer curr. Apabila linked list masih kosong maka node ini menjadi node pertama. Pointer curr menunjuk ke node baru tersebut.

Thompson S.Ngoen Linked List 9 Sebelum insert_after 40 Setelah insert_after 40 Mula-mula bentuk node baru (). Pointer next pada node baru ini dikaitkan (menunjuk) ke node yang ditunjuk field next dari pointer curr (). Kaitkan field next pada node yang ditunjuk pointer curr ke node baru tersebut (). Terakhir pindahkan pointer curr sehingga mengacu node baru tersebut ().