Algoritma dan Struktur Data. Ramos Somya

dokumen-dokumen yang mirip
Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

MODUL 6 SINGLE & DOUBLE LINKED LIST

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

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

SINGLE LINKED LIST (NON CIRCULAR)

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

Review : Sifat Implementasi Linear List dengan Array

Single Linked List (1)

A. TUJUAN PEMBELAJARAN

KONSEP POINTER DAN LINKED LIST

Algoritma dan Struktur Data

KONSEP POINTER DAN LINKED LIST

Pengenalan Struktur Data. Farah Zakiyah Rahmanti 2014

LIST. Dewi Sartika, M.Kom

04. Single Linked List

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

Algoritma dan Struktur Data. Linked List

Struct Lanjutan: Studi Kasus

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

Apakah Anda sering kesulitan untuk

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

KONSEP POINTER DAN LINKED LIST

Struktur Data II. Single Linked List - Non circular

ALGORITMA DAN STRUKTUR DATA

Linked List 6.3 & 7.3 NESTED LOOP

LAPORAN PRAKTIKUM IX. Oleh:

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

Heriyadi adalah programer yang

Algoritme dan Pemrograman

Algoritma dan Struktur Data. Pertemuan 6 Alokasi Memori Dinamis

Praktikum Algoritma dan Struktur Data 2010

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

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

ASD. Alokasi Memori Dinamis

Praktikum Algoritma dan Struktur Data

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

Tutorial - Single Linked List

SENARAI BERANTAI (LINK LIST)

REPRESENTASI FISIK LIST LINEAR

Array VS Linked List

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

STRUKTUR DATA single linked list non circular

Pointer dan Array Dinamik. IF2121 / Algoritma dan Struktur Data Sem /2018

BAB IX LINKED LIST (SENARAI BERANTAI)

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

05. Double Linked List

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

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

STRUKTUR DATA (2) Single Linked List

Algoritma dan Struktur Data. Pertemuan 5 Pointer

Algoritma Pemrograman & Struktur Data

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

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

A. TUJUAN PEMBELAJARAN

Pointer. Yuliana Setiowati

POINTER. Tim Alpro Teknik Informatika

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

Pendahuluan Pemrograman Mikrokontroler

BAB IX LINKED LIST (SENARAI BERANTAI)

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

STRUKTUR DATA Pertemuan 1 s.d 8

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

Stack. Pointer ke node pertama dari stack. Bagian deklarasi di atas kita asumsikan disimpan menjadi sebuah header file dengan nama stack.

IT234 - Algoritma dan Struktur Data. Ramos Somya

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

01. Review Array, Pointer dan Struktur

Penambahan Simpul (Node)

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

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

Algoritma Pemrograman & Struktur Data

Tipe Data dan Operator

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

Algoritma dan Struktur Data Praktikum 3. Pointer

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

LAPORAN PRAKTIKUM RESMI QUEUE

POINTER. Tim Alpro Teknik Informatika

LIST BERKAIT(LINKED LIST)

Algoritma dan Struktur Data. Pertemuan 7 Linked List

Algoritma Pemrograman & Struktur Data

Modul 1 Dasar Dasar Bahasa Pemrograman C

Langkah Mudah Belajar Struktur Data Menggunakan C/C++

Lab. Teknik Informatika Struktur Data 1

Algoritme dan Pemrograman

Dinamik Linked List. hari bulan tahun

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

PERTEMUAN VII FILE TEKS & FILE BINER

MODUL PRAKTIKUM STRUKTUR DATA

BAB II Senarai Berantai (Linked List)

Penerapan BFS dan DFS dalam Garbage Collection

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

A. TUJUAN PEMBELAJARAN

Binary Search Tree (BST)

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

Fungsi (Function) Pendahuluan. Objektif. Bahan Bacaan

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

STRUKTUR DATA Pertemuan 1 s.d 8

Linked List dan Implementasinya dalam Bahasa Java

PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 Stack (Tumpukan)

Transkripsi:

