• Tidak ada hasil yang ditemukan

Modul Struktur Data IF

N/A
N/A
Ghibran

Academic year: 2023

Membagikan "Modul Struktur Data IF"

Copied!
117
0
0

Teks penuh

Kami jelaskan dengan sungguh-sungguh bahwa modul ini digunakan untuk melakukan latihan pada semester ganjil tahun ajaran 2020/2021 di Laboratorium Informatika Fakultas Informatika Telkom University. Praktisi yang dapat mengikuti praktikum lanjutan hanya yang memenuhi syarat-syarat yang ditetapkan lembaga, yaitu: sakit (dibuktikan dengan surat keterangan dokter), tugas lembaga (dibuktikan dengan surat resmi atau surat keluar dari lembaga). ) atau mengalami kecelakaan atau kehilangan (menunjukkan surat keterangan orang tua/wali siswa.). Tenaga ahli yang diperbolehkan mengikuti praktikum selanjutnya ditentukan oleh Asman Lab dan Bengkel Informatika dan tidak dapat diganggu gugat.

CODE BLOCKS IDE

Pengenalan Code Blocks

  • Instalasi Code Blocks
  • Cara Menggunakan Code Blocks

Di panel kiri pilih Files, dan di panel kanan pilih C/C++ Source Lalu klik Go seperti yang ditunjukkan pada Gambar 0-4. Kemudian klik Next > Pilih bahasa pemrograman > Isi nama file dengan path lengkap > Centang semua di build target > Selesai, seperti pada Gambar 0-5. Kelas yang belum disimpan akan diberi tanda * di sebelah kiri nama kelas, seperti pada Gambar 0-7.

Terkadang program yang kita buat tidak dapat dijalankan, sehingga kita perlu membersihkan proyek dengan cara klik kanan proyek tersebut lalu klik Clean, seperti terlihat pada Gambar 0-8.

Gambar 0-3 Menulis sintak
Gambar 0-3 Menulis sintak

PENGENALAN BAHASA C++ (BAGIAN PERTAMA)

  • Sekilas tentang C++
  • Dasar Pemrograman
    • Struktur Program C++
    • Pengenal (Identifier)
    • Tipe data dasar
    • Variabel
    • Konstanta
  • Input / Output
    • Output
    • Input
  • Operator
  • Pemodifikasi Tipe
    • Unsigned
    • Short
    • Long
  • Kondisional
    • Bentuk 1
    • Bentuk 2
    • Bentuk 3
  • Perulangan
    • Perulangan dengan for dan while
    • Perulangan dengan do … while
  • Struktur
  • Blok Program
  • Latihan

Perhatikan juga bahwa input yang diterima getche() akan disimpan dalam variabel bertipe data karakter yang harus dideklarasikan terlebih dahulu. Operator ini akan menghasilkan tipe data yang diinginkan meskipun berasal dari operan yang tipenya berbeda. Tipe data ini digunakan jika kita hanya ingin bekerja dengan data yang mempunyai nilai positif.

Tipe data struktural ini cukup kompleks, namun sangat penting dalam pemrograman C, khususnya pada struktur data.

Tabel 1.1 Tipe Data Dasar
Tabel 1.1 Tipe Data Dasar

PENGENALAN BAHASA C++ (BAGIAN KEDUA)

  • Array
    • Array Satu Dimensi
    • Array Dua Dimensi
    • Array Berdimensi Banyak
  • Pointer
    • Data dan Memori
    • Pointer dan Alamat
    • Pointer dan Array
    • Pointer dan String
  • Fungsi
  • Prosedur
  • Parameter Fungsi
    • Paramater Formal dan Parameter Aktual
    • Cara melewatkan Parameter
  • Abstract Data Type (ADT)
  • Latihan

Lokasi alokasi memori bisa sangat sewenang-wenang tergantung pada proses di masing-masing sistem operasi. Nilai variabel dalam memori dapat dipanggil kembali menggunakan alamat sel tempatnya disimpan. Untuk mengetahui alamat memori yang ditugaskan pada suatu variabel, kita dapat menggunakan kata kunci "&" yang ditempatkan sebelum nama variabel yang alamatnya ingin kita cari.

Pointer digunakan untuk menyimpan alamat memori variabel lain sehingga pointer dapat mengakses nilai variabel yang alamatnya ditunjuk. Agar sebuah pointer menunjuk ke variabel lain, pointer tersebut harus terlebih dahulu diisi dengan alamat memori yang ditunjuk. Jadi variabel yang ditunjuk oleh pointer dapat diakses melalui variabel itu sendiri atau melalui pointer.

