Fork me on GitHub

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:

  1. Abstract Data Type (ADT);
  2. representasi struktur data linier dan primitif-primitifnya (array, linked list, variasi linked list, stack, queue);
  3. representasi struktur data non-linier dan primitif-primitifnya (tree, graph, multilist); dan
  4. algoritma penelusuran (preorder, inorder, postorder) dan pencarian (BFS, DFS).

Capaian Pembelajaran

  1. CLO1: Mahasiswa mampu membangun algoritma untuk primitif struktur data Linked List dan mengimplementasikannya dalam Bahasa Pemrograman.
  2. CLO2: Mahasiswa mampu membangun algoritma untuk primitif struktur data Stack dan Queue, serta mengimplementasikannya dalam Bahasa Pemrograman.
  3. 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:

  1. Lakukan Fork pada repository tugas yang Anda inginkan (daftar repository dapat dilihat di github.com/struktur-data).
  2. Clone repository tersebut ke komputer Anda.
  3. Buka file utama (*.cpp) menggunakan Code::Blocks.
  4. Ubah program untuk menyelesaikan solusi Anda.
  5. Jalankan program maupun gunakan fungsi debugging. Ulangi hingga sesuai harapan Anda.
  6. Pastikan semua kode Anda sudah di- commit.
  7. Push/sync ke GitHub.
  8. Buat pull request pada repository induk. Setiap tugas memiliki jadwal deadline yang sudah ditentukan.
  9. 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.

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:

  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?
  2. Setup
    • Berapa mahasiswa yang familiar dengan Git/GitHub?
    • Pasang GitHub Desktop
      • Bila Anda sudah familiar dengan Git, silakan lewati bagian ini.
    • Daftar akun GitHub
  3. GitHub workflow
  4. TODO: Slide awal: Introduction to Data Structure
  5. Penjelasan ketentuan
  6. Debugging di Code::Blocks

Sesi ke-2:

  1. Materi: Introduction to Data Structure

Tugas

  1. Bergabung dengan grup WhatsApp. Pranala akan diberikan saat sesi kuliah.
  2. Lengkapi profil GitHub Anda.
  3. Mendaftar paket GitHub Student Developer Pack
  4. Pasang Code::Blocks
    • Untuk Windows, gunakan varian mingw-setup.
  5. TODO: Kerjakan tugas pendahuluan. Batas akhir pengumpulan: sehari sebelum sesi kuliah minggu ke-2.
  6. 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

  • TODO

Minggu ke-3

Sesi ke-1:

  • Pengertian dan kegunaan Pointer

Sesi ke-2:

  • Pengertian dan kegunaan Pointer

Praktikum:

  • TODO

Tugas

  • TODO

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

  • TODO

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

  • TODO

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

  • TODO

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

  • TODO

Ujian Tengah Semester (UTS)

Materi ujian:

  1. Linear List
  2. Double List
  3. 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

  1. 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

  1. 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

  • TODO

Minggu ke-11

Sesi ke-1:

  • Review algoritma rekursif

Sesi ke-2:

  • Review algoritma rekursif

Tugas

  • TODO

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

  • TODO

Minggu ke-13

Sesi ke-1:

  • Pengertian dan Algoritma Graph

Sesi ke-2:

  • Pengertian dan implementasi algoritma penelusuran Graf (BFS dan DFS)

Tugas

  • TODO

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

  • TODO

Ujian Akhir Semester (UAS)

Materi ujian:

  1. Stack
  2. Queue
  3. Tree
    • Algoritma penelusuran tree: preorder, inorder, postorder
    • Binary Search Tree
  4. 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…

Tools

Tools Utama

  • 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:

      1. Klik kanan di project > Properties
      2. Pilih C/C++ Build:

        Ganti Build command menjadi: mingw32-make

      3. Pilih C/C++ Build > Settings > Binary Parsers:

        Centang: Windows PE

Tools Pendukung

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.