Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
STACK (TUMPUKAN)
2
Tujuan Mempelajari tipe data stack dan bagaimana menggunakan 4 fungsi dasar : push, pop, is_empty dan is_full. Mempelajari bagaimana mengimplementasikan stack dengan array. Penggunaan stack untuk beberapa aplikasi, seperti mengecek palindrome, mengecek kesesuaian tanda kurung dan mengevaluasi ekspresi matematika.
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
Struktur Data Algoritma yang efektif dan efisien memerlukan pengetahuan yang komprehensif tentang struktur data. Pemilihan struktur data yang sesuai merupakan kunci untuk mengembangkan algoritma yang baik.
5
Hirarki Struktur Data
6
Pengertian Tipe data Struktur data Tipe data abstrak
Sekumpulan obyek yang memiliki kriteria tertentu Struktur data Sekumpulan variabel dari tipe data yang sama atau berbeda Tipe data abstrak Struktur data dan operasi-operasinya
7
Penggunan Stack History pada web browser. Undo Log pada text editor.
Pemrosesan struktur bersarang (nested loop), rekursi, fungsi, dll. Algoritma back tracking – Artificial Intelegence
8
Operasi Dasar Stack Push : memasukkan sebuah item baru ke dalam stack.
Pop : mengeluarkan sebuah item dari stack. Operasi lain : Is_Empty, Is_Full, Show Note : pop dan push dilakukan melalui ujung yang sama (TOP)
9
Contoh 1. Inisialisasi : top=-1 3. Push ‘B’ : top=1
2. Push ‘A’ : top=0 3. Push ‘B’ : top=1 4. Push ‘C’ top=2 3 2 1 B A 3 2 1 A 3 2 1 B C A 3 2 1
10
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
11
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
12
Deklarasi Struktur Data Stack
#define maxsize 100 // mendefinisikan maks ukuran data // dlm stack typedef struct { int top; // indeks TOP char items [ maxsize ]; // array } stack; // nama tipe data baru yg dibuat // adalah stack
13
Deklarasi Fungsi-Fungsi Stack
void initialize ( stack *s) void pop ( stack *s, char *x ) void push ( stack *s, char x ) void show ( stack *s ) int Is_Empty(stack *s) int Is_Full(stack *s)
14
Fungsi Initialize void initialize ( stack *s)
// operasi initialize dg parameter // s bertipe pointer stack { s -> top = -1; // top = -1 stack dlm kondisi empty }
15
Fungsi Push void push ( stack *s, char x ) {
if (s->top == maxsize-1) // stack is full printf("\nERROR: the stack is full!"); else { s->top = s->top + 1; s->items [ s->top ] = x; printf("\nPUSH SUCCEED"); }
16
Fungsi Pop void pop ( stack *s, char *x ) {
if (s->top < 0) // stack is empty printf("\nERROR: the stack is empty!"); else { *x = (s->items [ s->top ]); s->top = s->top - 1; printf("\nPOP SUCCEED"); }
17
Fungsi Show void show( stack *s ) { printf("\nISI STACK :\n");
for(int i=s->top; i>=0; i--) printf("\t%c\n", s->items[i]); printf("\n"); }
18
Fungsi Is_Empty Int Is_Empty(stack *s) { if(s->top==-1) return(1);
else return(0); }
19
Fungsi Is_Full Int Is_Full(stack *s) { if(s->top==maxsize-1)
return(1); else return(0); }
20
Fungsi Main void main() { stack *my_stack, s; char item, *x;
x = &item; initialize(my_stack); push(my_stack, 'A'); push(my_stack, 'R'); push(my_stack, 'I'); push(my_stack, 'F'); show(my_stack); pop(my_stack, x); pop(my_stack, x); }
21
Output Program
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 angka 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 Waktu pengerjaan 1 jam
Lakukan tracing untuk permasalahan berikut : 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
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.