Langkah Mudah Belajar Struktur Data Menggunakan C/C++
Sanksi Pelanggaran Pasal 113 Undang-Undang Nomor 28 Tahun 2014 tentang Hak Cipta 1. Setiap Orang yang dengan tanpa hak melakukan pelanggaran hak ekonomi sebagaimana dimaksud dalam Pasal 9 ayat (1) huruf i untuk Penggunaan Secara Komersial dipidana dengan pidana penjara paling lama 1 (satu) tahun dan/atau pidana denda paling banyak Rp100.000.000 (seratus juta rupiah). 2. Setiap Orang yang dengan tanpa hak dan/atau tanpa izin Pencipta atau pemegang Hak Cipta melakukan pelanggaran hak ekonomi Pencipta sebagaimana dimaksud dalam Pasal 9 ayat (1) huruf c, huruf d, huruf f, dan/atau huruf h untuk Penggunaan Secara Komersial dipidana dengan pidana penjara paling lama 3 (tiga) tahun dan/atau pidana denda paling banyak Rp500.000.000,00 (lima ratus juta rupiah). 3. Setiap Orang yang dengan tanpa hak dan/atau tanpa izin Pencipta atau pemegang Hak Cipta melakukan pelanggaran hak ekonomi Pencipta sebagaimana dimaksud dalam Pasal 9 ayat (1) huruf a, huruf b, huruf e, dan/atau huruf g untuk Penggunaan Secara Komersial dipidana dengan pidana penjara paling lama 4 (empat) tahun dan/atau pidana denda paling banyak Rp1.000.000.000,00 (satu miliar rupiah). 4. Setiap Orang yang memenuhi unsur sebagaimana dimaksud pada ayat (3) yang dilakukan dalam bentuk pembajakan, dipidana dengan pidana penjara paling lama 10 (sepuluh) tahun dan/atau pidana denda paling banyak Rp4.000.000.000,00 (empat miliar rupiah).
Langkah Mudah Belajar Struktur Data Menggunakan C/C++ Prof. Dr. Ema Utami, S.Si., M.Kom. Windha Mega Pradnya Dhuhita, S.Kom, M.Kom. PENERBIT PT ELEX MEDIA KOMPUTINDO
Langkah Mudah Belajar Struktur Data Menggunakan C/C++ Prof. Dr. Ema Utami, S.Si., M.Kom. Windha Mega Pradnya Dhuhita, S.Kom, M.Kom. 2017, PT Elex Media Komputindo, Jakarta Hak cipta dilindungi undang-undang Diterbitkan pertama kali oleh Penerbit PT Elex Media Komputindo Kelompok Gramedia, Anggota IKAPI, Jakarta 2017 anindita@elexmedia.id ID: 717051490 ISBN: 978-602-04-4540-3 Dilarang keras menerjemahkan, memfotokopi, atau memperbanyak sebagian atau seluruh isi buku ini tanpa izin tertulis dari penerbit. Dicetak oleh Percetakan PT Gramedia, Jakarta Isi di luar tanggung jawab percetakan
Daftar Isi Kata Pengantar... v Daftar Isi... ix Bab 1 Pendahuluan... 1 1.1 Implementasi Struktur Data... 2 1.2 Tipe Data Elementer dan Struktur Data... 2 Bab 2 Array dan String... 7 2.1 Array Satu Dimensi... 9 2.1.1 Deklarasi Array Satu Dimensi... 9 2.1.2 Pemberian Nilai Array Satu Dimensi... 9 2.1.3 Menampilkan Isi Array Satu Dimensi... 11 2.2 Array Dua Dimensi... 13 2.2.1 Deklarasi Array Dua Dimensi... 13 2.2.2 Pemberian Nilai Array Dua Dimensi... 14 2.2.3 Menampilkan Isi Array Dua Dimensi... 15 2.3 String... 17 2.4 Contoh Penerapan Array dan String... 20 Bab 3 Struktur... 47 3.1 Definisi Struktur... 48 3.2 Pengaksesan Elemen Struktur... 50 3.3 Pengaksesan Elemen Nested Struct... 52 3.4 Struct of Array... 55 ix
3.5 Contoh Penerapan Struktur... 57 Bab 4 Subprogram dan Rekursi... 73 4.1 Subprogram... 74 4.2 Rekursi... 79 4.3 Contoh Penerapan Subprogram dan Rekursi... 87 Bab 5 Sorting... 97 5.1 Metode Selection Sort... 98 5.1.1 Pengurutan Naik (Ascending)... 98 5.1.2 Pengurutan Turun (Descending)... 102 5.2 Metode Bubble Sort... 106 5.2.1 Pengurutan Naik (Ascending)... 106 5.2.2 Pengurutan Turun (Descending)... 112 5.3 Metode Insertion Sort... 113 5.3.1 Pengurutan Naik (Ascending)... 113 5.3.2 Pengurutan Turun (Descending)... 116 5.4 Metode Merge Sort... 118 5.4.1 Pengurutan Naik (Ascending)... 118 5.4.2 Pengurutan Turun (Descending)... 126 5.5 Contoh Penerapan Sorting... 133 Bab 6 Searching... 137 6.1 Metode Sequential Search... 138 6.1.1 Pencarian pada Array Belum Terurut... 138 6.1.2 Pencarian pada Array Terurut... 141 6.2 Metode Binary Search... 145 6.3 Pencarian pada Struct of Array... 148 6.4 Contoh Penerapan Searching... 150 Bab 7 Stack... 153 7.1 Single Stack... 154 x
7.2 Operasi-Operasi Single Stack... 154 7.3 Contoh Penerapan Single Stack... 161 7.4 Double Stack... 183 7.5 Operasi-Operasi Double Stack... 184 7.6 Contoh Penerapan Double Stack... 187 Bab 8 Queue... 209 8.1 Implementasi Queue dengan Linear Array... 210 8.2 Operasi-Operasi Queue dengan Linear Array... 211 8.3 Contoh Penerapan Queue dengan Linear Array.. 214 8.4 Implementasi Queue dengan Circular Array... 230 8.5 Operasi-Operasi Queue dengan Circular Array... 232 8.6 Contoh Penerapan Queue dengan Circular Array... 234 Bab 9 Pointer dan Linked List... 253 9.1 Variabel Pointer... 253 9.2 Operasi-Operasi Pointer... 255 9.3 Alokasi Dinamis pada Pointer... 255 9.4 Contoh Penerapan Pointer... 256 9.5 Linked List... 258 9.6 Operasi-Operasi Linked List... 259 9.7 Contoh Penerapan Linked List... 270 Bab 10 Evaluasi... 277 10.1 Contoh Implementasi Struktur Data... 277 10.2 Latihan Soal... 293 Daftar Pustaka... 295 Tentang Penulis... 297 xi
Pendahuluan Kompetensi Dasar (Tujuan Pembelajaran Umum): Memahami pengertian dan konsep dasar Struktur Data. Indikator: 1. Mampu mendeskripsikan pengertian Struktur Data. 2. Mampu menggunakan struktur data yang tepat dalam pemrograman. Struktur data merupakan ilmu yang harus dikuasai oleh seseorang yang terjun dalam dunia informatika, seperti mempelajari bahasa pemrograman, membuat sistem operasi, atau membuat media penyimpanan data. Mempelajari struktur data seperti mengatur almari pakaian. Kita harus menata dan mengelompokkannya sedemikian rupa agar almari terlihat rapi, mudah dalam pencarian pakaian, serta dapat memuat banyak pakaian. Berdasarkan analogi di atas, struktur data adalah cara pengorganisasian data dalam komputer agar penyimpanan data dan penggunaan memori komputer lebih efisien, mudah dalam pengaksesan data, dan memudahkan dalam pembacaan algoritma pemrograman. Pengorganisasian yang dimaksud meliputi bentuk data disimpan, disusun, dan dikelompokkan. 1
1.1 Implementasi Struktur Data Pengorganisasian data memerlukan algoritma yang tepat agar tujuan efisiensi memory tercapai. Untuk itu, dalam buku ini akan diulas macammacam struktur data dan algoritma-nya. Beberapa implementasi struktur data dalam pemrograman di antaranya adalah pada basis data, pengolahan kata, berkas-berkas, dan semua yang berhubungan dengan pengelolaan data, seperti pencarian data, pengurutan data, manajemen penyimpanan data, dan pengelompokan data. 1.2 Tipe Data Elementer dan Struktur Data Apabila berbicara mengenai pengolahan data, maka kita juga perlu memahami tentang tipe data dan bagaimana data tersebut ditampilkan. Data dapat dikelompokkan menjadi: 1. Tipe data elementer tunggal, contohnya: a. Karakter: berupa huruf, simbol, angka yang ditulis dalam tanda petik tunggal). Contoh: 'A', '3', '&'. b. Integer: berupa bilangan bulat dan dapat dikenakan operasi matematis. c. Real: berupa bilangan pecahan desimal. d. Boolean: tipe data yang hanya mempunyai dua nilai, yaitu TRUE (benar) dan FALSE (salah). 2. Tipe data elementer majemuk, contohnya string yang merupakan kumpulan dari karakter yang pemberian nilainya menggunakan tanda petik (" "). 3. Struktur data sederhana, di antaranya: a. Array, yaitu sekumpulan data yang memiliki tipe data yang sama. b. Record, yaitu sekumpulan data yang terdiri atas beberapa field yang mempunyai tipe data yang bermacam-macam. 2
4. Struktur data majemuk, di antaranya: a. Linear, contohnya: stack, queue, linear linked list. b. Nonlinear, contohnya: tree, binary tree. Untuk memudahkan dalam pemahaman, berikut perbedaan antara tipe data sederhana dan struktur data yang disajikan dalam tabel 1.1 di bawah ini: Tabel 1.1 Perbandingan Tipe Data Elementer dan Struktur Data Parameter Pembanding Jumlah data Tipe Data Elementer Hanya mempunyai satu nilai tiap satu variabelnya Struktur Data Terdiri atas beberapa nilai dalam satu variabel Jenis data Tipe dasar Tipe terstruktur Perhatikan contoh program sederhana berikut ini: include <stdio.h> main() { int i,data; for (i=1;i<6;i++) { printf ( Data ke-%i =,i); scanf ( %i,&data); } for (i=1;i<6;i++) { printf ( Data ke-%i = %i,i,data); } Misalkan, data-data yang diinputkan melalui keyboard adalah 10, 11, 12, 13, 14. Maka, program di atas akan menampilkan output: 14 14 14 3
14 14 Mengapa 10, 11, 12, 13 tidak tercetak? Karena variabel data hanya dapat menampung satu buah nilai dan nilai yang disimpan oleh variabel data adalah nilai yang terakhir kali dimasukkan (contoh di sini adalah 14). Nilai terakhir inilah yang dicetak ke peranti keluaran pada setiap kali perulangan. Berikut ilustrasi dari program sederhana di atas: 1. Dideklarasikan variabel dengan nama data dengan tipe integer data 2. Hasil kompilasi program di bawah ini: Ketika i = 1 data ke-1 = 10 10 data for (i=1;i<6;i++) { printf ( Data ke-%i =,i); scanf ( %i,&data); } Ketika i = 2 data ke-2 = 11 11 data Ketika i = 3 data ke-3 = 12 12 data Ketika i = 3 data ke-4 = 13 13 data Ketika i = 4 data ke-5 = 14 14 data 4
Ketika i = 6, perulangan berhenti, nilai terakhir variabel data = 14 3. Hasil kompilasi perulangan berikut: for (i=1;i<6;i++) { printf ( Data ke-%i = %i,i,data); } ketika i = 1 data ke-1 = 14 ketika i = 2 data ke-2 = 14 ketika i = 3 data ke-3 = 14 ketika i = 4 data ke-4 = 14 ketika i = 5 data ke-5 = 14 ketika i = 6 perulangan berhenti Jadi, variabel dengan tipe data elementer hanya dapat digunakan untuk menyimpan satu nilai. Untuk menyimpan lebih dari satu nilai data sekaligus dalam sebuah variabel, digunakan tipe data terstruktur. Contoh tipe data terstruktur atau STRUKTUR DATA adalah array, struct, stack, queue, dan lain-lain. Adapun contoh-contoh program dalam buku ini menggunakan bahasa C/C++. Terdapat pilihan perintah untuk input dan output-nya, seperti cin-cout atau printf-scanf, serta gets. 5