Struktur data 03 (stack)

25
Copyright Sunarya D. Mar Copyright Sunarya D. Mar wah wah BAGIAN BAGIAN III III

Transcript of Struktur data 03 (stack)

Page 1: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

BAGIAN IIIBAGIAN III

Page 2: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

Page 3: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

•Sistem penyimpanan data denganmekanisme Last In First Out (LIFO). •Satck merupakan tipe data abstrakyang banyak digunakan dalam Compiler, String processing dan berbagai algoritma untuk graph.

Page 4: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

TOP

D merupakan elemen yang terakhir masuk

dan akan menjadi elemen yang pertama

keluar

A

B

C

D

PUSH PULL

Page 5: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStackOperasi dalam Stack

1. Create( ) Menciptakan Stack baru dalam keadaan kosong.2. Push(e) Memasukkan data baru dari variabel e kedalam

Stack.3. Pull(*e) Mengambil data dari Stack untuk disimpan di

variabel e.4. Empty( ) Memeriksa apakah Stack dalam keadaan kosong.5. Full( ) Memeriksa apakah Stack dalam keadaan penuh.6. Clear( ) Menghapus semua data yang ada dalam Stack.

Page 6: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

Implementasi Stack dengan Array

#define pj_max 7typedef char elemen_type;elemen_type Stack[pj_max];int Top;

void create(){ Top = 0; }

Page 7: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

int full(){ if (Top == pj_max-1) return 1; else return 0;}

int empty(){ if (Top == 0) return 1; else return 0;}

Page 8: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

void Push(elemen_type e){ if (!full){Top++; Stack[Top] = e;};}

void Pull(elemen_type *e){ if (!empty){*e = Stack[Top]; Top--;};}

void clear(){ Top = 0;}

Page 9: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

0

0

0

0

0

0

TOP[0]

[1]

[2]

[3]

[4]

[5]

[6]

Create( );

Page 10: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

0

0

0

90

70

30

TOP

0

0

0

90

70

30

TOP

0

0

35

90

70

30

TOP

[0]

[1]

[2]

[3]

[4]

[5]

[6]

[0]

[1]

[2]

[3]

[4]

[5]

[6]

[0]

[1]

[2]

[3]

[4]

[5]

[6]

Sebelum Push TOP++ Stack[TOP] = e

Proses Push(35);

Page 11: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

0

0

35

90

70

30

TOP

0

0

35

90

70

30

TOP

0

0

35

90

70

30

TOP

[0]

[1]

[2]

[3]

[4]

[5]

[6]

[0]

[1]

[2]

[3]

[4]

[5]

[6]

[0]

[1]

[2]

[3]

[4]

[5]

[6]

Sebelum Pull *e = Stack[TOP] TOP--

Proses Pull(*e);

Page 12: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

Implementasi Stack dengan Linked list

• Operasi Push() menggunakan Insert Depan

• Operasi Pull() menggunakan Delete dibagian Head

• Pointer Head berfungsi sebagai TOP

Page 13: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStack

Dibandingkan dengan implementasi Stack dengan array, implementasi Stack dengan linked list mempunyai:

Keuntungan:

1. Kapasitas Stack hanya dibatasi oleh kapasitas memori komputer.2. Penggunaan memori tergantung dari banyaknya data.

Kerugian:

1. Operasi Clear memerlukan lebih banyak langkah.

Page 14: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStackMasih ingat soal dibawah ini ?

Buat suatu program yang dapat memeriksa

apakah pasangan simbol kurung {} [] dan (),

sudah benar. Contoh:

1. {[()][()]} benar2. [{()]} salah3. [{()()}] benar4. {[())()]} salah

Page 15: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStackint Setangkup(char StrKurung[])int Setangkup(char StrKurung[]){{ int L,I,S; char X;int L,I,S; char X; L = strlen(StrKurung); I=0; S=true;L = strlen(StrKurung); I=0; S=true; CreateStack();CreateStack(); dodo {{ switch (StrKurung[I])switch (StrKurung[I]) {{ case '(' : Push(StrKurung[I]); break;case '(' : Push(StrKurung[I]); break; case '[' : Push(StrKurung[I]); break;case '[' : Push(StrKurung[I]); break; case '{' : Push(StrKurung[I]); break;case '{' : Push(StrKurung[I]); break; case ')' : Pop(&X); if (X != '(') S = false; break;case ')' : Pop(&X); if (X != '(') S = false; break; case ']' : Pop(&X); if (X != '[') S = false; break;case ']' : Pop(&X); if (X != '[') S = false; break; case '}' : Pop(&X); if (X != '{') S = false; break;case '}' : Pop(&X); if (X != '{') S = false; break; }} I++;I++; } while (S && I<L);} while (S && I<L); if (!EmptyStack()) S=false;if (!EmptyStack()) S=false; return S;return S;}}

