Silabus Struktur Data
Bila Anda guru/dosen atau tertarik dengan desain mata kuliah ini, silakan lihat dokumen meta.
Deskripsi Mata Kuliah
Pada mata kuliah ini diajarkan berbagai macam struktur data yang dapat diimplementasikan dalam program komputer, serta bagaimana memilih struktur data yang tepat untuk suatu kasus tertentu. Materi yang diajarkan meliputi:
- Abstract Data Type (ADT);
- representasi struktur data linier dan primitif-primitifnya (array, linked list, variasi linked list, stack, queue);
- representasi struktur data non-linier dan primitif-primitifnya (tree, graph, multilist); dan
- algoritma penelusuran (preorder, inorder, postorder) dan pencarian (BFS, DFS).
Capaian Pembelajaran
- CLO1: Mahasiswa mampu membangun algoritma untuk primitif struktur data Linked List dan mengimplementasikannya dalam Bahasa Pemrograman.
- CLO2: Mahasiswa mampu membangun algoritma untuk primitif struktur data Stack dan Queue, serta mengimplementasikannya dalam Bahasa Pemrograman.
- CLO3: Mahasiswa mampu membangun algoritma untuk primitif struktur data non-linear Linked List, Graph dan Tree, serta mengimplementasikannya dalam Bahasa Pemrograman
Prasyarat
- Matakuliah syarat: Dasar Algoritma dan Pemrograman (CCH1A4).
- Pemahaman variabel, tipe data, alur kendali, dan penggunaan fungsi dasar di C++
- Memahami cara menggunakan fitur-fitur debugging: Debug / Continue, Run to cursor, Step over, Step into, Step out, Breakpoint, Local variables
Bila penguasaan Anda dirasa kurang untuk konsep-konsep tersebut, disarankan untuk mereview kembali. Materi-materi prasyarat dapat dilihat di bagian Materi Pemula.
Spesifikasi komputer:
-
Komputer dengan OS Windows 7 ke atas, 32-bit/64-bit, RAM minimal 2 GB
Anda juga dapat menggunakan macOS maupun Linux, namun perlu penyesuaian tools yang digunakan.
Penguasaan tools berikut sangat disarankan:
- Git dan GitHub. Pengenalan Git dan GitHub akan dilakukan saat sesi kuliah. Silakan lihat bagian GitHub untuk rujukan lebih lanjut.
Bahan Kajian / Pokok Bahasan
Adapun bahan kajian atau pokok bahasannya adalah:
- Linear Linked List (termasuk Stack dan Queue)
- Circular Linked List
- Double Linked List
- Non Linear Linked List (termasuk Tree dan Graph)
Kajian akan didemonstrasikan menggunakan contoh live-code maupun slides yang tersedia di (TODO). Latihan lebih lanjut akan dikerjakan dalam praktikum.
Tugas
Semua tugas dapat dilihat di bagian Kerangka Mata Kuliah.
Workflow
Bila Anda menggunakan GitHub Desktop, panduan umum berikut dapat membantu Anda:
Disarankan untuk menyalakan Edit
->Automatically Sync after Committing
. Langkah-langkahnya sebagai berikut:
- Lakukan Fork pada repository tugas yang Anda inginkan (daftar repository dapat dilihat di github.com/struktur-data).
- Clone repository tersebut ke komputer Anda.
- Buka file utama (
*.cpp
) menggunakan Code::Blocks.
- Ubah program untuk menyelesaikan solusi Anda.
- Jalankan program maupun gunakan fungsi debugging. Ulangi hingga sesuai harapan Anda.
- Pastikan semua kode Anda sudah di- commit.
- Push/sync ke GitHub.
- Buat pull request pada repository induk. Setiap tugas memiliki jadwal deadline yang sudah ditentukan.
- Anda tetap dapat mengirim perbaikan dan penyempurnaan sampai waktu pengirim tugas ditutup - silakan tambahkan komentar pada pull request untuk memberitahu bahwa Anda telah memperbaruinya.
Saat pull request dibuat, Anda akan menerima pesan bahwa “the Travis CI build is in progress” – ini berarti solusi Anda sedang diperiksa secara otomatis untuk kesalahan sintaks/kompilasi. Bila “build” gagal (menampilkan icon “X” merah), klik pranala “details” dan scroll ke bagian bawah untuk melihat apa saja kesalahannya. Sesuai dengan Ketentuan di bawah, silakan memperbaiki kesalahan dan kirimkan perubahan Anda.
Tanggapan akan diberikan pada pull request Anda, jadi silakan ya membalas dengan uneg-uneg dan pertanyaan Anda! Anda dipersilakan untuk mengirimkan pull request lebih awal sebagai “work-in-progress” bila Anda merasa buntu dan ingin menanyakan suatu hal. Perhatikan bahwa solusi Anda juga akan dapat diakses publik di alamat http://USERNAME.github.io/TUGAS
.
Versi
Untuk tugas dengan beberapa Versi (V1
, V2
, dll.) yang dicantumkan dalam README: Versi tersebut dapat dijadikan panduan bagaimana mengerjakan tugas-tugas tersebut dalam langkah-langkah kecil. Pastikan Anda telah mencapai Versi tertinggi pada tanggal deadline. Lihat juga: Bonus.
Ketentuan
Ketentuan berikut juga berlaku di dunia nyata, lho.
- Travis CI build harus berhasil, antara lain:
- File kode dapat dikompilasi dengan baik (tools yang digunakan adalah CMake 3.2.2 dan GCC).
- Program dapat dieksekusi.
- Terapkan “good programming style” yang Anda pelajari di kelas
- Pastikan program mudah dibaca.
- Pedoman lengkap penulisan kode C++ dapat dilihat di C++ Core Guidelines
- Setiap kode yang Anda ambil dari sumber lain harus Anda cantumkan atribusi, lihat: Plagiarisme.
Bonus
Nilai plus akan diberikan untuk:
- Tes otomatis (misalnya menggunakan Google Test)
- Kreativitas (syarat utama tugas tetap harus terpenuhi)
- Tugas tertentu mencantumkan bagian
BONUS
di file README.
Kerangka Mata Kuliah
Minggu ke-1
Sesi ke-1:
- Pendahuluan
- Perkenalan dosen
- Diskusi tentang lingkup mata kuliah ini
- Perkenalan masing-masing mahasiswa
- Nama
- Apa yang Anda “lakukan”?
- Apa yang ingin Anda raih dalam mata kuliah ini?
- Hal apa dalam pemrograman/algoritma (atau teknologi apa pun) yang Anda masih khawatir atau merasa kurang?
- Setup
- Berapa mahasiswa yang familiar dengan Git/GitHub?
- Pasang GitHub Desktop
- Bila Anda sudah familiar dengan Git, silakan lewati bagian ini.
- Daftar akun GitHub
- GitHub workflow
- TODO: Slide awal: Introduction to Data Structure
- Penjelasan ketentuan
- Debugging di Code::Blocks
Sesi ke-2:
- Materi: Introduction to Data Structure
Tugas
- Bergabung dengan grup WhatsApp. Pranala akan diberikan saat sesi kuliah.
- Lengkapi profil GitHub Anda.
- Mendaftar paket GitHub Student Developer Pack
- Pasang Code::Blocks
- Untuk Windows, gunakan varian mingw-setup.
- TODO: Kerjakan tugas pendahuluan. Batas akhir pengumpulan: sehari sebelum sesi kuliah minggu ke-2.
- Implementasi Linear Linked List. Batas akhir pengumpulan: Minggu-6 perkuliahan.
Minggu ke-2
Sesi ke-1:
- Pengertian dan kegunaan Abstract Data Type
Sesi ke-2:
- Pengertian dan kegunaan Abstract Data Type
Tugas
Minggu ke-3
Sesi ke-1:
- Pengertian dan kegunaan Pointer
Sesi ke-2:
- Pengertian dan kegunaan Pointer
Praktikum:
Tugas
Minggu ke-4
Sesi ke-1:
- Pengertian dan Algoritma Linear List
Sesi ke-2:
- Single Linked List
- Implementasi Single Linked List pada bahasa pemrograman C++
Praktikum:
- Implementasi Algoritma Linear List pada bahasa pemrograman C++
Tugas
Minggu ke-5
Sesi ke-1:
- Pengertian dan Algoritma Double List
Sesi ke-2:
- Implementasi Algoritma Double List pada bahasa pemrograman C++
Praktikum:
- Implementasi Algoritma Double List pada bahasa pemrograman C++
Tugas
Minggu ke-6
Sesi ke-1:
- Pengertian dan Algoritma Circular List
- Implementasi Algoritma Circular List pada bahasa pemrograman C++
Sesi ke-2:
- Implementasi Algoritma Circular List pada suatu kasus
Praktikum:
- Implementasi Algoritma Circular List pada bahasa pemrograman C++
- Implementasi Algoritma Circular List pada suatu kasus
Tugas
Minggu ke-7
Sesi ke-1:
- Pengertian dan Algoritma Linked List with Last
- Implementasi Algoritma Linked List with Last pada bahasa pemrograman C++
Sesi ke-2:
- Implementasi Algoritma Linked List with Last pada suatu kasus
Praktikum:
- Implementasi Algoritma Linked List with Last pada bahasa pemrograman C++
- Implementasi Algoritma Linked List with Last pada suatu kasus
Tugas
Ujian Tengah Semester (UTS)
Materi ujian:
- Linear List
- Double List
- Circular List
Minggu ke-8
Sesi ke-1:
- Pengertian dan Algoritma Stack menggunakan Array
Sesi ke-2:
- Implementasi algoritma Stack pada bahasa pemrograman C++
Praktikum:
- Implementasi algoritma Stack pada bahasa pemrograman C++
Tugas
- Implementasi Priority Queue/Stack.
Batas akhir pengumpulan: Minggu-5 perkuliahan setelah UTS (minggu ke-12).
Minggu ke-9
Sesi ke-1:
- Pengertian dan Algoritma Queue menggunakan Array
Sesi ke-2:
- Implementasi algoritma Queue pada bahasa pemrograman C++
Tugas
- Implementasi Struktur Data Graf.
Batas akhir pengumpulan: Minggu-6 perkuliahan setelah UTS (minggu ke-13).
Minggu ke-10
Sesi ke-1:
- Implementasi algoritma Queue pada bahasa pemrograman C++
Sesi ke-2:
- Implementasi algoritma Queue pada bahasa pemrograman C++
Praktikum:
- Implementasi algoritma Queue pada bahasa pemrograman C++
Tugas
Minggu ke-11
Sesi ke-1:
- Review algoritma rekursif
Sesi ke-2:
- Review algoritma rekursif
Tugas
Minggu ke-12
Sesi ke-1:
- Pengertian Tree beserta implementasi algoritma penelusurannya (preorder, inorder, postorder)
- Pengertian dan Algoritma Binary Search Tree
- Implementasi Algoritma Binary Search Tree pada bahasa pemrograman C++
Sesi ke-2:
- Implementasi Binary Search Tree pada suatu kasus
Praktikum:
- Implementasi Algoritma Binary Search Tree pada bahasa pemrograman C++
Tugas
Minggu ke-13
Sesi ke-1:
- Pengertian dan Algoritma Graph
Sesi ke-2:
- Pengertian dan implementasi algoritma penelusuran Graf (BFS dan DFS)
Tugas
Minggu ke-14
Sesi ke-1:
- Implementasi Algoritma Graph pada bahasa pemrograman C++
Sesi ke-2:
- Implementasi Graph pada suatu kasus
Praktikum:
- Implementasi Algoritma Graph pada bahasa pemrograman C++
- Implementasi Graph pada suatu kasus
Tugas
Ujian Akhir Semester (UAS)
Materi ujian:
- Stack
- Queue
- Tree
- Algoritma penelusuran tree: preorder, inorder, postorder
- Binary Search Tree
- Graph
- Algoritma penelusuran graph: BFS dan DFS
Tips Tugas Kelompok
- Kelompok maksimal dua orang
- Tentukan editor/IDE dan lingkungan yang nyaman bagi kalian
- Anggota dengan pengalaman lebih sedikit sebaiknya mendapat porsi pengerjaan lebih intensif
- Bergantian dalam mengerjakan
- Sering-seringlah menyimpan kode dan melakukan commit & push/sync
Pustaka
Pustaka Utama
- Diktat Kuliah IF2181 Struktur Data, Inggriani Liem, ITB, 2003.
Pustaka Pendukung
Materi Pemula
Agar dapat memahami mata kuliah ini dengan lancar, Anda perlu menguasai dasar algoritma dan pemrograman.
Kapan pun Anda membutuhkannya, silakan manfaatkan referensi berikut…
- C/C++ Compiler dan IDE: Code::Blocks (termasuk GCC/G++ compiler dan GDB debugger dari TDM-GCC)
-
Alternatif: Eclipse for C++ Development + GCC/G++ compiler dan GDB debugger dari TDM-GCC
Bila menggunakan Eclipse di Windows, agar project dapat dieksekusi:
- Klik kanan di project > Properties
-
Pilih C/C++ Build:
Ganti Build command menjadi: mingw32-make
-
Pilih C/C++ Build > Settings > Binary Parsers:
Centang: Windows PE
GitHub
Latihan Soal
Pembobotan Nilai
- UTS – 25%
- UAS - 35%
- Tugas - 25%
- Praktikum – 15%
Distribusi Nilai
Indeks |
Rentang |
A |
>= 80.01 |
AB |
80.01 .. 80.00 |
B |
65.01 .. 70.00 |
BC |
60.01 .. 65.00 |
C |
50.01 .. 60.00 |
D |
40.01 .. 50.00 |
E |
<= 40.00 |
Plagiarisme
Bagi yang melakukan kecurangan/plagiarism nilainya akan diturunkan sesuai dengan tingkat plagiarismenya.
Dimohon menghargai ketentuan penggunaan dan/atau lisensi dari kode apa pun yang Anda temukan, dan apabila Anda mengimplementasikan atau menduplikasi sebuah algoritma atau kode dari sumber lain, cantumkan kredit/atribusi ke sumber berbentuk komentar dalam kode.
Ucapan Terima Kasih
Struktur mata kuliah dan pemanfaatan GitHub berdasarkan Advanced JavaScript oleh Aidan Feldman.