Search And Insert Problem (Sorted Double Linkedlist Solution)

dokumen-dokumen yang mirip
Pemetaan Area (Mapping) Sederhana Implementation with C/C++

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

Algoritma Pemrograman & Struktur Data

LIST. Dewi Sartika, M.Kom

05. Double Linked List

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

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

List Linear (Linked List) Farah Zakiyah Rahmanti 2014

Linked List 6.3 & 7.3 NESTED LOOP

Praktikum Algoritma dan Struktur Data

KONSEP POINTER DAN LINKED LIST

MODUL 6 SINGLE & DOUBLE LINKED LIST

Algoritma dan Struktur Data. Ramos Somya

Algoritma dan Struktur Data

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

Single Linked List (1)

BAB IX LINKED LIST (SENARAI BERANTAI)

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

TIPE DATA ABSTRAK MENGGUNAKAN BAHASA C

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

SINGLE LINKED LIST (NON CIRCULAR)

KONSEP POINTER DAN LINKED LIST

BAB IX LINKED LIST (SENARAI BERANTAI)

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

Algoritma Pemrograman & Struktur Data

Algoritma dan Struktur Data. Linked List

Membuat Chart Dengan JSChart

Achmad Solichin.

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

REPRESENTASI FISIK LIST LINEAR

BAB II Senarai Berantai (Linked List)

Algoritma dan Struktur Data. Pertemuan 7 Linked List

Algoritma dan Struktur Data. Pertemuan 9 Circular Linked List

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

ARNA FARIZA YULIANA SETIOWATI

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

LAPORAN PRAKTIKUM IX. Oleh:

04. Single Linked List

Fungsi (Function) Pendahuluan. Objektif. Bahan Bacaan

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

ALGORITMA DAN STRUKTUR DATA

Minggu ke-11 Fungsi (Function)

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

LINKED LIST. TUJUAN UMUM Memahami konsep linked list TUJUAN KHUSUS

SENARAI BERANTAI (LINK LIST)

KONSEP POINTER DAN LINKED LIST

Struktur Data II. Single Linked List - Non circular

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

Apakah Anda sering kesulitan untuk

Achmad Solichin.

BAB X. Struct Dalam C++, kita dapat membuat sebuah tipe data baru. Maka penulisan variabel baru kita akan menjadi:

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

STRUKTUR DATA (2) Single Linked List

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

Review : Sifat Implementasi Linear List dengan Array

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

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

Penambahan Simpul (Node)

Dinamik Linked List. hari bulan tahun

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

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

I Putu Gede Darmawan

Langkah Mudah Belajar Struktur Data Menggunakan C/C++

Variasi List Linier (Bagian 2)

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

LAPORAN PRAKTIKUM RESMI QUEUE

TUGAS PENDAHULUAN MODUL 12 PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA STACK

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

DIG1G3 Implementasi Struktur Data

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

Algoritme dan Pemrograman

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

Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN

Algoritma dan Struktur Data. Pertemuan 5 Pointer

A. TUJUAN PEMBELAJARAN

Array VS Linked List

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

Linked List dan Implementasinya dalam Bahasa Java

Algoritma dan Struktur Data STACK

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

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

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

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

TIM ASISTEN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN 2017

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

Berhitung dengan mudah dan cepat menggunakan freeware Eigenmath

A. TUJUAN PEMBELAJARAN

Gambar 1. Single Linked List

PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 Stack (Tumpukan)

Nama Penulis Pendahuluan. Isi. Lisensi Dokumen:

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

Variasi List Linier. Nisa ul Hafidhoh, MT

Mudafiq Riyan Pratama Pendahuluan. Lisensi Dokumen:

Bagian I. Studi Kasus [82] Tanda tangan:

STRUKTUR DATA Pertemuan 1 s.d 8

Praktikum Algoritma dan Struktur Data 2010

Lab. Teknik Informatika Struktur Data 1

STRUKTUR DATA single linked list non circular

Transkripsi:

