Puji syukur penulis panjatkan kehadirat Allah SWT karena atas berkat rahmat dan hidayah-Nya sehingga Buku Ajar ini dapat diselesaikan dengan baik. Buku ajar ini berisi bahan-bahan atau materi perkuliahan, disusun secara sistematis yang digunakan dosen dan mahasiswa dalam proses perkuliahan. Buku ajar merupakan bagian dari bahan ajar yang perlu dipersiapkan oleh dosen saat memasuki awal perkuliahan.
Penulis mengucapkan terima kasih kepada pengelola Jurusan Manajemen Informatika, Pusat Pengembangan Pembelajaran dan Politeknik Negeri Sriwijaya yang telah memberikan banyak bantuan untuk terciptanya buku ajar Praktikum Struktur Data yang diharapkan dapat memberikan banyak ilmu baru bagi mahasiswa. Penulis menyadari bahwa buku ajar ini masih jauh dari kata sempurna, untuk itu penulis harap dapat menjadi pembelajaran bagi para pembaca. Penulis berharap buku ajar ini dapat membantu proses perkuliahan Praktikum Struktur Data baik bagi mahasiswa maupun dosen.
M3 Mahasiswa mampu menjelaskan mengenai pointer M4 Mahasiswa mampu menjelaskan mengenai structure M5 Mahasiswa mampu menjelaskan mengenai linked list M6 Mahasiswa mampu menjelaskan mengenai stack. M7 Mahasiswa mampu menjelaskan mengenai queue dan implementasinya M8 Mahasiswa mampu menjelaskan mengenai tree serta operasi-operasi.
RANGKUMAN
LATIHAN
POINTER
PENDAHULUAN
POKOK-POKOK ISI
Mencetak isi variabel yang alamat variabel tersebut ditunjuk oleh sebuah pointer dimana pointer tersebut alamatnya ditunjuk oleh pointer PP. Yang bersifat dinamis, bukan saja sebuah variabel tunggal, tapi dapat juga merupakan suatu structure variabel, sebagai contoh-contoh berikut ini. Pointer P dan Pointer Q, disiapkan untuk mennjuk (mencatat alamat) structure variable yang Program ini membentuk sebuah area tanpa nama seukuran (size of) nilai integer (int), dimana alamat area tersebut dicatat dlam pointer P (dikatakan : yang ditunjuk oleh pointer P ),yang dapat diilustrasikan sebagai berikut.
Tanda panah ini dibuat dengan dua karakter yaitu tanda kurang (-) dan tanda lebih besar (>). Pointer merupakan variabel level rendah yang dapat digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung oleh bahasa C. Variabel biasa, sifatnya statis dan sudah pasti, sedangkan pada pointer sifatnya dinamis dan dapat lebih fleksibel.
Variabel pointer yang tidak menunjuk pada nilai apapun berarti memiliki nilai NULL, dan disebut sebagai dangling pointer karena nilainya tidak diinisialisasi dan tidak dapat diprediksi.
STRUCTURE
Contoh struct di atas diberi nama data_mhs yang mempunyai dua buah elemen, yaitu string nama dan string alamat. Tipe data struct cocok dipakai untuk menampung data berkelompok, misalnya untuk membuat biodata siswa, yang terdiri dari data nama dan nama sekolah.
LINKED LIST
POKOK – POKOK ISI 1. Linked List dan Simpul
Elemen pertama berisi data yang dicontohkan dengan nilai numeric dan elemen kedua yang bertipe pointer berisi alamat simpul berikutnya yang diilustrasikan dengan garis panah. Karena yang dipentingkan adalah pemahaman bahwa simpul satu ter-link dengan simpul lainnya maka tanpa memperhatikan alamat tiap-tiap simpul secara fisik (secara angka) ilustrasi linked List diatas dapat disederhanakan menjadi. Jadi dalam struktur simpul hanya ada satu elemen atau field atau variabel yang bertipe pointer yang isinya adalah alamat simpul berikutnya atau next node.
Field INFO misal bertipe integer untuk menyimpan data atau informasi Field LINK bertipe pointer untuk menyimpan alamat simpul berikutnya. Inisialisasi suatu linked List maksudnya membuat kondisi awal yang menyatakan Linked List belum ada dengan cara mengisi pointer FIRST dengan NULL. Pointer FIRST adalah sebuah pointer yang disiapkan khusus untuk menunjuk Simpul awal dari suatu Linked List yang diilustrasikan sebagai simpul paling kiri.
Apabila pointer FIRST berisi NULL berarti pointer FIRST tidak menunjuk suatu simpul artinya Linked List yang simpul awalnya ditunjuk oleh Pointer FIRST belum ada. Pointer FIRST sendiri bersama-sama dengan Pointer P dan LAST, sudah di deklarasi sebagai pointer yang menunjuk struktur Simpul seperti sudah diterangakan sebelumnya sebagai berikut. Dengan FIRST = NULL berarti pointer yang namanya FIRST akan berisi NULL yang dapat diilustrasikan sebagai berikut.
Selain simpul awal maka setiap simpul yang baru dibuat harus dihubungkan (delink) dengan salah satu simpul yang sudah ada. Untuk menggambarkan tanda panah digunakan dua karakter tanda – (minus) dan tanda > (lebih besar dari ) Akan terbentuk sebuah simpul dengan ilustrasi. Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung menyambung, dinamis dan terbatas.
Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.
STACK
Stack (tumpukan) sebenarnya secara mudah dapat diartikan sebagai list (urutan) dimana penambahan dan pengambilan elemen hanya dilakukan pada satu sisi yang disebut top. Dengan melihat definisi tersebut maka jelas bahwa pada stack berlaku aturan LIFO (Last In First Out), yaitu elemen yang terakhir masuk akan pertama kali diambil atau dilayani. Pada saat kita hendak menumpuk piring-piring tersebut tentulah yang kita lakukan adalah meletakkan piring pertama pada tempatnya, selsnjutnya meletakkan piring kedua di atas piring pertama dan demikian seterusnya.
Dua operasi dasar pada stack adalah PUSH (operasi pemasukan elemen ke dalam stack) dan POP (operasi pengambilan satu elemen dari dalam stack).
QUEUE
F (Front) : Untuk menunjuk pengantri yang paling depan (Front=Depan) yaitu pengantri yang siap untuk keluar atau siap untuk dilayani. F =3, artinya pengantri yang paling depan berada dilokasi no.3 atau sudah keluar (atau sudah dilayani) sebanyak 3 pengantri dengan urutan keluar atau dilayani mulai dari Q[0], Q[1] dan Q[2] jadi yang terakhir keluar adalah yang berada di Q[2]. Antrian Linear Queue diatas disebut PENUH, tak bisa diisi lagi walaupun sebenarnya ada tempat yang tak terpakai yaitu Q [0] sampai dengan Q[5].
Pada Linear Queue , seandainya saja, bila setiap ada pengantri yang keluar pengantri yang masih ada didalam antrian digeser satu langkah kekiri. Untuk menghindari pemborosan waktu maka Linear Queue dengan konsep penggeseran dirubah menjadi Circular Queue ( Antrian Melingkar) tanpa melakukan penggerseran tapi dengan memanfaatkan tempat yang ditinggalkan pengantri yang keluar. Jadi bila antrian sudah sampai pada lokasi terakhir yaitu Q[n-1] antrian dapat dilanjutkan ke Q[0] dan seterusnya yang ilustrasinya dapat digambarkan sebagai berikut.
Struktur data queue merupakan sebuah struktur data linier dengan prinsip operasi yang mewajibkan elemen data masuk pertama untuk keluar lebih dulu. Struktur data queue sangat berbeda dengan struktur data stack yang melakukan penyimpanan data secara bertumpung dengan satu ujung terbuka untuk operasi data. Data pada struktur data queue disusun secara horizontal dan terbuka di kedua ujungnya, dimana ujung pertama untuk menghapus data dan ujung lainnya untuk menyisipkan data.
TREE
Full Binary Tree (Pohon Biner Penuh) adalah pohon biner yang setiap nodenya pasti memiliki 0 atau 2 node anak. Perfect Binary Tree (Pohon Biner Sempurna) adalah pohon biner yang semua node leafnya berada pada kedalaman yang sama dari node root. Skewed Binary Tree adalah binary tree yang semua nodenya (kecuali leaf) hanya memiliki satu child.
Karena tree tersusun oleh node-node, maka yang perlu kita deklarasikan adalah komponen node itu sendiri. Karena pohon yang kita buat merupakan sebuah pohon biner, maka untuk menambahkan sebuah node, secara otomatis penambahan tersebut mengikuti aturan penambahan node pada pohon biner. Jika nilai node baru lebih kecil dari nilai node yang sedang dicek, maka lihat ke kiri node tersebut.
Jika kiri node tersebut kosong (belum memiliki kiri), maka node baru menjadi kiri node yang sedang dicek. Jika nilai node baru lebih besar dari nilai node yang sedang dicek, maka lihat ke kanan node tersebut. Jika kanan node tersebut kosong (belum memiliki kanan), maka node baru menjadi kanan node yang sedang dicek.
Variabel **root menunjukkan node mana yang sedang dicek saat ini, untuk itu saat pemanggilan fungsi ini, variabel **root kita beri nilai pointer yang menunjuk ke node akar, yaitu pohon. Pada metode kunjungan Pre-Order node root di kunjungi paling pertama kali, kemudian subtree sebelah kiri dan di lanjut ke subtree sebelah kanan. Dimulai dari A, karena A merupakan root maka yang pertama di kunjungi adalah A, kemudian pindah ke subtree sebelah kiri yaitu B, karena B adalah root maka B yang di kunjungi, kemudian ke sebelah kiri yaitu D, karena D tidak mempunyai subtree maka D yang di kunjungi, dan selanjutnya ke sebelah kanan yaitu E dan seterusnya sampai beres.
Pada metode kunjungan In-Order subtree sebelah kiri yang pertama di kunjungi, kemudian mengunjungi root, dan selanjutnya subtree sebelah kanan. Karena subtree juga memiliki child (D dan E), maka proses yang sama di lakukan juga seperti yang sebelumnya yaitu mengunjungi D terlebih dahulu, karena D tidak mempunyai subtree lagi maka yang pertama di kunjungi adalah D, kemudian lanjut ke D, dan kemudian ke E. Pada metode kunjungan Post-Order, node root di kunjungi paling akhir, pertama yang di kunjungi adalah subtree sebelah kiri, kemudian subtree sebelah kanan, dan terakhir kunjungi root.
Di mulai dari A, karena A dalah root maka pindah kesebelah kiri yaitu B, karena B masih mempunyai subtree maka pindah ke subtree dari node B yang sebelah kiri yaitu D, kemudian ke sebelah kanannya yaitu E, dan di lanjut ke B. Variabel **root pada setiap fungsi diatas menunjukkan node mana yang sedang dikunjungi saat ini, untuk itu saat pemanggilan, variabel **root kita beri nilai pointer yang menunjuk ke node akar, yaitu pohon.