Algoritma dan Struktur Data Ramos Somya

Penggunaan record dalam jumlah yang banyak alokasi memory konvensional tidak bisa diandalkan. Misal kita akan bekerja dengan file yang menyimpan sangat banyak record, di mana setiap record juga memiliki banyak field. - Menampilkan record - Menambahkan record - Menghapus record - Mengurutkan record

Dibutuhkan suatu rantai data yang panjang dan saling berhubungan. Rantai data tersebut harus mampu menampung semua data yang kita miliki. Penggunaan array saja jelas tidak bisa, karena kita bekerja dengan barisan data heterogen. Penggunaan Struct (Array of Struct) juga belum mencukupi. Kita tidak mungkin akan melakukan alokasi dan dealokasi beberapa kali di dalam program untuk mengoptimasi penggunaan memory.

Solusi yang lebih baik adalah menggunakan linked list, baik singly (single) linked list ataupun doubly (double) linked list.

Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier dengan bantuan pointer. Untuk implementasi Linked List, kita harus memahami Struct terlebih dahulu. Penggunaan struct memungkinkan kita bekerja dengan satu record yang memiliki banyak field.

#include <stdio.h> int main() struct Test int x; char c; }; struct Test test1; test1.x = 10; test1.c = A ; printf( Isi dari test1.x: %d\n, test1.x); printf( Isi dari test1.c: %c\n, test1.c); return 0; } Struct dengan nama Test Struct adalah salah satu dasar penggunaan linked list. Apabila pemahaman akan struct sudah baik, maka penggunaan linked list akan semakin mudah.

Memesan memory secara konvensional misal char s[10000], namun sayangnya, kita akan kehilangan kebebasan untuk mendealokasikan memory yang sudah tidak terpakai. Pengalokasian memory secara dinamis dapat dilakukan dengan salah satu fungsi alokasi memory yaitu malloc(). Sementara, lawannya, dealokasi memory, dapat dilakukan dengan memanggil fungsi free().

void *malloc(size_t size); Fungsi ini dideklarasikan di dalam header stdlib.h. Dengan demikian, jangan lupa untuk meng-include header tersebut. Fungsi ini ini akan meminta memory sebanyak size bytes, dan apabila sukses, pointer ke lokasi memory yang dipesan akan dikembalikan. Apabila gagal, fungsi ini akan mengembalikan NULL.

void free(void *ptr); Fungsi ini dideklarasikan di dalam header stdlib.h. Dengan demikian, jangan lupa untuk meng-include header tersebut. Fungsi ini akan membebaskan memory teralokasi yang ditunjuk oleh variabel ptr.

Sebagai contoh, kita akan mengalokasikan array of character sejumlah 50000 buah secara dinamis. #include <stdio.h> #include <stdlib.h> int main() char *s = (char *) malloc (50000 * sizeof (char)); free(s); return 0; } kita memesan memory sejumlah 50000 kali ukuran char dan kita melakukan typecasting ke bentuk char *.

#include <stdio.h> #include <stdlib.h> int main() struct Test int x; 1 char c; }; struct Test * test1 = (struct Test *) malloc (sizeof (struct Test)); 2 test1 -> x = 10; 3 test1 -> c = A ; printf( Isi dari test1->x: %d\n, test1->x); printf( Isi dari test1->c: %c\n, test1->c); free(test1); return 0; }

1. Seperti contoh terdahulu, kita mendeklarasikan Struct Test. 2. Kita memesan memori secara dinamis yang akan digunakan oleh struct test1. Kita memesan sejumlah ukuran Struct Test, dan hasilnya akan digunakan untuk menyimpan test1. 3. Apabila sebelumnya kita menggunakan notasi titik untuk mengakses field, maka dalam pengalokasian dinamis ini, kita menggunakan notasi ->.

Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier dengan bantuan pointer. Dikatakan singly (single) linked apabila hanya ada satu pointer yang menghubungkan setiap node. Setiap node akan berbentuk struct dan memiliki satu buah field bertipe struct yang sama, yang berfungsi sebagai pointer.