Untuk mencari nilai variabel yang ditunjuk oleh pointer, gunakan tanda * sebelum nama variabel pointer. Jika π‘π‘Ž mengacu pada beberapa elemen array, mendefinisikan π‘π‘Ž + 1 akan menunjukkan elemen berikutnya, π‘π‘Ž + 𝑖 akan menunjukkan elemen ke-𝑖 setelah π‘π‘Ž, sedangkan π‘π‘Ž βˆ’ 𝑖 akan menunjukkan elemen ke-𝑖 sebelum π‘π‘Ž, sehingga jika 𝑝 π‘Ž menunjuk ke π‘Ž [0] lalu βˆ— (π‘π‘Ž + 1) akan memuat konten elemen ke π‘Ž[1]. Pemanggilan nilai menyalin nilai parameter aktual ke parameter formal, sehingga parameter aktual tidak berubah meskipun parameter formal berubah.

Jelasnya, saat memanggil fungsi pertukaran, meneruskan variabel a dan b tidak mengubah nilai variabel tersebut. Definisi/Spesifikasi Tipe dan Primitif/Fungsi Header (.h) - Spesifikasi tipe mengikuti kaidah bahasa yang digunakan.

Gambar 2-2 Ilustrasi Memory
Gambar 2-2 Ilustrasi Memory

SINGLE LINKED LIST

Linked List dengan Pointer

Single Linked List

  • Pembentukan Komponen-Komponen List
  • Insert
  • Delete
  • Update
  • View
  • Searching

Evolusi dari single linked list adalah sebuah sirkular linked list, yaitu sebuah single linked list yang elemen penerus berikutnya tidak mempunyai nilai Nol, namun menunjuk ke elemen awal dari daftar tersebut. Jadi ciri dari Circular List adalah Anda dapat mengakses kembali elemen awal list tanpa harus melakukan backtracking, melainkan dengan terus melakukan iterasi hingga kembali ke elemen aslinya. Fungsi ini akan mengatur nilai awal dari list yaitu first(list) dan last(list) dengan nilai nol.

Merupakan metode memasukkan data ke dalam daftar yang ditempatkan pada node tertentu yang ditunjuk oleh pengguna. Primitif dalam daftar ini adalah bagian dari daftar ADT yang disimpan dalam file *.h dan file *.cpp, merinci file *.h untuk menyimpan prototipe primitif atau fungsi dan tipe data yang disimpan dalam daftar primitif digunakan, untuk menyimpan . Ini adalah operasi dasar pada daftar yang digunakan untuk memperbarui data dalam daftar.

Gambar 3-4 Circular Single Linked list
Gambar 3-4 Circular Single Linked list

Latihan

DOUBLE LINKED LIST

Double Linked List

  • Insert
  • Delete

Proses pencarian, pemutakhiran data, dan melihat data pada dasarnya sama dengan proses daftar tertaut tunggal. Hanya saja pada double linked list lebih mudah untuk mengakses elemen karena dapat melakukan iterasi maju dan mundur. Seperti daftar tertaut tunggal, daftar tertaut ganda juga memiliki ADT yang pada dasarnya sama dengan ADT dalam daftar tertaut tunggal.

Gambar 4-4 Double Linked list Insert First 1
Gambar 4-4 Double Linked list Insert First 1

Latihan

Buat implementasi ADT double linked list pada file β€œdoublelist.cpp” dan uji hasil implementasi ADT pada file β€œmain.cpp”.

Gambar 4-24 Output kasus kendaraan
Gambar 4-24 Output kasus kendaraan

MULTI LINKED LIST

Multi Linked List

  • Insert
  • Delete

Memasukkan elemen induk sama dengan konsep penyisipan untuk daftar tertaut tunggal, ganda, dan melingkar. Untuk menghapus elemen induk, semua elemen anak dengan elemen induk tersebut juga harus dihapus ketika dihapus.

Gambar 5-2 Multi Linked list Insert Anak 1
Gambar 5-2 Multi Linked list Insert Anak 1

Latihan

