Tumpukan Stack Struktur Data

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 BA 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