Search And Insert Problem (Sorted Double Linkedlist Solution) Fadlika Dita Nurjanto fadlikadn@gmail.com http://fadlikadn.wordpress.com Lisensi Dokumen: Copyright 2003-2011 IlmuKomputer.Com Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com. P roblem Search And Insert merupakan salah satu problem yang banyak digunakan dalam kehidupan sehari-hari. Proses dalam Search And Insert adalah mengecek sebuah angka yang diberikan. Jika angka yang dimasukkan telah ada di dalam daftar, maka tidak perlu melakukan apa-apa. Akan tetapi jika angka yang diberikan tidak ada di dalam daftar, maka angka tersebut harus dimasukkan ke dalam list. Search And Insert dapat diselesaikan dengan berbagai cara dan beragam format, salah satunya adalah format terurut. Artinya, angka-angka yang ada di dalam daftar harus diurutkan sedemikian rupa sehingga pencarian lebih mudah dilakukan. Implementasi problem search and insert bisa diimplementasikan dengan berbagai bahasa pemrograman. Di sini implementasi menggunakan bahasa C/C++. Ada baiknya kita lihat ilustrasi berikut : Misalkan, ada sebuah barisan angka desimal. Angka-angka tersebut adalah angka 32,30,4,45,12. Barisan tersebut belumlah terurut. Kesulitan akan terasa saat kita melakukan pencarian sebuah angka dalam barisan tersebut dikarenakan angka-angka yang ada belumlah terurut. Setelah diurutkan, barisan akan menjadi seperti ini : Data yang terurut mempermudah kita melakukan pencarian, dengan cara membandingkan masing-masing anggota barisan dengan angka yang akan kita cari. Copyright 2003-2011 IlmuKomputer.Com 1