STACK (TUMPUKAN)

  • Pengertian
  • Komponen-Komponen dalam Stack
  • Operasi-Operasi dalam Stack
    • Push
    • Pop
  • Primitif-Primitif dalam Stack
  • Stack (Representasi Tabel)
    • Operasi-operasi Dalam Stack
    • Primitif-primitif Dalam Stack
  • Latihan

Operasi ini mirip dengan operasi penghapusan pertama dalam daftar linier karena elemen yang diakses adalah elemen pertama, teratas, atau hanya elemen pertama. Sebenarnya ada lebih sedikit primitif di tumpukan karena tumpukan hanya melakukan operasi pada elemen teratas. Operasi pada representasi tabel stack pada dasarnya sama dengan representasi pointer yaitu PUSH dan POP.

Push adalah operasi untuk mendorong data ke dalam tumpukan. Penyisipan dilakukan dengan memindahkan indeks dari TOP ke indeks berikutnya. Setelah data diambil, indeks TOP akan dipindahkan ke indeks sebelum TOP tanpa kehilangan informasi dari indeks TOP sebelumnya. Prosedur akan terus membaca dan menerima masukan pengguna dan memasukkan setiap entri ke dalam tumpukan hingga pengguna menekan tombol enter.

Gambar 6-2 Stack Push 1
Gambar 6-2 Stack Push 1

QUEUE (ANTRIAN)

  • Pengertian
  • Operasi-Operasi dalam Queue
    • Insert (Enqueue)
    • Delete (Dequeue)
  • Primitif-Primitif dalam Queue
  • Queue (Representasi Tabel)
    • Pengertian
    • Primitif-Primitif dalam Queue
  • Latihan

Primitif yang diantri disimpan dalam antrian ADT, seperti pada materi sebelumnya, primitif disimpan dalam file *.h dan *.c. Algoritma paling sederhana dan "naif" untuk menghapus elemen jika Antrean tidak kosong: dapatkan nilai elemen HEAD, pindahkan semua elemen dari HEAD+1 ke TAIL (jika ada), lalu TAIL "kembali". Kasus khusus untuk Queue dengan keadaan awal 1 elemen yaitu susunan HEAD dan TAIL dengan DEFINISI.

Algoritma untuk menghapus suatu elemen jika antrian tidak kosong: ambil nilai elemen HEAD, lalu HEAD β€œnext”. Representasi ini memungkinkan tidak ada gerakan yang perlu dilakukan saat menambahkan elemen seperti pada Alternatif II. Penentuan penerus dari indeks yang diubah/"maju" dilakukan seperti pada algoritma penambahan elemen: jika HEAD mencapai IdxMAx, maka penerus HEAD adalah 1.

Dengan representasi ini jumlah elemen diketahui secara eksplisit, namun untuk menjumlahkan elemen harus dilakukan perhitungan TAIL. Buat implementasi antrian ADT pada file β€œqueue.cpp” dengan menerapkan mekanisme antrian Alternatif 1 (fixed head, moving tail). Buat implementasi ADT Queue pada file β€œqueue.cpp” dengan mengimplementasikan mekanisme antrian Alternatif 2 (moving head, moving tail).

Buat implementasi Antrian ADT di file "queue.cpp" dengan menerapkan mekanisme 3 antrian alternatif (memutar kepala dan ekor).

Gambar 7-2 Queue Insert 1
Gambar 7-2 Queue Insert 1

PROSEDUR DAN FUNGSI REKURSIF

  • Pengertian
  • Kriteria Rekursif
  • Kekurangan Rekursif
  • Contoh Rekursif
  • Latihan

Pemanggilan mandiri subprogram (yaitu ketika kondisi khusus tidak terpenuhi) Secara umum, bentuk subprogram rekursif memiliki pernyataan bersyarat. Subprogram rekursif umumnya digunakan untuk permasalahan dengan langkah-langkah penyelesaian yang berpola atau teratur. Terkadang ketika kita mempunyai masalah dan mengetahui algoritma solusinya, kita memilih subprogram rekursif jika memungkinkan untuk menggunakannya.

Secara algoritmik (dari perspektif algoritmik, yaitu jika kita mempertimbangkan penggunaan memori, waktu eksekusi subprogram) subprogram rekursif seringkali tidak efisien. Dengan demikian, subrutin rekursif umumnya efisien dalam menulis instruksi, namun terkadang tidak efisien secara algoritmik. Namun banyak juga permasalahan yang lebih cocok diselesaikan secara rekursif (misalnya dalam pencarian, yang akan dibahas pada pertemuan mendatang).