Kita akan mulai dengan deklarasi struct untuk node. struct tnode int x; struct tnode *next; } variabel next ini akan menghubungkan kita dengan node di sebelah kita, yang juga bertipe struct tnode. Hal inilah yang menyebabkan next harus bertipe struct tnode.

Selanjutnya, kita akan mendeklarasikan beberapa variabel pointer bertipe struct tnode. Beberapa variabel tersebut akan kita gunakan sebagai awal dari linked list, node aktif dalam linked list, dan node sementara yang kita gunakan dalam pembuatan node di linked list. Berikan nilai awal NULL kepada mereka. struct tnode *head=null, *curr=null, *node=null;

Node yang dibuat pertama akan menjadi head. Nodenode yang dibuat setelahnya akan menjadi node-node pengikut.

int i; for (i=0; i<5; i++) node = (struct tnode *) malloc (sizeof(struct tnode)); node -> x = i; if (head == NULL) head = node; curr = node; } else curr -> next = node; curr = node; } } kita membuat perulangan dari 0 sampai 4, yang dimaksudkan untuk membuat lima buah node yang masing-masing field x nya berisikan nilai dari 0 sampai 4. Pembuatan node dilakukan dengan fungsi malloc(). Setelah itu, kita perlu membuat node dan penghubung. Pertama-tama, kita akan menguji apakah head bernilai NULL. Kondisi head bernilai NULL hanya terjadi apabila kita belum memiliki satu node pun. Dengan demikian, node tersebut akan kita jadikan sebagai head. Node aktif (curr), juga kita dapat dari node tersebut.

Sekarang, bagaimana kalau head tidak bernilai NULL alias kita telah memiliki satu atau lebih node? Yang pertama kita lakukan adalah menghubungkan pointer next dari node aktif (curr) ke node yang baru saja kita buat. Dengan demikian, kita baru saja membuat penghubung antara rantai lama dengan mata rantai baru curr -> next = NULL; Menghubungkan pointer next untuk mata rantai terakhir ke NULL.

curr = head; while (curr!= NULL) printf( %d, curr -> x); curr = curr -> next; } printf( \n ); Pertama-tama, kita meletakkan node aktif (curr) ke posisi head. Setelah itu, kita akan pindahkan kunjungi satu per satu node dengan memindahkan node aktif (curr) ke posisi sebelahnya. Semua kunjungan tersebut akan kita lakukan apabila node aktif (curr) tidak menemui NULL

#include <stdio.h> #include <stdlib.h> int main() struct tnode int x; struct tnode *next; }; struct tnode *head=null, *curr=null, *node=null; int i; for (i=0; i<5; i++) node = (struct tnode *) malloc (sizeof(struct tnode)); node -> x = i; if (head == NULL) head = node; curr = node; }else curr -> next = node; curr = node; } } curr -> next = NULL; curr = head; while (curr!= NULL) printf( %d, curr -> x); curr = curr -> next; } printf( \n ); return 0; }

Buatlah suatu linked list yang memilikit tipe data berupa integer. Jumlah inputan ditentukan oleh pengguna. Buatlah method adddata() untuk memasukkan data ke linked list. Buatlah method rata Genap untuk menghitung jumlah rata-rata pada data yang bernilai genap ex: 5,6,2,7,3 -> ratagenap= (6+2)/2=4 Buatlah method untuk removeganjil, yang akan menghapus data ganjil dalam linked list. Ex: 5,6,2,7,3 -> 6,2

Tampilan awal: Lihat Data: Tambah Data: Rata Genap:

Remove Ganjil: Lihat Data setelah Remove Ganjil:

Kerjakan secara kelompok max 4 mahasiswa. Kumpul ke email: ramos.somya@gmail.com paling lambat hari Senin, 28 Maret 2o11 pukul. 12.00 WIB. Kirimkan program dalam.cpp (t5_nimketuakelompok.cpp) Subject: TGS_ASD5