SlideShare a Scribd company logo
1 of 25
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
BAGIAN IIIBAGIAN III
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StackStack
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StackStack
•Sistem penyimpanan data dengan
mekanisme Last In First Out (LIFO).
•Satck merupakan tipe data abstrak
yang banyak digunakan dalam Compiler,
String processing dan berbagai algoritma
untuk graph.
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
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StackStack
Operasi 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.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StackStack
Implementasi Stack dengan Array
#define pj_max 7
typedef char elemen_type;
elemen_type Stack[pj_max];
int Top;
void create()
{
Top = 0;
}
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;
}
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;
}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StackStack
0
0
0
0
0
0
TOP[0]
[1]
[2]
[3]
[4]
[5]
[6]
Create( );
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);
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);
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
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.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StackStack
Masih ingat soal dibawah ini ?
Buat suatu program yang dapat memeriksa
apakah pasangan simbol kurung {} [] dan (),
sudah benar.
Contoh:
1. {[()][()]} benar
2. [{()]} salah
3. [{()()}] benar
4. {[())()]} salah
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StackStack
int 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;
}}
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
StackStack
EVALUASI INFIX
Mendapatkan nilai dari suatu ekspresi numerik
yang ditulis dalam notasi Infix.
Contoh:
a.a. 2 + 3,2 + 3, hasilnya adalah 5hasilnya adalah 5
b.b. 2 + 3 * 5,2 + 3 * 5, hasilnya adalah 17hasilnya adalah 17
c.c. (2 + 3) * 5,(2 + 3) * 5, hasilnya adalah 25hasilnya adalah 25
d.d. (2 + 3) * (15 – 10),(2 + 3) * (15 – 10), hasilnya adalah 25hasilnya adalah 25
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Notasi Infix, Postfix dan PrefixNotasi Infix, Postfix dan Prefix
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
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Notasi Infix, Postfix dan PrefixNotasi Infix, Postfix dan Prefix
Latihan:
Lakukan konversi dari notasi Infix dibawah ini
ke 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)
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Operand dan OperatorOperand dan Operator
A + B * C
Operator
O p e r a n d
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Konversi Infix ke PostfixKonversi Infix ke Postfix
Create Stack
Kosongkan string Postfix
Tambahkan simbol ‘)’ ke ujung string Infix
Push( ‘(’ )
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.
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.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
PrecedencePrecedence
Keterangan:
‘^’ = Tanda pangkat
Bila operator tidak terdefinisi, maka
nilainya False, contoh:
Prcd(’(’ , ’+’)= False.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Konversi Infix ke postfixKonversi Infix ke postfix
ContohContoh::
String Infix:String Infix: 6 + 2 * 2 + 72 / 86 + 2 * 2 + 72 / 8
String Infix:String Infix: (6 + 2) * (2 + 72 )/ 8(6 + 2) * (2 + 72 )/ 8
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.
Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah
Evaluasi InfixEvaluasi Infix
Tidak bisa langsung.Tidak bisa langsung.
Harus melalui:Harus melalui:
• Konversi Infix ke PostfixKonversi Infix ke Postfix
• Evaluasi PostfixEvaluasi Postfix
• SelesaiSelesai

More Related Content

What's hot

Algoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - AntrianAlgoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - AntrianKuliahKita
 
Algoritma dan Struktur Data - antrian
Algoritma dan Struktur Data - antrianAlgoritma dan Struktur Data - antrian
Algoritma dan Struktur Data - antrianGeorgius Rinaldo
 
Algoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - tumpukanAlgoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - tumpukanGeorgius Rinaldo
 
Materi kuliah 10 stack
Materi kuliah 10   stackMateri kuliah 10   stack
Materi kuliah 10 stackBudi Yono
 
Materi kuliah 10 stack
Materi kuliah 10   stackMateri kuliah 10   stack
Materi kuliah 10 stackBudi Yono
 
Slide minggu 2 pertemuan 2 (struktur data1)
Slide minggu 2 pertemuan 2 (struktur data1)Slide minggu 2 pertemuan 2 (struktur data1)
Slide minggu 2 pertemuan 2 (struktur data1)Setia Juli Irzal Ismail
 
Tugas3
Tugas3Tugas3
Tugas3Av Ri
 
Integral tentu volume benda putar
Integral tentu volume benda putarIntegral tentu volume benda putar
Integral tentu volume benda putarNuurwashilaah -
 
Bab 5 queue_antrian_
Bab 5 queue_antrian_Bab 5 queue_antrian_
Bab 5 queue_antrian_arii_manroe
 
Dts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlinDts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlinAhmad Arif Faizin
 
Dts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlinDts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlinAhmad Arif Faizin
 

What's hot (20)

Turunan fungsi (1)
Turunan fungsi (1)Turunan fungsi (1)
Turunan fungsi (1)
 
Algoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - AntrianAlgoritma dan Struktur Data - Antrian
Algoritma dan Struktur Data - Antrian
 
Algoritma dan Struktur Data - antrian
Algoritma dan Struktur Data - antrianAlgoritma dan Struktur Data - antrian
Algoritma dan Struktur Data - antrian
 
Algoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - tumpukanAlgoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - tumpukan
 
207 p06
207 p06207 p06
207 p06
 
Materi kuliah 10 stack
Materi kuliah 10   stackMateri kuliah 10   stack
Materi kuliah 10 stack
 
Materi kuliah 10 stack
Materi kuliah 10   stackMateri kuliah 10   stack
Materi kuliah 10 stack
 
Matlab Tutorial Chapter 3
Matlab Tutorial Chapter 3Matlab Tutorial Chapter 3
Matlab Tutorial Chapter 3
 
Queue antrian
Queue antrian Queue antrian
Queue antrian
 
Matplotlib
Matplotlib Matplotlib
Matplotlib
 
Modul java animasi
Modul java animasiModul java animasi
Modul java animasi
 
Slide minggu 2 pertemuan 2 (struktur data1)
Slide minggu 2 pertemuan 2 (struktur data1)Slide minggu 2 pertemuan 2 (struktur data1)
Slide minggu 2 pertemuan 2 (struktur data1)
 
Tugas3
Tugas3Tugas3
Tugas3
 
Algoritma rsa
Algoritma rsaAlgoritma rsa
Algoritma rsa
 
Integral tentu volume benda putar
Integral tentu volume benda putarIntegral tentu volume benda putar
Integral tentu volume benda putar
 
Bab 5 queue_antrian_
Bab 5 queue_antrian_Bab 5 queue_antrian_
Bab 5 queue_antrian_
 
Papercoding Final
Papercoding FinalPapercoding Final
Papercoding Final
 
Rumus VB-3
Rumus VB-3Rumus VB-3
Rumus VB-3
 
Dts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlinDts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlin
 
Dts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlinDts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlin
 

Similar to Struktur data 03 (stack)

Struktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listStruktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listSunarya Marwah
 
Struktur data 02 (tipe data abstrak dan queue)
Struktur data 02 (tipe data abstrak dan queue)Struktur data 02 (tipe data abstrak dan queue)
Struktur data 02 (tipe data abstrak dan queue)Sunarya Marwah
 
Jeni Intro2 Bab04 Tour Dari Package Java.Lang
Jeni Intro2 Bab04 Tour Dari Package Java.LangJeni Intro2 Bab04 Tour Dari Package Java.Lang
Jeni Intro2 Bab04 Tour Dari Package Java.LangIndividual Consultants
 
Aray dan recrd
Aray dan recrdAray dan recrd
Aray dan recrd555560
 
Laporan 1 penngantar program r
Laporan 1 penngantar program rLaporan 1 penngantar program r
Laporan 1 penngantar program rKhair Norrasid
 
Modul xiii dan xiv algo
Modul xiii dan xiv algoModul xiii dan xiv algo
Modul xiii dan xiv algoSTMIK AKAKOM
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPrasetyo Adi
 
Pelatihan Bahasa R
Pelatihan Bahasa RPelatihan Bahasa R
Pelatihan Bahasa Ranom0164
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 10
Laporan praktikum Algoritma dan Pemrograman pertemuan 10Laporan praktikum Algoritma dan Pemrograman pertemuan 10
Laporan praktikum Algoritma dan Pemrograman pertemuan 10Ekha Cahya Nugraha
 
6_String.pdf
6_String.pdf6_String.pdf
6_String.pdfJurnal IT
 
6_String.pdf
6_String.pdf6_String.pdf
6_String.pdfJurnal IT
 
Tugas1
Tugas1Tugas1
Tugas1Av Ri
 
[PUBLIC] quiz-01-midterm-solutions.pdf
[PUBLIC] quiz-01-midterm-solutions.pdf[PUBLIC] quiz-01-midterm-solutions.pdf
[PUBLIC] quiz-01-midterm-solutions.pdfFariz Darari
 

Similar to Struktur data 03 (stack) (20)

Struktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listStruktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked list
 
Struktur data 02 (tipe data abstrak dan queue)
Struktur data 02 (tipe data abstrak dan queue)Struktur data 02 (tipe data abstrak dan queue)
Struktur data 02 (tipe data abstrak dan queue)
 
Galeri PythonTeX
Galeri PythonTeXGaleri PythonTeX
Galeri PythonTeX
 
Jeni Intro2 Bab04 Tour Dari Package Java.Lang
Jeni Intro2 Bab04 Tour Dari Package Java.LangJeni Intro2 Bab04 Tour Dari Package Java.Lang
Jeni Intro2 Bab04 Tour Dari Package Java.Lang
 
Aray dan recrd
Aray dan recrdAray dan recrd
Aray dan recrd
 
Laporan 1 penngantar program r
Laporan 1 penngantar program rLaporan 1 penngantar program r
Laporan 1 penngantar program r
 
Laporan praktikum jawaban 10 algoritma(1)
Laporan praktikum jawaban 10 algoritma(1)Laporan praktikum jawaban 10 algoritma(1)
Laporan praktikum jawaban 10 algoritma(1)
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
Modul xiii dan xiv algo
Modul xiii dan xiv algoModul xiii dan xiv algo
Modul xiii dan xiv algo
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
 
Pelatihan Bahasa R
Pelatihan Bahasa RPelatihan Bahasa R
Pelatihan Bahasa R
 
Pert.6 stack
Pert.6 stackPert.6 stack
Pert.6 stack
 
CPP Pendalaman String
CPP Pendalaman StringCPP Pendalaman String
CPP Pendalaman String
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 10
Laporan praktikum Algoritma dan Pemrograman pertemuan 10Laporan praktikum Algoritma dan Pemrograman pertemuan 10
Laporan praktikum Algoritma dan Pemrograman pertemuan 10
 
6_String.pdf
6_String.pdf6_String.pdf
6_String.pdf
 
6_String.pdf
6_String.pdf6_String.pdf
6_String.pdf
 
Tugas1
Tugas1Tugas1
Tugas1
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
[PUBLIC] quiz-01-midterm-solutions.pdf
[PUBLIC] quiz-01-midterm-solutions.pdf[PUBLIC] quiz-01-midterm-solutions.pdf
[PUBLIC] quiz-01-midterm-solutions.pdf
 
Resume praktikum 6 stack
Resume praktikum 6 stackResume praktikum 6 stack
Resume praktikum 6 stack
 

More from Sunarya Marwah

Struktur data 10 (min max heap)
Struktur data 10 (min max heap)Struktur data 10 (min max heap)
Struktur data 10 (min max heap)Sunarya Marwah
 
Struktur data 09 (double ended heap)
Struktur data 09 (double ended heap)Struktur data 09 (double ended heap)
Struktur data 09 (double ended heap)Sunarya Marwah
 
Struktur data 08 (heap)
Struktur data 08 (heap)Struktur data 08 (heap)
Struktur data 08 (heap)Sunarya Marwah
 
Struktur data 07 (b tree)
Struktur data 07 (b tree)Struktur data 07 (b tree)
Struktur data 07 (b tree)Sunarya Marwah
 
Struktur data 06 (red black tree)
Struktur data 06 (red black tree)Struktur data 06 (red black tree)
Struktur data 06 (red black tree)Sunarya Marwah
 
Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)Sunarya Marwah
 
Struktur data 04 (binary tree)
Struktur data 04 (binary tree)Struktur data 04 (binary tree)
Struktur data 04 (binary tree)Sunarya Marwah
 

More from Sunarya Marwah (8)

Struktur data 10 (min max heap)
Struktur data 10 (min max heap)Struktur data 10 (min max heap)
Struktur data 10 (min max heap)
 
Struktur data 09 (double ended heap)
Struktur data 09 (double ended heap)Struktur data 09 (double ended heap)
Struktur data 09 (double ended heap)
 
Struktur data 08 (heap)
Struktur data 08 (heap)Struktur data 08 (heap)
Struktur data 08 (heap)
 
Struktur data 07 (b tree)
Struktur data 07 (b tree)Struktur data 07 (b tree)
Struktur data 07 (b tree)
 
Struktur data 06 (red black tree)
Struktur data 06 (red black tree)Struktur data 06 (red black tree)
Struktur data 06 (red black tree)
 
Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)
 
