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

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

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

Manage Sort STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 4 : 30 Juni 2015

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

Queue Priority Queue STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 6 : 7 Juli 2015

MODUL 6 SINGLE & DOUBLE LINKED LIST

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

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

Algoritma Pemrograman & Struktur Data

Algoritma dan Struktur Data

Stack STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 5 : 6 Juli 2015

05. Double Linked List

STRUKTUR DATA (2) Single Linked List

Praktikum Algoritma dan Struktur Data

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

KONSEP POINTER DAN LINKED LIST

DIG1G3 Implementasi Struktur Data

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

BAB VIII QUEUE (ANTRIAN)

Bahasa Pemrograman :: Object Oriented Programming

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

Algoritma dan Struktur Data. Ramos Somya

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

Algoritma dan Struktur Data. Pertemuan 7 Linked List

04. Single Linked List

Linked List dan Implementasinya dalam Bahasa Java

Algoritma dan Struktur Data. Linked List

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN 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)

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

Membuat Binary Search Tree Menggunakan STL Vector C++

LIST BERKAIT(LINKED LIST)

LAPORAN PRAKTIKUM IX. Oleh:

Pertemuan 7. REVIEW dan QUIS

Struktur Data II. Single Linked List - Non circular

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

LAPORAN PRAKTIKUM RESMI QUEUE

SENARAI BERANTAI (LINK LIST)

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

ARRAY PENGANTAR PROGRAM STUDI. Institut Teknologi Sumatera

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

PRAKTIKUM STRUKTUR DATA QUEUE. SULIDAR FITRI, M.Sc

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

INF-103 Pemrograman II VECTOR & STRING. Dr. Taufik Fuadi Abidin, M.Tech Irvanizam Zamanhuri, M.Sc. Program Studi Informatika FMIPA UNIVERSITAS KUALA

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

Tutorial - Single Linked List

Gambar 1. Single Linked List

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

Single Linked List. Single Linked List

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

KONSEP POINTER DAN LINKED LIST

PENGANTAR KOMPUTER & SOFTWARE II

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

Spesifikasi: Ukuran: 14x21 cm Tebal: 225 hlm Harga: Rp Terbit pertama: Februari 2005 Sinopsis singkat:

STRUKTUR DATA single linked list non circular

REVIEW ARRAY. Institut Teknologi Sumatera

LIST. Dewi Sartika, M.Kom

Algoritma Pemrograman & Struktur Data

LATIHAN SOAL (FUNGSI & PROSEDUR)

BAB II Senarai Berantai (Linked List)

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

REPRESENTASI FISIK LIST LINEAR

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

P3 Dasar Struktur Data TIF42/SIF42

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

TUGAS PENDAHULUAN MODUL 12 PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA STACK

Double Linked List. Double Linked List

Penggunaan Private dan Public dalam C++

ALGORITMA DAN STRUKTUR DATA

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

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

Gambar 1. Single Linked List

Pendahuluan Struktur Data STRUKTUR DATA. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 1 : 20 Juni 2016

Array VS Linked List

Gambar 1. Single Linked List

Search And Insert Problem (Sorted Double Linkedlist Solution)

SINGLE LINKED LIST (NON CIRCULAR)

Algoritma Dan Struktur Data II

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

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

Gambar 1. Single Linked List

Pemrograman Berorientasi Obyek (C++) Departemen Ilmu Komputer FMIPA IPB 2013

DIG1G3 Implementasi Struktur Data

STRUKTUR DASAR PEMROGRAMAN

Struktur Data Array. Rijal Fadilah S.Si

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

BAB IX LINKED LIST (SENARAI BERANTAI)

Single Linked List (1)

LAPORAN RESMI. TIPE DATA ABSTRAK (TYPEDEF dan STRUCT)

DIG1G3 Implementasi Struktur Data

BAB IV Antrian(Queue)

Kisi-Kisi Ujian Akhir Semester Algoritma dan Pemrograman Lanjut

DASAR PEMROGRAMAN. Institut Teknologi Sumatera

ALGORITMA RINTA KRIDALUKMANA SISKOM UNDIP

PENGENALAN FUNGSI C++

ARRAY / LARIK. Oleh : Agus Priyanto, M.Kom SEKOLAH TINGGI TEKNOLOGI TELEMATIKA TELKOM. Smart, Trustworthy, And Teamwork

Lab. Teknik Informatika Struktur Data 1

Transkripsi:

JULIO ADISANTOSO Departemen Ilmu Komputer IPB Pertemuan 3 : 27 Juni 2016

SLL using Standard Template Library

