Algoritma dan Struktur Data. Linked List

dokumen-dokumen yang mirip
Algoritma dan Struktur Data. Pertemuan 7 Linked List

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

Algoritma dan Struktur Data. Pertemuan 6 Alokasi Memori Dinamis

ASD. Alokasi Memori Dinamis

SENARAI BERANTAI (LINK LIST)

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

KONSEP POINTER DAN LINKED LIST

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

SINGLE LINKED LIST (NON CIRCULAR)

LIST. Dewi Sartika, M.Kom

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

KONSEP POINTER DAN LINKED LIST

Algoritma dan Struktur Data. Ramos Somya

04. Single Linked List

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

Algoritma dan Struktur Data. Pointer Pada Struct

Algoritma Pemrograman & Struktur Data

Single Linked List (1)

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

05. Double Linked List

Algoritma Pemrograman & Struktur Data

ALGORITMA DAN STRUKTUR DATA

Praktikum Algoritma dan Struktur Data

Algoritma dan Struktur Data. Pertemuan 5 Pointer

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

MODUL 6 SINGLE & DOUBLE LINKED LIST

Pengenalan Struktur Data. Farah Zakiyah Rahmanti 2014

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

REPRESENTASI FISIK LIST LINEAR

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

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

Review : Sifat Implementasi Linear List dengan Array

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

A. TUJUAN PEMBELAJARAN

Linked List 6.3 & 7.3 NESTED LOOP

Struktur Data II. Single Linked List - Non circular

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

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Pointer & Function. Alfa Faridh Suni, S.T., M.T. PTIK

DIG1G3 Implementasi Struktur Data

STRUKTUR DATA (2) Single Linked List

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

BAB II Senarai Berantai (Linked List)

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

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

POINTER. Tim Alpro Teknik Informatika

Lab. Teknik Informatika Struktur Data 1

Array VS Linked List

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

BAB IX LINKED LIST (SENARAI BERANTAI)

STRUKTUR DATA single linked list non circular

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

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

Pendahuluan Pemrograman Mikrokontroler

01. Review Array, Pointer dan Struktur

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

Algoritma dan Struktur Data

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

Tutorial - Single Linked List

Menginisialisasi array sama dengan memberikan nilai awal array pada saat didefinisikan. int nilai[6] = {8,7,5,6,4,3};

LIST BERKAIT(LINKED LIST)

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

MODUL PRAKTIKUM STRUKTUR DATA

Struct Lanjutan: Studi Kasus

ALGORITMA & PEMROGRAMAN

Praktikum Algoritma dan Struktur Data 2010

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

Apakah Anda sering kesulitan untuk

BAB 10 POINTER 5.1 Tujuan 5.2 Pengertian Pointer Perubah dinamis pointer

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

TIM ASISTEN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN 2017

Pertemuan 7. REVIEW dan QUIS

LAPORAN PRAKTIKUM RESMI QUEUE

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

A. TUJUAN PEMBELAJARAN

A. TUJUAN PEMBELAJARAN

POINTER. Tim Alpro Teknik Informatika

LAPORAN PRAKTIKUM IX. Oleh:

Pengenalan Struktur Data dan Algoritma

Modul Praktikum Algoritma dan Struktur Data

BAB IV Antrian(Queue)

ARRAY DINAMIS. Type. Pengenal = Simpul Simpul = Type. (Nama var) : ( Type data)

STRUKTUR DATA Pertemuan 1 s.d 8

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

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

Struktur Data. Tumpukan : Definisi & Operasi. Pertemuan 4 PROBLEM ALGORITHM DATA IMPLEMENTATION. Pert. 4b Struktur Data - FMIPA USD

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

Algoritme dan Pemrograman

MODUL. Pointer. Modul Praktikum C++ Dasar Pemrograman Komputer JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK

Praktikum 5. Antrian (Queue)

BAB VI BAHASA C Pendahuluan

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

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

Algoritma dan Struktur Data Praktikum 3. Pointer

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

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

STRUKTUR DATA Pertemuan 1 s.d 8

Transkripsi:

Algoritma dan Struktur Data Linked List

Syntax: struct nama_struct { tipe_data_1 nama_var_1; tipe_data_2 nama_var_2; tipe_data_3 nama_var_3; }; 2

KONSEP ALOKASI MEMORY DINAMIS 1. Deklarasikan pointer yang menunjuk variabel yang akan dibuat 2. Jika pada saat program berjalan variabel tersebut dibutuhkan Pesan slot memori untuk menyimpan variabel (malloc) Simpan alamat slot memori pada pointer no 1 Gunakan variabel sesuai kebutuhan dengan cara akses tak langsung melalui pointer Hapus variabel / lepas slot memori setelah variabel selesai digunakan (free)

#include <stdio.h> #include <conio.h> #include <stdlib.h> Contoh malloc()- float void main() { //deklarasi pointer float *pjari, *pluas; //memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer pjari = (float *)malloc(sizeof(float)); pluas = (float *)malloc(sizeof(float)); if (pjari!= NULL && pluas!= NULL){//jika berhasil memesan memori //gunakan variabel jari dan luas melalui pointer *pjari = 7; *pluas = 3.14 * *pjari * *pjari; printf("lingkaran dengan jari-jari : %f\n", *pjari); printf("luasnya : %f\n", *pluas); } //menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas free(pjari); free(pluas); } getch();

Linked List == kereta???? Page 5 5