Konsep penggunaannya nampaknya sederhana, karena fungsi rekursif dapat menyederhanakan penyelesaian suatu masalah, seringkali menghasilkan algoritma dan program yang lebih pendek dan mudah dipahami.

TREE

  • Pengertian
  • Jenis-Jenis Tree
    • Ordered Tree
    • Binary Tree
  • Operasi-Operasi dalam Binary Search Tree
  • Traversal pada Binary Tree
  • Latihan

Sebuah pohon biner dapat dikatakan lengkap jika, pada setiap levelnya, ia mempunyai jumlah node maksimum yang mungkin dimilikinya, tidak termasuk node terakhir. Pohon biner yang terdiri dari pohon-T yang setiap simpulnya terdiri dari tepat 0 atau 2 anak disebut pohon 2 atau pohon biner diperluas. Jika setiap N node memiliki 0 atau 2 anak, maka disebut node internal, dan node dengan 0 anak disebut node eksternal.

Merupakan pohon pencarian biner yang mempunyai ketentuan selisih tinggi maksimum antara subpohon kiri dan subpohon kanan adalah 1. Apabila setelah dilakukan pemutakhiran posisi/lokasi node yang bersangkutan tidak sesuai dengan ketentuan maka dilakukan REGENERASI proses harus dilakukan agar masih memenuhi kriteria pohon pencarian biner. Pencarian pada pohon pencarian biner dilakukan dengan menempatkan sebuah pointer dan membandingkan nilai yang dicari dengan node awal (root).

Kursor akan berpindah ke anak kiri jika nilai yang dicari lebih kecil dari nilai node yang ditunjuk saat itu. Kursor akan berpindah ke anak yang benar jika nilai yang dicari lebih besar dari nilai node yang sedang ditunjuk. Nilai node saat ini akan dibandingkan kembali dengan nilai yang dicari, dan jika tidak ditemukan maka loop akan kembali ke langkah 2.

Pencarian berhenti ketika nilai yang dicari ditemukan atau kursor menunjukkan nilai nol. Nilai yang dicari: 18. Buat implementasi ADT pada pohon pencarian biner pada file "bstree.cpp" dan uji hasil implementasi ADT pada file "main.cpp".

Gambar 9-2 Ordered Tree
Gambar 9-2 Ordered Tree

GRAPH

Pengertian

Jenis-Jenis Graph

  • Graph Berarah (Directed Graph)
  • Graph Tidak Berarah (Undirected Graph)

Mengingat urutan parsial elemen-elemen suatu himpunan, diinginkan bahwa elemen-elemen yang terurut sebagian memiliki urutan linier. Karena suatu barisan berikutnya akan mempunyai banyak barisan linier yang dapat dibentuk dari barisan berikutnya. Daftar yang digambarkan secara horizontal adalah daftar jumlah pendahulu setiap elemen, yang disebut daftar "Leader", yang direpresentasikan sebagai daftar di mana alamat elemen pertama dan terakhir (Head-Tail) dicatat, dan elemen-elemennya adalah dipesan berdasarkan kunci.

Untuk urutan parsial tertentu X < Y: Jika Daftar yang ditampilkan secara vertikal (di bawah) adalah daftar yang merupakan alamat tidak langsung ke masing-masing pendahulunya, disebut sebagai "Trailer". Untuk setiap elemen daftar Pemimpin X, daftar penerus disimpan sebagai elemen daftar Trailer, setiap elemen berisi alamat pengikut.

Memasukkan data penerus (X < Y), mengetahui X, dilakukan dengan alamat InsertFirst Y sebagai elemen Daftar Trailer dengan pengurutan kunci. Tahap Eksekusi: Ulangi langkah-langkah berikut hingga daftar β€œhabis”, artinya semua elemen daftar telah ditulis secara total.

Hal mendasar lainnya yang perlu diketahui adalah bahwa suatu simpul A dikatakan sebagai simpul bertetangga B jika simpul A dan simpul B dihubungkan langsung oleh suatu sisi. Dari contoh gambar grafik pada halaman sebelumnya dapat disimpulkan bahwa: A berdekatan dengan B, B berdekatan dengan C, A tidak berdekatan dengan C, B tidak berdekatan dengan D.

Gambar 10-4 Graph  B. Topological Sort
Gambar 10-4 Graph B. Topological Sort

Latihan

Referensi

Dokumen terkait