Stack, Queue & Tree
Stack, Queue & Tree
NIM : 2010511046
Kelas : A
STRUKTUR DATA
RANGKUMAN PERTEMUAN 5-7
1. Stack
Definisi stack secara ADT (Abstract Data Type) adalah sebuah struktur data
linear atau list di mana data hanya bisa masuk dan keluar dari satu ujung yang disebut
“top”. Proses pemasukkan dan pengeluaran data ini mengikuti prinsip LIFO (Last-In-
First-Out) atau FILO (First-In-Last-Out).
Contoh stack dalam bentuk fisik adalah sebuah tumpukan piring atau sebuah
wadah berisi bola tenis.
- Ketika ingin mendorong suatu nilai, maka push akan dipanggil dan top
akan ber-increment ke index 0, lalu nilai dimasukkan
- Jika ingin melakukan push lagi, maka top akan ber-increment dan data
yang lama (5) akan ter-overwrite oleh data yang baru (7)
- Ketika melakukan pop, link antara pointer head dan head node akan
terputus dan head node terhapus
- Alamat dalam pointer head akan berubah kembali menjadi alamat dari
node yang sekarang terdepan
Pengaplikasian Stack
- Pemanggilan fungsi/rekursi
- Evaluasi ekspresi
- Backtracking (history call pada browser, undo pada editor)
- Manajemen memori dan alokasi memori
- Konversi bilangan desimal ke biner
- Membalikkan urutan string
2. Infix, Prefix, dan Postfix
Infix, Prefix, dan Postfix merupakan jenis-jenis notasi penulisan ekspresi
aritmatika
a. Infix: notasi dimana ekspresi ditulis dengan operator di antara operand
Contoh: a + b + c
Jika dalam satu ekspresi terdapat dua atau lebih operator yang sama, maka urutan
pengerjeaanya mengikuti aturan presedensi. Berikut adalah prioritas pengerjaan operator:
1. Parentheses (tanda kurung) ( ), [ ], { }
2. Exponents (eksponen) ^
3. Multiplication & Division (perkalian & pembagian) *, / (dikerjakan dari
kiri ke kanan)
4. Addition & Substraction (penjumlahan & pengurangan) +, - (dikerjakan
dari kiri ke kanan)
3. Queue
Queue merupakan sebuah struktur data linear dimana operasi dijalankan sesuai
urutan terentu. Perbedaannya dengan stack adalah dalam queue data dimasukkan dari satu
ujung dan dikeluarkan dari ujung yang satu lagi. Kedua ujung tersebut adalah front dan
rear. Ujung yang di depan disebut front sedangkan ujung yang di belakang disebut rear.
Sistem yang digunakan dalam queue adalah FIFO (First-In-First-Out), dimana data yang
pertama masuk juga merupakan data yang pertama keluar, seperti antrian. Contoh
pengaplikasian nyata queue adalah network printer, dimana printer akan melakukan
instruksi satu persatu sesuai dengan urutan.
c. Front: mengembalikan data yang ada di front, setara dengan operasi peek
dalam stack.
d. Rear: mengembalikan data yang ada di rear.
e. IsEmpty: mengecek jika queue kosong atau tidak.
f. IsFull: mengecek jika queue penuh atau tidak.
Sama seperti stack, semua operasi di atas dijalankan pada waktu constant time
atau O(1). Jika hanya terdapat satu data pada queue, maka data tersebut merupakan front
dan juga rear.
Jika ingin melakukan dequeue, kita bisa cukup melakukan increment pada
front sehingga posisi front sekarang ada di index 3, tak peduli apa yang ada di
dalam index 2 karena isi queue hanya mencakupi apa yang ada di front sampai
dengan rear.
Jika array sudah full, kita bisa membuat array yang lebih besar dan
mengkopi semua data ke array yang lebih besar tersebut. Jika ada kasus dimana
array sudah mencapai index terakhir, tetapi masih ada sisa array yang kosong di
depan index front, maka kita tidak bisa lagi meng-enqueue data, karena kita tidak
dapat melakukan enqueue pada front.
Untuk mengatasi hal ini, kita dapat menggunakan konsep Circular Array.
Circular array divisualisasikan sebagai array berbentuk lingkaran.
Untuk melakukan dequeue, maka yang perlu dilakukan adalah posisi front
dijadikan sebagai (front+1)%N. Disini front berada pada index 2, jadi (2+1)%N
menghasilkan 3. Kini front sekarang berada pada index 3 dan index yang kosong
sekarang berupa index 1 dan 2.
Saat melakukan dequeue, maka address pada pointer rear akan berubah
menjadi address dari node baru. Dengan car aini, maka kedua operasi enqueue
dan dequeue menggunakan waktu constant time.
4. Tree
Tree adalah sebuah struktur data hierarki nonlinier yang terdiri atas node yang
terhubung oleh sebuah edge (link antara dua node). Contoh tree dalam dunia nyata adalah
struktur pengurus sebuah organisasi.
Pada tree, node yang teratas disebut dengan root dan memiliki hierarki tertinggi,
katakanlah setara dengan CEO dalam sebuah organisasi. Berikut gambaran umum
struktur data tree beserta komponennya.
Terdapat beberapa istilah pada tree:
a. Root: node paling atas
b. Parent: atasan dari satu atau lebih node. Dalam contoh berarti, D adalah parent
dari H dan I
c. Child: bawahan dari suatu node. Dalam contoh berarti H adalah child dari D
d. Sibling: dua atau lebih node yang memiliki parent yang sama. F dan G
merupakan sibling karena memiliki parent yang sama yaitu C
e. Leaf: node yang tidak memiliki child
f. Sub-tree: tree dari root/node. Disini berarti A mempunyai 2 sub-tree yaitu B
dan C. Lalu B mempunyai 2 sub-tree yaitu D dan E
Height (panjang) dan Depth (kedalaman) dari sebuah tree diukur dari jumlah
edge. Height merupakan jumlah edge pada jalur terpanjang dari suatu node sampai leaf
node.Sedangkan depth merupakan jumlah edge dari root sampai node itu sendiri. Berikut
ilustrasi dari height dan depth.
Binary Tree
Binary tree adalah struktur data tree yang memiliki syarat khusus dimana
setiap node dapat memiliki maksimal dua anak.
Jika diilustrasikan dalam linked list, maka tiap node memiliki tiga buah
field, dua berisi address dari anak kiri dan anak kanan, satu berisi data.
b. Complete Binary Tree: Semua level kecuali yang paling bawah harus
penuh dan semua node harus sekiri mungkin. Maksud dari ini adalah
semua node memiliki level tertentu. Root node berada di level 0,
berarti node yang dibawahnya berada di level 1, begitupun seterusnya.
Dalam complete binary tree, setiap level harus terisi penuh. Ketentuan
suatu level terisi penuh adalah jumlah maksimum node pada level i
adalah 2i. Jadi, misalkan pada level 2, maksimum node yang
dibutuhkan adalah 22 = 4. Jika pada level terbawah tidak terisi penuh,
tidak masalah, namun node harus berada pada sisi kiri, alias tida boleh
ada bagian di kiri yang kosong.
c. Perfect Binary Tree: Tipe binary tree dimana setiap node mmiliki dua
anak dan semua leaf node berada pada level yang sama.