Struktur data abstrak seperti linked list, binary tree, dan graph mudah dijelaskan dengan diagram — tetapi selama ini kita menggambarnya di luar kode. Pada proyek ini kita membangun tool terminal yang menerima sebuah struktur data dalam memori dan mencetaknya ke layar sebagai ASCII art. Tujuannya bukan sekadar tampilan rapi, melainkan membuat hubungan antar-node terlihat mata: pointer next di linked list, edge di graph, dan parent-child di binary tree dapat dilihat langsung tanpa debugger.

Tool yang akan kita bangun memiliki cakupan berikut:

  • mendefinisikan tipe data abstrak untuk LinkedList, BinaryTree, dan Graph berarah,
  • mengonversi setiap struktur menjadi grid karakter 2D berisi node, edge, dan label,
  • mencetak grid karakter tersebut ke terminal menggunakan std::ostream,
  • diuji dengan beberapa kasus: list kosong, tree miring, graph dengan cycle.

Tampilan Akhir Tool #

Berikut contoh keluaran yang dihasilkan untuk sebuah binary tree dengan tujuh node:

text
        [1]
       /     \
    [2]       [3]
   /   \     /   \
[4]   [5] [6]   [7]

Tampilan ini dihasilkan dari kode yang menghitung posisi setiap node secara rekursif, lalu menempatkan karakter [] untuk node, / dan \ untuk edge, dan spasi untuk padding. Untuk linked list, tool menggambar rantai horizontal [a] -> [b] -> [c] -> null. Untuk graph, tool menampilkan daftar tetangga per node karena graph 2D penuh sulit dibaca di terminal.

Tujuan Pembelajaran #

Setelah menyelesaikan proyek ini, kita mampu:

  • merancang tipe data abstrak dengan pointer std::unique_ptr dan std::shared_ptr,
  • memisahkan lapisan model (struktur data) dari lapisan view (renderer),
  • menghitung koordinat 2D untuk node tree menggunakan traversal in-order berbasis lebar sub-tree,
  • mengelola grid karakter dengan std::vector<std::string> sebagai buffer gambar,
  • menulis unit test sederhana yang memeriksa konten string keluaran.

Prasyarat #

Proyek ini memanfaatkan materi yang sudah dibahas pada Section sebelumnya:

  • Pointer dan Smart Pointer — std::unique_ptr, std::shared_ptr,
  • Linked List, Binary Tree, Graph — struktur yang divisualisasikan,
  • Tree Traversal — in-order untuk menentukan posisi kolom node,
  • STL Containers — std::vector, std::string, std::unordered_map,
  • Operator Overloading — operator<< untuk mencetak struktur.

Tahapan Pengerjaan #

Proyek dikerjakan dalam empat bagian berurutan. Setiap bagian menghasilkan program yang dapat dikompilasi dan dijalankan:

  1. Bagian 1: Perancangan Visualisasi — menentukan struktur yang akan divisualisasikan, format output, dan batasan terminal.
  2. Bagian 2: Model Struktur Data — mendefinisikan kelas Node, LinkedList, BinaryTree, dan Graph dengan operasi dasar.
  3. Bagian 3: Rendering Terminal — mengonversi struktur menjadi grid karakter dan mencetaknya ke layar.
  4. Bagian 4: Pengujian Visualisasi — menguji kasus edge: struktur kosong, tree miring, graph dengan cycle.

Mulailah dari Bagian 1 dan kerjakan secara berurutan. Setiap bagian dibangun di atas berkas bagian sebelumnya sehingga urutan tidak boleh diputar balik.