Page 16: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

StackStackEVALUASI INFIX

Mendapatkan nilai dari suatu ekspresi numerik

yang ditulis dalam notasi Infix.

Contoh:

a.a. 2 + 3, 2 + 3, hasilnya adalah hasilnya adalah 55

b.b. 2 + 3 * 5,2 + 3 * 5, hasilnya adalah hasilnya adalah 1717

c.c. (2 + 3) * 5, (2 + 3) * 5, hasilnya adalah 25hasilnya adalah 25d.d. (2 + 3) * (15 – 10),(2 + 3) * (15 – 10), hasilnya adalah hasilnya adalah

2525

Page 17: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Notasi Infix, Postfix dan Notasi Infix, Postfix dan PrefixPrefix

Notasi InfixNotasi Infix Notasi PostfixNotasi Postfix Notasi PrefixNotasi Prefix

A + BA + B A B +A B + + A B+ A B

A + B * CA + B * C A B C * +A B C * + + A * B C+ A * B C

(A+B)*(C-D)(A+B)*(C-D) AB+CD-*AB+CD-* *+AB-CD*+AB-CD

(A + B) * C(A + B) * C A B + C *A B + C * * + A B C* + A B C

Page 18: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Notasi Infix, Postfix dan Notasi Infix, Postfix dan PrefixPrefix

Latihan:

Lakukan konversi dari notasi Infix dibawah inike notasi Prefix dan notasi Postfix.

1. A + B x C + D / E

2. A * (R + (C – D)) * (E – F) + T

3. (B * B – 4 * A * C) / (2 * A)

Page 19: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Operand dan OperatorOperand dan Operator

A + B * C

Operator

O p e r a n d

Page 20: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Konversi Infix ke PostfixKonversi Infix ke PostfixCreate StackKosongkan string PostfixTambahkan simbol ‘)’ ke ujung string InfixPush( ‘(’ )While (Not Empty Stack){ Baca simbol dari string Infix Switch (simbol) { case operand: Tambahkan simbol ke ujung string Postfix case operator: While (prcd(Stack[Top], simbol) == true) { Pop(X) Tambahkan X ke ujung string Postfix } Push(simbol) case ‘(‘ : Push(simbol) case ‘)’ : While (Stack[Top] != ‘(‘ ) { Pop(X) Tambahkan X ke ujung string Postfix } Pop(X) // Buang simbol ‘(‘ } // akhir dari Switch } // akhir dari While Selesai.

Page 21: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

PrecedencePrecedence

Operator Nilai

Prcd(’^’ , ’x’) True

Prcd(’x’ , ’+’) True

Prcd(’x’ , ’x’) True

Prcd(’+’ , ’+’) True

Prcd(’+’ , ’-’) True

Prcd(’-’ , ’-’) True

Prcd(’x’ , ’^’) False

Prcd(’+’ , ’x’) False

Prcd(’-’ , ’+’) False

Prcd(’-’ , ’x’) False

dst.

Page 22: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

PrecedencePrecedence

Keterangan:

‘^’ = Tanda pangkat

Bila operator tidak terdefinisi, maka nilainya False, contoh:

Prcd(’(’ , ’+’)= False.

Page 23: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Konversi Infix ke postfixKonversi Infix ke postfix

ContohContoh::

String Infix:String Infix: 6 + 2 * 2 + 72 / 8 6 + 2 * 2 + 72 / 8

String Infix:String Infix: (6 + 2) * (2 + 72 )/ (6 + 2) * (2 + 72 )/ 88

Page 24: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Evaluasi PostfixEvaluasi Postfix

1. Scan string Postfix dari kiri ke kanan.2. Bila ketemu operand, Push(operand).3. Bila ketemu operator,

3.1. Pop dua kali yaitu Pop(X) dan Pop(Y).3.2. Z = Y operator X.3.3. Push(Z).

4. Ulangi 2 s/d 3.3 hingga seluruh simbol didalam string terbaca.

Page 25: Struktur data 03 (stack)

Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah

Evaluasi InfixEvaluasi Infix

Tidak bisa langsung.Tidak bisa langsung.

Harus melalui:Harus melalui:

• Konversi Infix ke Konversi Infix ke

PostfixPostfix

• Evaluasi PostfixEvaluasi Postfix

• SelesaiSelesai