SLL using Mengapa? = ST L (L huruf ke-12). Jadi ST L = ST 12 ;) Mengapa menggunakan? Reduce development time Data-structures already written and debugged. Code readability Fit more meaningful stuff on one page. Robustness data structures grow automatically. Portable code. Maintainable code Easy

SLL using Implementasi SLL dengan SLL lebih mudah diimplementasikan dengan forward list Contoh #include <iostream> #include <forward_list> using namespace std; int main () { forward_list<int> mylist; mylist.push_front (19); mylist.push_front (34); forward_list<int>::iterator it; for(it=mylist.begin();it!=mylist.end();++it) cout << *it << " -> "; cout << "NULL" << endl; return 0;

SLL using Implementasi SLL dengan Tentunya, forward list belum memenuhi semua kebutuhan yang diinginkan, misalnya tidak ada fungsi print, push back, push after, dsb. Solusi: dapat dibuat class baru sebagai turunan dari container forward list.

SLL using Contoh Class SLL dengan Contoh template<typename T> class SLL : public forward_list<t> { public: void print() { typename forward_list<t>::iterator it; for (it=forward_list<t>::begin(); it!=forward_list<t>::end();++it) cout << *it << " -> "; cout << "NULL" << endl; ;

SLL using SLL::push back dengan Karena tidak ada pointer tail, maka fungsi push back harus dibuat khusus: Fungsi push back void push_back(t val) { typename forward_list<t>::iterator it, before_end; if (forward_list<t>::empty()) forward_list<t>::insert_after( forward_list<t>::before_begin(), val); else { for (it=forward_list<t>::begin(); it!=forward_list<t>::end(); ++it) before_end=it; forward_list<t>::insert_after(before_end, val);

SLL using Implementasi SLL dengan Ambil contoh kasus TUGAS #2 (SLL dengan info berupa pasangan nilai NIM dan IPK) membutuhkan utility pair TYPE (mengapa begini?) #include <utility> #include <iostream> #include <forward_list> #include <string> using namespace std; typedef pair<string, float> P;

SLL using PRIMITIF ADT SLL menggunakan class SLL { SLLP dt; public: void push_front(string nim, float ipk); void push_back(string nim, float ipk); void push_after(string nim, float ipk, string after); void del(string nim); SLLP::iterator find(string nim); void print(); ;

SLL using Fungsi print() Menuliskan isi SLL ke standard output Kode program void SLL::print() { SLLP::iterator it; for (it=dt.begin(); it!=dt.end(); ++it) { cout << "(" << it->first << "," << it->second << ")->"; cout << "NULL" << endl;

SLL using Fungsi push front(value) Menyisipkan value di node paling depan Kode program void SLL::push_front(string nim, float ipk) { P t=make_pair(nim, ipk); dt.push_front(t); Fungsi make pair membuat dua nilai dengan tipe data tradisional (nim dan ipk) menjadi suatu nilai pasangan (pair).

SLL using Fungsi push back(value) Menyisipkan value di node paling belakang Kode program void SLL::push_back(string nim, float ipk) { P t=make_pair(nim, ipk); if (dt.empty()) dt.push_front(t); else { SLLP::iterator before=dt.begin(); SLLP::iterator it=dt.begin(); for (; it!=dt.end(); before=it, ++it); dt.insert_after(before,t); Fungsi lainnya harap dikembangkan sendiri.

using Double Linked List

Double Linked List () using Linked list dengan dua buah komponen pointer: Ke node sebelumnya (prev) Ke node berikutnya (next) Akses tetap sekuensial, sama dengan Single Linked List (SLL), hanya dapat maju maupun mundur

SLL vs using Ukuran bytes lebih besar dari SLL. Berapa? Penelusuran node pada lebih fleksibel dibanding SLL. Mengapa? Penyisipan node baru ke dalam dan penghapusan node dari membutuhkan sumberdaya yang lebih rendah dibanding SLL. Mengapa?

Contoh using Contoh : Bagaimana spefisikasi ini?

using TYPE: struct node { int info; struct node *prev, *next; ; typedef struct node Node; PRIMITIF: make, push (front, after, back), search, update (delete), isempty, etc.

using PRIMITIF (P03b.cpp) ADT class { Node *head, *tail; public: void make() { head=null; tail=null; Node* make(int val); int isempty() { return (head==null); void push_back(int val); void push_front(int val); void push_after(int val, int after); Node *find(int val); void del(int val); void print(); ;

Contoh DRIVER using Driver int main() { list; list.make(); list.push_back(100); list.push_back(50); list.push_front(75); list.print(); list.push_after(35,100); list.print(); list.del(50); list.print(); return 0; Output 75 -> 100 -> 50 -> NULL 75 -> 100 -> 35 -> 50 -> NULL 75 -> 100 -> 35 -> NULL

Fungsi make(value) using Membuat sebuah node bernilai yang ditunjuk oleh pointer (ptr) Nilai yang dikembalikan adalah sebuah pointer ke node yang dibuat Kode Program Node* ::make(int val) { Node *temp = new(node); temp->info=val; temp->next=null; temp->prev=null; return temp;

Fungsi push back(value) using Menambahkan node bernilai ke bagian belakang Kode Program void ::push_back(int val) { Node *ptr=make(val); if (isempty()) { head=ptr; ptr->prev=head; tail=ptr; else { tail->next=ptr; ptr->prev=tail; tail=ptr;

Fungsi push front(value) using Menambahkan node bernilai ke bagian depan Kode Program void ::push_front(int val) { Node *ptr=make(val); if (isempty()) { head=ptr; ptr->prev=head; tail=ptr; else { ptr->next=head; ptr->prev=head; head=ptr;

Fungsi print() using Menampilkan setiap nilai node Kode Program void ::print() { Node *ptr=head; for (; ptr!=null; ptr=ptr->next) { cout << ptr->info << " -> "; cout << "NULL" << endl;

Fungsi find(value) using Mencari node yang memiliki nilai info=value. Output berupa pointer ke node yang ditemukan. NULL jika tidak ditemukan. Kode program Node* ::find(int val) { Node *ptr=head; if (isempty()) return NULL; else { while (ptr->next!=null && ptr->info!=val) { ptr=ptr->next; if (ptr->info==val) return ptr; else return NULL;

Fungsi push after(value) using Menyisipkan node setelah suatu node yang bernilai after. Kode program void ::push_after(int val, int after) { Node *ptr = find(after); if (ptr!=null) { Node *temp = make(val); temp->next = ptr->next; (ptr->next)->prev=temp; ptr->next = temp; temp->prev=ptr;

Fungsi del(value) using Menghapus node yang memiliki nilai info=value. Kode program void ::del(int val) { Node *ptr = find(val); if (ptr==head) { head=head->next; head->prev=head; else if (ptr==tail) { tail=tail->prev; tail->next=null; else if (ptr!=null) { (ptr->next)->prev=ptr->prev; (ptr->prev)->next=ptr->next;

using Implementasi dengan (p03c.cpp) dapat diimplementasikan dengan list forward list vs list: No Operasi forward list list 1 Sisip depan push front push front Sisip belakang n/a push back Sisip tengah insert after insert 2 Hapus depan pop front pop front Hapus belakang n/a pop back Hapus setelah erase after erase 3 Pencarian n/a n/a 4 Update n/a n/a forward list SLL; list

using menggunakan #include <iostream> #include <list> using namespace std; typedef list<int> LI; class { LI dt; public: int isempty() { return dt.empty(); void push_back(int val) { dt.push_back(val); ; void push_front(int val) { dt.push_front(val); ; void push_after(int val, int after); LI::iterator find(int val); void del(int val); void print(); ;

using Fungsi print() dan find(value) Fungsi print() void ::print() { LI::iterator it; for (it=dt.begin(); it!=dt.end(); ++it) cout << (*it) << "->"; cout << "NULL" << endl; Fungsi find(value) LI::iterator ::find(int val) { LI::iterator it; for (it=dt.begin(); it!=dt.end(); ++it) if ((*it)==val) return it; return it;

using Fungsi push after(value) dan del(value) Fungsi push after(value) void ::push_after(int val, int after) { LI::iterator it=find(after); if (it!=dt.end()) { ++it; dt.insert(it, val); Fungsi del(value) void ::del(int val) { LI::iterator it=find(val); if (it!=dt.end()) dt.erase(it);

TUGAS #3 using Diketahui n ayam berdiri dalam satu baris dari Utara ke Selatan. Setiap ayam dicatat tinggi badannya. Selanjutnya datang m ayam baru yang berjalan beriringan dari Utara ke Selatan yang ingin ikut dalam barisan. Ternyata ada aturan, bahwa setiap ayam yang baru datang akan menempati sebelum ayam dalam barisan yang pertama kali lebih tinggi darinya. Tuliskan susunan akhir dari barisan ayam tersebut. Contoh input 5 10 40 15 20 35 (n=5) 3 30 50 7 (m=3) Contoh output 7->10->30->40->15->20->35->50->NULL