Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Struktur Data Stack.

Presentasi serupa


Presentasi berjudul: "Struktur Data Stack."— Transcript presentasi:

1 Struktur Data Stack

2 Stack Definisi Stack Operasi-operasi dasar Stack
Push Pop Contoh program operasi dasar Stack menggunakan array dan linked list

3 STACK (TUMPUKAN) Kumpulan items yang teratur dimana items baru akan dimasukkan ke dan sebuah items akan dikeluarkan dari satu ujung yang sama, yaitu dari TOP sebuah stack. Struktur data linier dimana hanya bagian TOP-nya saja yang bisa diakses. Bersifat LIFO = Last In First Out. Bisa diimplementasikan menggunakan array atau Linked List.

4 Last In First Out

5 Penggunan Stack History pada web browser. Undo Log pada text editor.
Pemrosesan struktur bersarang (nested) : loop, rekursi, fungsi, dll. Algoritma back tracking – Artificial Intelegence

6 Operasi Dasar Stack Push : memasukkan sebuah item baru ke dalam stack.
Pop : mengeluarkan sebuah item dari stack. Operasi lain : Is_Empty, Is_Full, Top Note : pop dan push dilakukan melalui ujung yang sama (TOP)

7 Contoh 3. Push ‘B’ : top=1 4. Push ‘C’ top=2 Inisialisasi : top=-1
2. Push ‘A’ : top=0 3 2 1 B A 3 2 1 A 3 2 1 B C A 3 2 1

8 Contoh 5. Pop : top=1 Push ‘E’ top=1 6. Pop : top=0 B A 3 2 1 E A 3 2
E A 3 2 1 A 3 2 1

9 Visualisasi Operasi Stack
X A E B TOP remove: “POP” insert ‘B’: PUSH ‘B’ D K P O T R W Y a b c d e f g h i j

10 Stack dengan Array TOP adalah indeks terakhir
1 2 Data A B C Push ‘D’ Indeks 1 2 3 Data A B C D Pop Indeks 1 2 3 Data A B C D

11 Buat atribut dan initialize
class StackArray attr_accessor :maxsize, :top, :items @items=Array.new end

12 Method isEmpty def Is_Empty return TRUE else return FALSE end

13 Method isFull def Is_Full if return TRUE else return FALSE end

14 Method pop def pop < 0 # stack is empty printf("\nERROR: the stack is empty!"); else - 1; printf("\nPOP SUCCEED"); end

15 Method push def push (data ) # stack is full printf("\nERROR: the stack is full!"); + 1; = data; printf("\nPUSH SUCCEED"); end

16 Method show def show printf("\nISI STACK :\n"); while i>=0 i=i-1 end

17 Contoh akses baru=StackArray.new baru.push("A") baru.push("B") baru.push("C") baru.show baru.pop baru.push("D") baru.push("E")

18 Stack dengan Linked List
Jika sebuah linked list SELALU menambahkan node baru dan menghapus node lama dari salah SATU ujungnya saja (posisi Head ataukah Tail)  STACK. HOW?

19 Push Operation Identik dengan operasi prepend

20 Pop Operation Identik dengan operasi delfirst

21 TUGAS 4 NPM ganjil  HEAD NPM genap  TAIL

22 Pengecekan Tanda Kurung
Aplikasi 1 : Pengecekan Tanda Kurung

23 Algoritma valid = true s = the_empty_stack
while ( we_have_not_read_the_entire_string ) { read the next symbol (symb) of the string if ( symb == ‘(‘ || symb == ‘[‘ || symb == ‘{‘ ) push ( s, symb ) if ( symb == ‘)‘ || symb == ‘]‘ || symb == ‘}‘ ) if ( empty ( s ) ) valid = false else { k = pop ( s ) if ( k is_not_the_matching_opener_of_symb ) valid = false } // end else } // end while if ( ! empty ( s ) ) valid = false if ( valid ) output ( “the string is valid” ) else output ( “the string is not valid” )

24 Contoh Cek apakah string di bawah ini valid! (a+b)} (h-(j-(k-[l-n]))
{x+(y-[a+b])*c-[(d+e)]}

25 Konversi Infix ke Postfix
Aplikasi 2 : Konversi Infix ke Postfix

26 Ekspresi Aritmatika Ekspresi aritmatika umumnya ditulis dalam bentuk infix. Contoh : A+B A-C+B A+((B*C)/D) Komputer lebih mudah mengevaluasi ekspresi postfix, karena tidak perlu mengelompokkan subekspresi kedalam tanda kurung.

27 Infix, Postfix, dan Prefix
A*B AB* *AB A*(B+C) ABC+* *A+BC (A*B)+C AB*C+ +*ABC A+((B*C)/D) ABC*D/+ +A/*BCD (A^2+B^2)*(C-D) A2^B2^+CD-* *+^A2^B2-CD

28 Algoritma s = stack kosong while (seluruh infix belum dibaca)
String infix, postfix s = stack kosong while (seluruh infix belum dibaca) { baca simbol selanjutnya pada infix (symb) if symb adalah operand tambahkan pada postfix else if symb adalah ‘(‘, ‘{‘, ‘[‘ PUSH symb else if symb adalah ‘)‘, ‘}‘, ‘]‘ while(TopOp stack adalah operator) POP stack dan tambahkan ke postfix POP stack else if symb adalah operator{ if stack kosong PUSH symb ke stack else{ TopOp =baca data di TOP stack if(symb>TopOp) else if TopOp adalah ‘(‘, ‘{‘, ‘[‘ else { POP stack dan tambahkan pada postfix } if stack tidak kosong

29 Aplikasi 3 : EVALUASI POSTFIX

30 Algoritma s = stack kosong while(seluruh string belum dibaca)
{ baca simbol selanjutnya (symb) if symb adalah operand PUSH symb if symb adalah operator OpKanan = POP stack OpKiri = POP stack hitung hasil PUSH hasil } POP stack untuk memperoleh hasil akhir

31 Contoh Evaluasi postfix a. 4 9 5 + * b. 4 9 * 5 + c. 4 9 5 * 7 / +
d. 4 2 ^ 9 2 ^ *

32 Tugas Buat program untuk: Pengecekan tanda kurung
{a^2 - [ (b+c)^2 - (d+e)^2 ]} {a - [(b+c))) - (d+e)]} Konversi infix ke postfix {f*2 - [ (g+h)^2 - (i+j)^2 ]} p + (q*r/3) * (s + t) Evaluasi postfix 12^23+2^45+2^-- abc*3/cb+*+, jika a=1, b=2 dan c=3


Download ppt "Struktur Data Stack."

Presentasi serupa


Iklan oleh Google