Struktur data 04 (binary tree)
Struktur data 04 (binary tree)Struktur data 04 (binary tree)
Struktur data 04 (binary tree)
 
Struktur dataquadtree
Struktur dataquadtreeStruktur dataquadtree
Struktur dataquadtree
 

Struktur data 03 (stack)

  • 1. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah BAGIAN IIIBAGIAN III
  • 2. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StackStack
  • 3. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StackStack •Sistem penyimpanan data dengan mekanisme Last In First Out (LIFO). •Satck merupakan tipe data abstrak yang banyak digunakan dalam Compiler, String processing dan berbagai algoritma untuk graph.
  • 4. 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
  • 5. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StackStack Operasi 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.
  • 6. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StackStack Implementasi Stack dengan Array #define pj_max 7 typedef char elemen_type; elemen_type Stack[pj_max]; int Top; void create() { Top = 0; }
  • 7. 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; }
  • 8. 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; }
  • 9. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StackStack 0 0 0 0 0 0 TOP[0] [1] [2] [3] [4] [5] [6] Create( );
  • 10. 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);
  • 11. 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);
  • 12. 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
  • 13. 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.
  • 14. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StackStack Masih ingat soal dibawah ini ? Buat suatu program yang dapat memeriksa apakah pasangan simbol kurung {} [] dan (), sudah benar. Contoh: 1. {[()][()]} benar 2. [{()]} salah 3. [{()()}] benar 4. {[())()]} salah
  • 15. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StackStack int 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; }}
  • 16. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah StackStack EVALUASI INFIX Mendapatkan nilai dari suatu ekspresi numerik yang ditulis dalam notasi Infix. Contoh: a.a. 2 + 3,2 + 3, hasilnya adalah 5hasilnya adalah 5 b.b. 2 + 3 * 5,2 + 3 * 5, hasilnya adalah 17hasilnya adalah 17 c.c. (2 + 3) * 5,(2 + 3) * 5, hasilnya adalah 25hasilnya adalah 25 d.d. (2 + 3) * (15 – 10),(2 + 3) * (15 – 10), hasilnya adalah 25hasilnya adalah 25
  • 17. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Notasi Infix, Postfix dan PrefixNotasi Infix, Postfix dan Prefix 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
  • 18. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Notasi Infix, Postfix dan PrefixNotasi Infix, Postfix dan Prefix Latihan: Lakukan konversi dari notasi Infix dibawah ini ke 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)
  • 19. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Operand dan OperatorOperand dan Operator A + B * C Operator O p e r a n d
  • 20. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Konversi Infix ke PostfixKonversi Infix ke Postfix Create Stack Kosongkan string Postfix Tambahkan simbol ‘)’ ke ujung string Infix Push( ‘(’ ) 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.
  • 21. 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.
  • 22. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah PrecedencePrecedence Keterangan: ‘^’ = Tanda pangkat Bila operator tidak terdefinisi, maka nilainya False, contoh: Prcd(’(’ , ’+’)= False.
  • 23. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Konversi Infix ke postfixKonversi Infix ke postfix ContohContoh:: String Infix:String Infix: 6 + 2 * 2 + 72 / 86 + 2 * 2 + 72 / 8 String Infix:String Infix: (6 + 2) * (2 + 72 )/ 8(6 + 2) * (2 + 72 )/ 8
  • 24. 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.
  • 25. Copyright Sunarya D. MarwahCopyright Sunarya D. Marwah Evaluasi InfixEvaluasi Infix Tidak bisa langsung.Tidak bisa langsung. Harus melalui:Harus melalui: • Konversi Infix ke PostfixKonversi Infix ke Postfix • Evaluasi PostfixEvaluasi Postfix • SelesaiSelesai