Ketentuan : Saat kita mencari sebuah angka dan angka itu tidak ada di dalam barisan, maka angka itu harus dimasukkan ke dalam barisan dan barisan tersebut harus tetap urut. Jika angka yang dicari ada di dalam daftar, maka tidak perlu diproses lebih lanjut. Sebagai contoh, dimasukkan angka 20 Karena angka 20 tidak ada di dalam barisan, maka angka 20 harus dimasukkan ke dalam barisan. Sehingga barisan menjadi seperti ini : (Ingat, barisan harus dalam keadaan terurut setelah angka dimasukkan) Sekarang pertanyaannya, bagaimana membuat sebuah program yang mampu mendeteksi sebuah angka di dalam barisan, dan secara otomatis akan dimasukkan jika angka tersebut tidak ada di dalam barisan. Salah satu teknik yang bisa dilakukan adalah dengan menggunakan teknik linkedlist. Perlu diketahui, linkedlist adalah salah satu representasi struktur data yang dibangun menggunakan tipe data buatan (struct) yang dihubungkan oleh pointer yang ada di dalam elemen-elemennya. Linkedlist yang digunakan di sini adalah double linkedlist, artinya antara masing-masing elemen mempunyai hubungan timbal balik dengan elemen yang persis di sampingnya. Ilustrasi Double Linkedlist Elemen A dan B mempunyai arah ke elemen yang lain. Dari A ke B, demikian sebaliknya. Elemen A dan B bertipe data struct, yaitu data buatan. Data buatan adalah data yang dibuat secara manual dengan mengkombinasikan tipe data yang ada kemudian dibungkus ke dalam tipe data yang baru. Di dalam elemen A, terdapat beberapa tipe data yang mempunyai fungsinya sendiri. (Misal, tipe data buatan bernama tipe data Node. Copyright 2003-2011 IlmuKomputer.Com 2

Elemen A bertipe data Node. Tipe data Node ini mempunyai 3 tipe data di dalamnya, yaitu tipe data 2 Node (pointer) dan integer. Ilustrasinya seperti ini : Tipe data Node Keterangan : Prev : digunakan sebagai penunjuk ke elemen sebelumnya pada barisan bilangan. Value : digunakan untuk menampung angka yang ada di dalam sebuah Node. Next : digunakan sebagai penunjuk ke elemen berikutnya pada barisan bilangan. Implementasi tipe data buatan pada C/C++ typedef struct Node int Value; struct Node *Next; struct Node *Prev; ; Berikut adalah source lengkap problem Search And Insert /* Teknik Informatika Institut Teknologi Sepuluh Nopember Fadlika Dita Nurjanto E-mail : fadlikadn@gmail.com Blog : fadlikadn.wordpress.com Problem Search and Insert Solution with sorted linked list */ #include <stdio.h> #include <iostream.h> Copyright 2003-2011 IlmuKomputer.Com 3

typedef struct Node int Value; struct Node *Next; struct Node *Prev; ; typedef struct Node Linked; //fungsi untuk membuat node baru void make_node(int X, Linked **P) *P = (Linked *) malloc (sizeof(linked)); if(*p!= NULL) (*P)->Value = X; (*P)->Next = NULL; (*P)->Prev = NULL; else printf("make new node has failed!\n"); //fungsi pertama kali yang dipanggil, untuk membuat First dan Last menjadi NULL void Initial(Linked **F_loc, Linked **L_loc) *F_loc = NULL; *L_loc = NULL; printf("f and L set to NULL\n"); //insert first, F & L dalam keadaan NULL void insert_first(linked **F_loc, Linked **L_loc, Linked **P_loc) (*P_loc)->Next = NULL; (*P_loc)->Prev = NULL; *F_loc = *P_loc; *L_loc = *P_loc; printf("initial first has change F=%d and L=%d\n",(*F_loc)->Value,(*L_loc)->Value); void search_value(int X, Linked **P_loc, Linked **Q_loc, Linked **F_loc, Linked **L_loc) *Q_loc = *F_loc; while((*q_loc)->next!=null) if((*q_loc)->value == (*P_loc)->Value) printf("value has found, nothing to do\n"); break; else if((*q_loc)->value < (*P_loc)->Value) Copyright 2003-2011 IlmuKomputer.Com 4

*Q_loc = (*Q_loc)->Next; else if((*q_loc)->value > (*P_loc)->Value) printf("value not found, insert into sorted list\n"); if((*q_loc)->prev!= NULL) (*P_loc)->Prev = (*Q_loc)->Prev; ((*Q_loc)->Prev)->Next = *P_loc; (*Q_loc)->Prev = *P_loc; (*P_loc)->Next = *Q_loc; else if((*q_loc)->prev == NULL) (*P_loc)->Next = *Q_loc; (*Q_loc)->Prev = *P_loc; *F_loc = *P_loc; printf("insert into sorted list has successfully\n"); break; if((*q_loc)->next==null) if((*q_loc)->value == (*P_loc)->Value) printf("value has found, nothing to do\n"); else if((*q_loc)->value < (*P_loc)->Value) printf("%d lebih kecil dari %d\n",(*q_loc)->value,(*p_loc)->value); (*Q_loc)->Next = *P_loc; (*P_loc)->Prev = *Q_loc; (*P_loc)->Next = NULL; printf("insert into sorted list has successfully\n"); else if((*q_loc)->value > (*P_loc)->Value) printf("%d lebih besar dari %d\n",(*q_loc)->value,(*p_loc)->value); if((*q_loc)->prev!= NULL) (*P_loc)->Prev = (*Q_loc)->Prev; ((*Q_loc)->Prev)->Next = *P_loc; (*Q_loc)->Prev = *P_loc; (*P_loc)->Next = *Q_loc; printf("insert into sorted list has successfully\n"); else if((*q_loc)->prev == NULL) printf("element only one\n"); (*P_loc)->Next = *Q_loc; Copyright 2003-2011 IlmuKomputer.Com 5

(*Q_loc)->Prev = *P_loc; *F_loc = *P_loc; printf("f = %d, L= %d\n",(*f_loc)->value, (*L_loc)->Value); printf("insert into sorted list has successfully\n"); //fungsi utama, akan memanggil fungsi-fungsi yang lain void main_process(int X, Linked **P_loc, Linked **Q_loc, Linked **F_loc, Linked **L_loc) if(*f_loc == NULL && *L_loc == NULL) //jika list masih kosong make_node(x,&*p_loc); insert_first(&*f_loc,&*l_loc,&*p_loc); else //jika list sudah berisi make_node(x,&*p_loc); //alokasi memori dulu //proses search search_value(x,&*p_loc,&*q_loc,&*f_loc,&*l_loc); //void search_value(int X, Linked **P_loc, Linked **Q_loc, Linked **F_loc, Linked **L_loc) void list_print_all(linked **Q_loc, Linked **F_loc) if(*f_loc!=null) *Q_loc = *F_loc; int valid = 1; while(valid == 1) printf("%d ",(*Q_loc)->Value); if((*q_loc)->next==null) break; else *Q_loc = (*Q_loc)->Next; printf("\n"); else printf("list haven't created\n"); int main() Linked *P, *F, *L, *Q; int val; Initial(&F,&L); printf("search and Insert with Sorted Linked List\n"); printf("type 1 to check an integer and type 0 to exit\n"); printf("type 2 to print list\n"); int ch; while(scanf("%d",&ch) && ch!= 0) Copyright 2003-2011 IlmuKomputer.Com 6

if(ch==1) printf("type an integer to check in the list\n"); scanf("%d",&val); //void main_process(int X, Linked **P_loc, Linked **Q_loc, Linked **F_loc, Linked **L_loc) main_process(val,&p,&q,&f,&l); else if(ch==2) //void list_print_all(linked **Q_loc, Linked **F_loc) list_print_all(&q,&f); return 0; Keterangan Fungsi : 1. Make Node Fungsi ini digunakan untuk mengalokasikan sebuah tempat pada memori yang disimpan pada variabel *P. 2. Initial Fungsi ini digunakan untuk inisialisasi awal linkedlist, yaitu mereset elemen FIRST dan LAST pada linkedlist menjadi NULL (FIRST dan LAST digunakan dalam pencarian). 3. Insert First Fungsi ini digunakan untuk memasukkan sebuah angka ke dalam alamat alokasi memori yang telah dibuat pada linkedlist untuk pertama kalinya. (FIRST dan LAST masih bersta.tus NULL) 4. Search Value Fungsi ini digunakan untuk mencari angka di dalam list. Jika angka ditemukan, tidak dilakukan apa-apa. Tetapi bila angka tidak ditemukan, maka angka dimasukkan ke dalam list dengan keadaan terurut (dari kecil ke besar). Fungsi Search Value merupakan fungsi yang serbaguna karena dapat menangani beberapa kondisi di dalam list. 5. Main Process Fungsi ini digunakan untuk mengatur jalannya input yang masuk dan membaginya sesuai kondisi yang ada. Jika elemen FIRST dan LAST masih bernilai NULL (belum ada list), maka fungsi yang akan dipanggil adalah fungsi Insert First, tetapi bila list sudah ada, fungsi yang akan dijalankan adalah fungsi Search Value. 6. List Print All ungsi ini digunakan untuk mencetak semua elemen yang ada di dalam sebuah list. (Dari awal sampai akhir), untuk mengecek apakah list sudah urut atau belum. Copyright 2003-2011 IlmuKomputer.Com 7

7. Main Fungsi ini merupakan fungsi utama di dalam program ini. Fungsi main adalah fungsi pokok yang ada di dalam sebuah program. Di sini, fungsi main berfungsi untuk meng-handle inputan di dalam program. Linkedlist yang terbentuk akan menjadi seperti ini : Representasi dengan Sorted Double Linkedlist Referensi Horowitz; Sahni; Anderson; Freed. 2008. Fundamentals Of Data Structure In C (2nd Edition).Silicon Press Biografi Penulis Fadlika Dita Nurjanto. Menyelesaikan pendidikan di SD 2 Wonosobo tahun 2004, SMP 1 Wonosobo tahun 2007, dan SMK 1 tahun 2010. Sekarang berstatus sebagai mahasiswa Teknik Informatika Institut Teknologi Sepuluh Nopember, Surabaya. Artikel menarik lainnya bisa ditemukan di http://fadlikadn.wordpress.com. Sharing dengan penulis bisa kirim email ke fadlikadn@gmail.com. Copyright 2003-2011 IlmuKomputer.Com 8