materi 5 stack

31
STRUKTUR DATA Stack

Upload: ganti-nama

Post on 17-Nov-2015

45 views

Category:

Documents


2 download

DESCRIPTION

bsdasbb

TRANSCRIPT

  • STRUKTUR DATA Stack

    *

  • StackStack atau tumpukan adalah kumpulan elemen yang hanya dapat ditambah dan atau dihapus dari satu ujung (gerbang) yang samaDalam arti bahwa seolah-olah ada satu elemen yang diletakkan diatas elemen yang lainStack mempunyai sifat LIFO (Last In First Out) dimana elemen yang terakhir masuk akan pertama kali keluarRepresentasi stack dapat dilakukan dengan menggunakan Array atau Linked List

  • Stack Suatu susunan koleksi data dimana data dapat ditambahkan dan dihapus selalu dilakukan pada bagian akhir data, yang disebut dengan top of stackStack bersifat LIFO (Last In First Out)Data yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack

  • Operasi StackPush : digunakan untuk menambah item pada stack pada tumpukan paling atasPop :digunakan untuk mengambil item pada stack pada tumpukan paling atasClear : digunakan untuk mengosongkan stackIsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosongIsFull: fungsi yang digunakan untuk mengecek apakah stack sudah penuhPUSHPOP

  • stackStack dapat dibuat dengan menggunakan array atau linked listRepresentasi stack dengan menggunakan array dapat dilakukan dengan asumsi bahwa elemen maksimal suatu stack tidak boleh melebihi maksimum banyak elemen atau ukuran arrayUntuk itu, maka diperlukan adanya suatu penunjuk atau suatu nama yang mencatat posisi puncak elemen stack tersebut

  • Deklarasi stackBentuk deklarasi dari Stack ada 2 (dua) yaituDeklarasi ke- I :

    #define MaxS nTypeData Isi[MaxS];TypeData Top;Deklarasi II ke- 2 :

    #define MaxS nStruct Stack{TypeData Isi[MaxS];TypeData Top;};

  • Operasi Pada stackAda dua operasi dasar yang dapat dilakukan terhadap sebuah stack, yaitu Operasi Insert atau penyisipan elemen (Push)Operasi Delete atau penghapusan elemen (Pop)

  • Inisialisasi Pada stackSebelum stack dapat dioperasikan, maka terlebih dahulu diinisialisasikan dengan memberi harga S.Top = 0Bentuk inisialisasi :

    Void Inits (Stack &S){ S.Top = 0;}

  • Program Stack Inisialisasi StackPada mulanya isi top dengan -1, karena array dalam bahasa C dimulai dari 0, yang berarti bahwa data stack adalah KOSONG!Top adalah suatu variabel penanda dalam Stack yang menunjukkan elemen teratas data Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK yang menyebabkan stack PENUH!

  • Operasi pushOperasi Push adalah operasi memasukkan elemen kedalam stackJika stack direpresentasikan dengan menggunakan array, maka elemen array yang dimasukkan tidak boleh melebihi ukuran stackMaka dengan demikian harus ada nama sebagai penunjuk ke posisi elemen Puncak (Top) dari stack dan penunjuk isi maksimum dari stack (Max)Operasi Push dapat dilakukan jika stack belum mencapai Max

  • Fungsi pushFungsi Push untuk memasukkan elemen kedalam Stack yaitu

    Void Push (Stack &S, char Data){if (S.Top < MaxS){S.Top++;S.Isi[S.Top] = Data;}else cout

  • Operasi Push

  • Program Stack Fungsi IsFullAdalah operasi yang akan digunakan untuk mengecek apakah stack penih atau tidakDengan cara memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum fullSuatu Stack dikatakan penuh, jika S.Top bernilai MaxS[S.Top=MaxS).Jika S.Top = MaxS, maka fungsi akan mengembalikan nilai True, jika tidak maka fungsi akan mengembalikan nilai False

  • Program Stack Ilustrasi Stack pada kondisi Full

  • Program Stack Fungsi IsEmptyUntuk memeriksa apakah data Stack masih kosong?Dengan cara memeriksa top of stack, jika masih -1 maka berarti data Stack masih kosong!

  • Program Stack Fungsi PopOperasi Pop adalah operasi yang dilakukan terhadap Stack dengan menghapus elemen yang berada paling puncak dari StackSetiap kali operasi Pop dilakukan, maka petunjuk Top akan berkurang satuTampilkan terlebih dahulu nilai elemen teratas stack dengan mengakses indeksnya sesuai dengan top of stacknya, baru dilakukan decrement dari nilai top of stacknya sehingga jumlah elemen stack berkurang.Operasi Pop dapat dilakukan jika Stack tidak kosong

  • Program Stack

  • Fungsi popFungsi Pop untuk menghapus elemen dari Stack adalah sebagai berikut :

    Void Pop (Stack &S, Char &Hsl){if (S.Top ! = 0){Hsl = S.Isi[S.Top];S.Top--;}elsecout

  • Program StackFungsi PrintUntuk menampilkan semua elemen-elemen data StackDengan cara me-loop semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang lebih kecil!

  • Program Stack

  • Mencetak StackIsi suatu stack dapat dicetak dengan menggunakan fungsi berikut :

    Void Cetak (Stack S){int I;cout

  • Fungsi PeekDigunakan untuk melihat top of stack

  • Karakteristik stackKarakteristik dari suatu Stack adalah :Elemen Stack yaitu item-item data yang terdapat dalam stackTop menunjukkan posisi puncak pada stackMax menunjukkan banyaknya maksimum item data dari stackStack kosong tidak mungkin dilakukan Pop, karena akan menyebabkan underflowStack Penuh tidak mungkin dilakukan Push, karena akan menyebabkan Overflow

  • Studi Kasus StackPembuatan Kalkulator SCIENTIFICMisalkan operasi: 3 + 2 * 5Operasi di atas disebut notasi infiks, notasi infiks tersebut harus diubah lebih dahulu menjadi notasi postfix3 + 2 * 5 notasi postfiksnya adalah 3 2 5 * +

  • Studi Kasus Stack Infix to Postfix

    Baca soal dari depan ke belakangJika berupa operand, maka masukkan ke posftixJika berupa operator, maka:Jika stack masih kosong, push ke stackJika derajat operator soal > derajat operator top of stackPush operator soal ke stackSelama derajat operator soal

  • Studi Kasus Stack

  • Contoh laina+b*c-dStack (kosong) dan Postfik (kosong)Scan aPostfik: aScan +Stack: +Scan bPostfik: abScan *, karena ToS (+) < *, maka add ke StackStack: +*

  • ContohScan cPostfik: abcScan , karena * > -, maka pop Stack, dan add ke PostfikStack: +Postfik: abc*Karena + >= -, maka pop Stack, dan add ke Postfik, karena Stack kosong, maka push ke stackStack: -Postfik: abc*+Scan dPostfik: abc*+dKarena sudah habis, push ToS stack ke PosfixPostfix: abc*+d-

  • Postfix EvaluatorScan Postfix string dari kiri kekanan. Siapkan sebuah stack kosong. Jika soal adalah operand, tambahkan ke stack. Jika operator, maka pasti akan ada minimal 2 operand pada stackPop dua kali stack, pop pertama disimpan dalam y, dan pop kedua ke dalam x. Lalu evaluasi x y. Simpan hasilnya dan push ke dalam stack lagi.Ulangi hingga seluruh soal discan. Jika sudah semua, elemen terakhir pada stack adalah hasilnya. Jika lebih dari satu elemen, berarti error!

  • Contoh 325*+ (3+2*5)

  • Terima Kasih

    *