Apakah Linked List itu? Elemen (disebut dengan CELL, atau SEL dalam bahasa Indonesia) yang mungkin terletak terpisahpisah di memory, disambungkan dengan pointer. Tiap sel berisi dua informasi : nilai dan pointer ke sel berikutnya nilai Pointer to next CELL nilai Pointer to next CELL nilai Pointer to next CELL CELL

Mengapa memakai Linked List? 1. Mudah untuk menambahkan dan menghapus elemen(pada array tidak mungkin menambahkan elemen, karena banyaknya elemen sudah ditentukan dari awal) 2. Panjang list bisa diubah dengan bebas (panjang array fixed) 3. Mudah untuk menyambungkan beberapa list, maupun memutuskannya (array tidak bisa) 4. Memungkinkan user mendesain struktur data yang kompleks

Struktur linked List phead A B C Node (elemen) linked list saling berkait melalui pointer. Bagian next sebuah node menunjuk alamat node selanjutnya phead: pointer yang menunjuk node pertama

Struktur linked List phead A B C Node terakhir menunjuk NULL Setiap node terdiri atas Isi data Next, yaitu pointer ke node selanjutnya pada list

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;

Banyaknya anggota Array vs linked list Banyaknya elemen array ditentukan di awal & jumlahnya tetap Elemen linked list dibuat di memori ketika dibutuhkan (ingat Alokasi memory dinamis). Jumlahnya dinamis, dapat bertambah dan berkurang sesuai keperluan Cara mengakses elemen Elemen array diakses lewat indeks Untuk mengakses elemen linked list, harus dilakukan penelusuran elemen list

Array vs Linked List Array Linked List Penambahan dan penghapusan elemen Tidak mungkin Mungkin Panjang list Fixed Bisa diubah Akses ke elemen cepat (harus mengikuti pointer satu demi satu) lambat

Array vs Linked List 1 2 3 a[0] a[1] a[2] int a[3]; int n; header 13 address 13 address 18 address 24 1 18 2 24 3 value value Pointer ke sel berikutnya (next) next value next (NULL) Array Address tiap sel berurutan Linked List Address tidak berurutan Akses ke tiap sel dimulai dari header

Cara menampilkan isi sel tertentu Pada array (misalnya nama array: a), isi sel tertentu dapat ditampilkan dengan cara a[nomer urut sel keberapa]. Misalnya a[5] akan menampilkan isi sel ke-6. Hal ini karena satu sel dengan sel yang lain terletak pada posisi yang berurutan di memory. Pada linked list, kita tidak tahu secara langsung, sel itu terletak dimana dalam memory. Akses harus dilakukan satu persatu, urut mulai dari sel terdepan

Cara menampilkan isi sel tertentu Tampilkan isi (value) sel ke-3! address header 37 38 40 52 37 4 38 2 40 13 52 40 Sel ke-1 pointer Sel ke-1 isi: value=4 address sel berikutnya=38 NULL

NULL POINTER Nilai yang dimiliki sebuah pointer adalah address pada memory dimana data tersimpan Pointer yang tidak menunjuk ke address manapun disebut dengan NULL pointer. Maksudnya, satu kondisi khusus dimana pointer itu belum diset dengan sebuah address tertentu Pada stdio.h biasanya didefinisikan dengan nilai 0 Saat fungsi fopen,malloc dieksekusi, jika terdapat error, maka nilai yang dikembalikan adalah NULL Pada kuliah ini, NULL disimbolkan dengan kotak yang diberi garis diagona

Deklarasi head Sebelum membuat linked list, perlu dideklarasikan dan diinisialisasikan head, yaitu pointer yang menunjuk node pertama dari linked list node *phead = NULL;

Potongan kode linked list statis struct motor { float volts; float amps; struct motor *next; }; typedef struct motor motor; 1. Isi volts dan amps pada pm1, pm2 dan pm3 dengan data sembarang 2. Isi pm1.next dengan alamat pm2, pm2.next dengan alamat pm3, dan pm3.next dengan NULL 3. Tampilkan isi pm2 hanya dengan menggunakan pointer pm1 4. Tampilkan isi pm3 hanya dengan menggunakan pointer pm2 5. Tampilkan isi pm3 hanya dengan menggunakan pointer pm1 void main() { motor *pm1, *pm2, *pm3; }

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

Menambahkan node ke list kosong Before: pnew phead 39 Code: pnew -> next = phead; // set link to NULL phead = pnew;// point list to first node ppre After: pnew 39 phead ppre

Menambahkan node ke awal list Before: pnew 39 Code (same): pnew -> next = phead; // set link to NULL phead = pnew;// point list to first node phead 75 124 ppre After: pnew 39 phead 75 124 ppre

Menambahkan node di tengah list Before: pnew 64 Code pnew -> next = ppre -> next; ppre -> next = pnew; 55 124 ppre After: pnew 64 ppre 55 124

Menambahkan node akhir list Before: pnew 144 Code pnew -> next = NULL; ppre -> next = pnew; 55 124 ppre After: pnew 144 55 124 ppre

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.

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; }

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

Menghapus node pertama dari linked list Before: phead 75 124 Code: phead = pcur -> next; free(pcur); ppre pcur After: phead Recycled 124 ppre pcur

Menghapus node dari linked list kasus umum Before: 75 96 124 Code: ppre -> next = pcur -> next; free(pcur); ppre pcur After: Recycled 75 124 ppre pcur

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).

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 ppre = NULL; pcur = phead; //search until the target value is found or the end of the list is reached while (pcur!= NULL && pcur -> data!= target) { ppre = pcur; pcur = pcur -> next; } //determine if the target is found or ran off the end of the list if (pcur!= NULL) found = 1; else found = 0;

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;