2. A + A = A
3. A + 1 = 1
4. 1
A A
= +
5. A 1 = A
6. A A = A
7. A 0 = 0
8. A
A =
⋅ 9.
B A
B A
= +
10. B
A B
A +
=
2.3 Struktur Data
Struktur data memiliki peran yang penting dalam pembuatan sebuah program. Alokasi memori untuk menampung data yang akan diolah oleh program ditentukan melalui
struktur data. Di dalam pemodelan ini beberapa struktur data yang digunakan adalah struktur data tumpukan stack dan struktur data pohon biner binary tree.
2.3.1 Tumpukan Stack
Tumpukan stack termasuk struktur data linier dimana elemennya boleh ditambahkan dan dihapus hanya dari satu ujung yang sama. Tumpukan merupakan suatu daftar
elemen-elemen dimana elemen hanya boleh disisipkan dan dihapus diambil hanya pada satu ujung yang sama. Secara sederhana, tumpukan dapat digambarkan sebagai
suatu kumpulan data yang seolah-olah suatu data diletakkan di atas data yang lain. Hal yang perlu diingat tentang tumpukan adalah bahwa data ditambahkan disisipkan dan
diambil dihapus dari ujung yang sama, yang disebut sebagai ujung atas tumpukan top of stack.
Tumpukan dapat digambarkan seperti pada Gambar 2.9 yakni a tumpukan piring, b tumpukan kotak. Pada Gambar 2.9 terlihat bahwa kotak B diletakkan di
Universitas Sumatera Utara
atas kotak A dan kotak C diletakkan di atas kotak B dan seterusnya. Menambah atau mengambil sebuah kotak dapat dilakukan lewat ujung bagian atas. Dengan illustrasi
ini dapat dilihat bahwa tumpukan merupakan kumpulan data yang sifatnya dinamis, artinya elemen tumpukan dapat ditambahkan dan dapat dikurangi diambil. Jika
dilihat dari sisi penyisipan dan penghapusan data, maka tumpukan juga dikenal dengan daftar masuk-terakhir-keluar-pertama Last In First Out LIFO List Santosa,
1992, hal:72.
a. Tumpukan piring b.Tumpukan kotak
Gambar 2.9 Illustrasi suatu tumpukan
2.3.1.1 Penyajian Tumpukan
Penyajian tumpukan dapat dilakukan dengan menggunakan tipe data terstruktur berlarik array dengan anggapan bahwa banyaknya elemen tidak boleh melebihi
batas maksimum tumpukan. Dengan demikian diperlukan suatu variabel untuk mencatat posisi ujung tumpukan Top. Nilai variabel ini akan bertambah satu, setiap
menambahkan satu selemen dan berkurang satu, setiap penghapusan satu data. Dengan anggapan ini, maka tumpukan dapat dideklarasikan sebagai berikut :
const MaxStack = 255 Type TipeStack
InfoMaxStack as String1 Top as byte
End Type Dim Tumpukan as TipeStack
Dengan deklarasi di atas, elemen tumpukan tersimpan dalam larik Tumpukan.Info yang bertipe string1 menampung 1 karakter. Banyaknya elemen
A B
C D
Universitas Sumatera Utara
tumpukan maksimum adalah sebesar MaxStack, yang dalam hal ini terdiri dari 255 elemen.
Banyak elemen yang terdapat di dalam suatu tumpukan dinyatakan dengan Tumpukan.Top. Tumpukan.Top sekaligus menunjukkan posisi elemen terakhirteratas
dalam tumpukan yang dimaksud. Sebagai contoh, jika Tumpukan.Top = 7, berarti dalam tumpukan terdapat 7 elemen yaitu Tumpukan.Info1, . . . , Tumpukan.Info7.
Jika sebuah data yang diambil, maka nilai field Tumpukan.Top dikurangi 1 menjadi 6, yang berarti Tumpukan.Info6 menjadi elemen teratas setelah pengambilan data.
Sebaliknya, jika sebuah data ditambahkan ke tumpukan, maka nilai Tumpukan.Top ditambah dengan 1 menjadi 7, sehingga Tumpukan.Info8 adalah elemen teratas
Santosa, 1992.
2.3.1.2 Operasi Pada Tumpukan
Ada dua operasi dasar yang dapat dilakukan pada sebuah tumpukan yaitu operasi menambahkan data dan menghapus data. Operasi menambahkan data umumnya
dikenal dengan istilah ”push” data dan menghapus atau mengambil data dikenal dengan istilah ”pop” data.
Berdasarkan deklarasi tumpukan seperti di atas, maka prosedur operasi push, yakni untuk menambahkan data ke tumpukan dijelaskan sebagai berikut.
Prosedur PUSH STACK, TOP, MAXSTACK, ITEM; Prosedur ini digunakan untuk menambahkan ITEM ke STACK Lipschutz, S. 1986.
1. [Periksa apakah STACK layak diisi]
If TOP = MAXSTACK Then PRINT ”OVERFLOW” : RETURN Kondisi OVERFLOW menyatakan STACK telah penuh.
2. [Naikkan nilai TOP dengan 1]
TOP = TOP + 1 3.
[Sisipkan ITEM ke posisi TOP yang baru] STACK[TOP] = ITEM
4. RETURN
Universitas Sumatera Utara
Prosedur operasi pop, yakni mengambil data atau menghapus data dari tumpukan, dijelaskan sebagai berikut.
Prosedur POPSTACK, TOP, ITEM; Prosedur ini menghapus elemen TOP dari STACK dan menyimpannya ke variabel ITEM Lipschutz, S. 1986.
1. [Periksa apakah STACK layak diisi]
If TOP = 0 Then PRINT ”UNDERFLOW” : RETURN Kondisi UNDERFLOW menyatakan STACK telah kosong.
2. [Simpan elemen TOP ke ITEM]
ITEM = STACK[TOP] 3.
[Turunkan nilai TOP dengan 1] TOP = TOP – 1
4. RETURN
2.3.1.3 Implementasi Tumpukan
Tumpukan bisa digunakan untuk menangani pengolahan ungkapan numeris secara umum. Dalam tulisan ini tumpukan akan digunakan untuk menangani pengolahan
ungkapan aljabar Boole, yakni untuk mengubah notasi infix menjadi notasi postfix. Selanjutnya tumpukan juga akan digunakan untuk mengevaluasi ungkapan aljabar
Boole tersebut, sehingga diperoleh output dari suatu ungkapan. Dimana ungkapan aljabar Boole terbentuk sesuai dengan susunan gerbang logika.
Berikut ini adalah algoritma transformasi ekspresi infix ke postfix dengan menggunakan tumpukan, dimana Q adalah eskpresi infix dan P adalah ekspresi
postfix. Lipschutz, S. 1986. 1.
Push ”” ke stack, dan tambahkan ”” ke akhir Q. 2.
Telusuri Q dari kiri ke kanan dan ulangi langkah 3 hingga 6 untuk setiap elemen dari Q sampai stack kosong.
3. Jika sebuah operand dijumpai, tambahkan ke P.
4. Jika buka kurung dijumpai, push ke stack.
5. Jika operator :
Universitas Sumatera Utara
a. Secara berulang pop dari stack dan tambahkan ke P setiap operator pada
puncak stack yang memiliki preseden sama atau lebih tinggi dari preseden .
b. Tambahkan ke stack.
[Akhir struktur jika] 6.
Jika tutup kurung dijumpai, maka” a.
Secara berulang pop dari stack dan tambahkan ke P setiap operator pada puncak stack hingga buka kurung dijumpai.
b. Hapus buka kurung. [Jangan menambahkan buka kurung ke P].
[Akhir struktur jika] [Akhir perulangan pada langkah 2]
7. Keluar.
Tumpukan stack juga dapat digunakan untuk mengevaluasi ekpresi yang dituliskan dengan notasi postfix. Berikut ini adalah algoritma untuk mengevaluasi
ekspresi dengan notasi postfix; P merupakan ekspresi postfix Lipschutz, S. 1986. 1.
Tambahkan buka kurung ”” di akhir P. [Hal ini bertindak sebagai sentinel pembatas].
2. Telusuri P dari kiri ke kanan, dan ulangi langkah 3 dan 4 untuk setiap elemen P
hingga sentinel ”” dicapai. 3.
Jika sebuah operand dijumpai, letakkan ke stack. 4.
Jika sebuah operator dijumpai, maka: a.
Hapus dua buah elemen puncak dari stack, dimana A adalah elemen top, dan B adalah elemen berikutnya di bawah top.
b. Evaluasi BA
c. Letakkan hasil b kembali ke stack.
[Akhir struktur jika] [Akhir perulangan pada langkah 2]
5. Hasil akhir adalah nilai yang terdapat pada elemen top dari stack.
6. Keluar.
Universitas Sumatera Utara
2.3.1.4 Penulisan Ungkapan Numeris
Penulisan ungkapan logika menyerupai penulisan ungkapan numeris, hanya saja operator yang digunakan pada penulisan ungkapan logika adalah penjumlahan dan
perkalian. Salah satu pemanfaatan tumpukan adalah untuk menulis ungkapan matematika dengan menggunakan notasi tertentu. Seperti kita ketahui, dalam
penulisan ungkapan, khususnya ungkapan numerik, kita selalu menggunakan tanda kurung untuk mengelompokkan bagian mana yang harus dikerjakan lebih dahulu
Santosa, 1992. Sebagai contoh ungkapan numeris:
A + B C – D
suku A+B akan dikerjakan lebih dahulu, kemudian suku C–D, dan terakhir mengalikan hasil yang diperoleh dari dua suku ini. Sedangkan pada ungkapan :
A + B C – D
maka B C akan dikerjakan lebih dahulu, diikuti yang lain. Dalam hal ini pemakaian tanda kurung akan sangat mempengaruhi hasil akhir. Cara penulisan ungkapan sering
disebut dengan notasi infix, yang artinya adalah operator ditulis di antara dua operand.
Dalam ungkapan-ungkapan yang rumit, pemakaian tanda kurung ini tidak bisa dihindari. Semakin rumit suatu ungkapan semakin banyak dibutuhkan tanda kurung.
Hal ini membawa suatu konsekwensi bahwa penulisan tanda kurung itupun harus benar-benar terhindar dari kesalahan.
Seorang ahli matematika yang bernama Jan Lukasiewicz kemudian mengembangkan satu cara penulisan ungkapan numeris yang selanjutnya disebut
notasi polish atau notasi prefix, yang artinya adalah bahwa operator ditulis sebelum kedua operand yang akan disajikan. Berikut disajikan beberapa contoh notasi prefix
dari notasi infix notasi adalah simbol perpangkatan:
Universitas Sumatera Utara
Infix Prefix
A + B + A B
A + B – C - + A B C
A + B C – D + A B – C D
A – B C D E - A B C D E
Secara sederhana, proses konversi dari infix menjadi prefix dijelaskan sebagai berikut. Misalnya ungkapan yang akan dikonversikan adalah:
A + B C – D
Dengan menggunakan tanda kurung bantuan, ungkapan di atas diubah menjadi:
[+ A B] [ - C D]
Jika [- A B] dimisalkan P, dan [- C D] dimisalkan Q maka ungkapan di atas bisa ditulis sebagai:
P Q
Selanjutnya, notasi infix di atas diubah menjadi notasi prefix: P Q
Dengan mengembalikan P dan Q ke notasi pemisalan sebelumnya dan menghapus tanda kurung bantuan, maka diperoleh notasi prefix dari persamaan A+B
C–D, yaitu: + A B – C D.
Dari contoh di atas dapat diperhatikan bahwa dalam penulisan ungkapan, bahkan yang rumit sekalipun, tidak pernah menggunakan tanda kurung untuk
pengelompokan. Dalam hal ini urutan penulisan operator akan menentukan operasi mana yang harus dikerjakan terlebih dahulu.
Universitas Sumatera Utara
Notasi lain, yang merupakan kebalikan notasi prefix adalah notasi postfix atau notasi suffix atau lebih dikenal dengan notasi Polish terbalik Reverse Polish Notation
atau RPN. Sama halnya dengan notasi prefix, dalam notasi postfix tidak diperlukan adanya tanda kurung pengelompokan. Pada notasi postfix operator diletakkan paling
akhir. Sintaks notasi posfix adalah operand operand operator.
Proses konversi dari notasi infix ke notasi postfix juga sama dengan konversi dari infix ke prefix. Sebagai contoh ungkapan,
A + B C – D
dengan kurung bantuan kita peroleh, [A B +] [C D -]
kemudian dengan memisalkan [A B +] sebagai P, dan [C D -] sebagai Q, maka notasi postfix untuk ungkapan di atas menjadi,
PQ
substitusi nilai P dan Q maka diperoleh A B + C D -
Dalam hal inipun urutan penulisan operator juga menentukan operasi mana yang harus dikerjakan lebih dahulu. Pada halaman berikut disajikan beberapa contoh
lain hasil konversi notasi infix menjadi postfix
Infix Prefix
A + B – C A B + C -
A + B C – D A B + C D -
A – B C D E A B C D E -
Universitas Sumatera Utara
2.3.2 Pohon Tree