X - Google Drive

Download Report

Transcript X - Google Drive

1
2
3
4
5
6.3 & 7.3
NESTED LOOP
6
7
delete
insert
A
stack
is
an
ordered
collection of items into which
new items may be inserted and
from which items may be
deleted at one end, called the
top of the stack.
7
6
5
4
3
2
( Yedidyah L, Moshe J. A., and Aaron M.
Tenenbaum;
Data Structures Using C and C++)
1
8
1. Single Stack.
Stack Tunggal, satu stack dalam satu collection
1.1 Ilustrasi Single Stack.
Nomor
Urut
Masuk
(PUSH)
Nomor Urut
Keluar
(POP)
Top
4
Buku-4
1
3
Buku-3
2
2
Buku-2
3
1
Buku-1
4
Meja
9
Dalam struktur STACK, digunakan istilah :
- PUSH untuk : Simpan, atau Masuk, atau
Insert, atau Tulis.
- POP
untuk : Ambil, atau Keluar, atau
Delete, atau Baca, atau Hapus
Prinsip atau Konsep prosesnya disebut :
L I F O ( Last In First Out )
10
1.2 Representasi Single Stack menggunakan
Array Satu Dimensi.
1.2.1
Ilustrasi Single Stack
menggunakan Array Satu Dimensi
misal n = 10
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
misal dibuat dengan :
Top
3
Top
X
#define n 10
int S[n];
int Top, X;
11
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
PUSH
POP
25 12 17 10
Top
3
Top
X
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah PUSH ( Isi, Masuk, Simpan)
maka akan diisi di elemen nomor :
?
dan Top akan menunjuk elemen nomor :
?
12
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
PUSH
POP
Top
3
Top
X
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah POP ( Keluar, Ambil)
maka akan diambil isi elemen nomor :
?
dan Top akan menunjuk elemen nomor :
?
13
Ilustrasi Stack.
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
Top
3
X
Top
Diilustrasikan sebagai berikut :
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
X X X X
Top
14
1.2.2 Prinsip / Konsep Proses pada Stack
LIFO (Last In First Out)
1.2.3 Macam Proses pada Stack
a. AWAL (Inisialisasi)
b. PUSH (Insert, Masuk, Simpan, Tulis)
c. POP (Delete, Keluar, Ambil , Baca / Hapus)
15
a) Proses AWAL
Catatan :
void AWAL( )
{
Top
= -1;
}
Untuk memudahkan pembuatan
program, maka array untuk Stack
dan beberapa variabel yang terkait
dibuat bersifat Global
n-1
0
1
2
3
4
5
6
7
8
9
S[ ]
-1
Top
Top
X
16
Algoritma dasar
untuk
PUSH
17
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
Top
3
15
Top
X
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah PUSH (Isi, Masuk, Simpan)
maka akan diisi di elemen nomor :
?
dan Top akan menunjuk elemen nomor :
?
18
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10 15
Top
4
15
Top
X
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah PUSH (Isi, Masuk, Simpan)
maka akan diisi di elemen nomor :
4
dan Top akan menunjuk elemen nomor :
4
19
Sebelum nilai X diPUSH
Ke Stack
0
S[ ]
1
2
3
4
n-1
5
6
7
8
3
15
Top
X
Setelah nilai X diPUSH
Ke Stack
0
S[ ]
9
25 12 17 10
Top
1
2
3
n-1
4
5
6
7
8
a.
Top = Top + 1;
S[Top] = X;
b.
S[Top] = X;
Top = Top + 1;
c.
Top = Top + 1;
X = S[Top];
d.
X = S[Top];
Top = Top + 1;
9
25 12 17 10 15
Top
Pilih algoritma yang benar
untuk PUSH
4
15
Top
X
?
20
A = B;
Sebelum :
Yang diisi, variabel A
atau variabel B
25
17
A
B
?
A = B;
?
Sesudah :
A
B
21
A = B;
Sebelum :
Yang diisi adalah : variabel A
25
17
A
B
A = B;
Sesudah :
17
17
A
B
22
0
A
1
2
3
17
4
5
Untuk mengisi elemen A[3]
Pilih instruksi yang benar :
a. A[3] = X;
b. X = A[3];
17
X
23
Sebelum nilai X diPUSH
Ke Stack
0
S[ ]
1
2
3
4
n-1
5
6
7
8
3
15
Top
X
Setelah nilai X diPUSH
Ke Stack
0
S[ ]
9
25 12 17 10
Top
1
2
3
n-1
4
5
6
7
8
a.
Top = Top + 1;
S[Top] = X;
b.
S[Top] = X;
Top = Top + 1;
c.
Top = Top + 1;
X = S[Top];
d.
X = S[Top];
Top = Top + 1;
9
25 12 17 10 15
Top
Pilih algoritma yang benar
untuk PUSH
4
15
Top
X
?
24
Sebelum nilai X diPUSH
Ke Stack
0
S[ ]
1
2
3
4
n-1
5
6
7
8
3
15
Top
X
Setelah nilai X diPUSH
Ke Stack
0
S[ ]
9
25 12 17 10
Top
1
2
3
n-1
4
5
6
7
8
a.
Top = Top + 1;
S[Top] = X;
b.
S[Top] = X;
Top = Top + 1;
c.
Top = Top + 1;
X = S[Top];
d.
X = S[Top];
Top = Top + 1;
9
25 12 17 10 15
Top
Pilih algoritma yang benar
untuk PUSH
4
15
Top
X
25
Sebelum nilai X diPUSH
Ke Stack
0
S[ ]
1
2
3
4
n-1
5
6
7
8
25 12 17 10
Top
3
15
Top
X
Setelah nilai X diPUSH
Ke Stack
0
S[ ]
9
1
2
3
Untuk PUSH
Algoritma yang benar
Top = Top + 1;
S[Top] = X;
n-1
4
5
6
7
8
9
25 12 17 10 15
Top
4
15
Top
X
26
Algoritma PUSH yang benar :
n-1
Sebelum :
0 1
S[ ]
Top = Top + 1;
S[Top] = X;
2
3 4
5 6
7 8 9
25 12 17 10
3
15
Top
X
Top
n-1
0 1
S[ ]
2
3 4
5 6
Dengan : Top = Top + 1;
7 8 9
25 12 17 10
4
15
Top
X
Top
Sesudah :
0 1
S[ ]
n-1
2
3 4
5 6
25 12 17 10 15
Top
7 8 9
Dengan : S[Top] = X;
4
15
Top
X
27
Algoritma PUSH yang SALAH :
n-1
Sebelum :
0 1
S[ ]
S[Top] = X;
Top = Top + 1;
2
3 4
5 6
7 8 9
25 12 17 10
3
15
Top
X
Top
n-1
0 1
S[ ]
2
3 4
5 6
Dengan : S[Top] = X;
7 8 9
25 12 17 15
3
15
Top
X
Top
Sesudah :
0 1
S[ ]
n-1
2
3 4
5 6
25 12 17 15
Top
7 8 9
Dengan : Top = Top + 1;
4
15
Top
X
28
Algoritma dasar untuk PUSH
Top = Top + 1;
S[Top] = X;
atau :
Top+= 1;
S[Top] = X;
atau :
Top++;
S[Top] = X;
atau :
S[++Top] = X;
29
Algoritma dasar
untuk
POP
30
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
Top
3
Top
X
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah POP ( Keluar, Ambil)
maka akan diambil isi elemen nomor :
?
dan setelah itu Top akan menunjuk elemen nomor :
?
31
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
Top
3
Top
X
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah POP ( Keluar, Ambil)
maka akan diambil isi elemen nomor :
3
dan setelah itu Top akan menunjuk elemen nomor :
2
32
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
Top
2
10
Top
X
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah POP ( Keluar, Ambil)
maka akan diambil isi elemen nomor :
3
dan setelah itu Top akan menunjuk elemen nomor :
2
33
Sebelum POP
0
S[ ]
1
n-1
2
3
4
5
6
7
8
25 12 17 10
3
Top
Setelah POP
0
1
n-1
2
3
4
5
6
7
8
X = S[Top];
Top = Top - 1;
b.
Top = Top - 1;
X = S[Top];
c.
Top = Top - 1;
S[Top] = X;
d.
S[Top] = X;
Top = Top - 1;
9
25 12 17
Top
a.
X
Top
S[ ]
9
Untuk POP,
Pilih algoritma yang benar
2
10
Top
X
?
34
Sebelum POP
0
S[ ]
1
n-1
2
3
4
5
6
7
8
25 12 17 10
3
Top
Setelah POP
0
a.
X = S[Top];
Top = Top - 1;
b.
Top = Top - 1;
X = S[Top];
c.
Top = Top - 1;
S[Top] = X;
d.
S[Top] = X;
Top = Top - 1;
X
Top
S[ ]
9
Untuk POP,
Pilih algoritma yang benar
n-1
1
2
3
4
5
6
7
8
9
25 12 17
Top
2
10
Top
X
35
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
25 12 17 10
3
Top
X
Top
Setelah POP
0
S[ ]
9
1
Untuk POP
Algoritma yang benar
X = S[Top];
Top = Top - 1;
n-1
2
3
4
5
6
7
8
9
25 12 17
Top
2
10
Top
X
36
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
25 12 17 10
X
n-1
Isi X
0
1
2
3
4
5
6
7
8
Jawab :
9
25 12 17 10
3
Top
Top
10
X
Setelah POP
0
S[ ]
Pertanyaan :
Setelah 10 disimpan di X
apakah nilai 10
masih ada dalam S[3] ?
3
Top
Top
S[ ]
9
1
n-1
2
3
4
5
6
7
8
9
25 12 17
Top
Pertanyaan :
Setelah Top dipindahkan
menunjuk S[2]
apakah nilai 10
masih ada dalam S[3] ?
Jawab :
2
10
Top
X
37
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
25 12 17 10
X
n-1
Isi X
0
1
2
3
4
5
6
7
8
Jawab : masih ada
9
25 12 17 10
3
Top
Top
10
X
Setelah POP
0
S[ ]
Pertanyaan :
Setelah 10 disimpan di X
apakah nilai 10
masih ada dalam S[3] ?
3
Top
Top
S[ ]
9
1
n-1
2
3
4
5
6
7
8
9
25 12 17
Top
Pertanyaan :
Setelah Top dipindahkan
menunjuk S[2]
apakah nilai 10
masih ada dalam S[3] ?
Jawab : masih ada
2
10
Top
X
tapi untuk keperluan
ilustrasi, nilainya dihapus
38
Algoritma POP yang benar :
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
X = S[Top];
Top = Top - 1;
9
3
25 12 17 10
Top
X
Top
Kita Ulangi
39
Algoritma POP yang benar :
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
X = S[Top];
Top = Top - 1;
9
3
25 12 17 10
Top
X
Top
n-1
0
S[ ]
1
2
3
25 12 17 10
Top
4
5
6
7
8
Dengan : X=S[Top];
9
3
10
Top
X
40
Algoritma POP yang benar :
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
X = S[Top];
Top = Top - 1;
9
3
25 12 17 10
Top
X
Top
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
Top
n-1
0
S[ ]
1
2
25 12 17
Top
3
4
5
6
7
8
Dengan : X=S[Top];
3
10
Top
X
Dengan : Top = Top -1;
9
2
10
Top
X
41
Algoritma dasar untuk POP
X = S[Top];
Top = Top - 1;
atau :
X = S[Top];
Top-=1;
atau :
X = S[Top];
Top--;
atau :
X = S[Top--];
42
Algoritma POP yang SALAH :
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
Top = Top - 1;
X = S[Top];
9
3
25 12 17 10
Top
X
Top
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
2
Top
Top
n-1
0
S[ ]
1
2
25 12
3
10
Top
Dengan : Top = Top -1;
4
5
6
7
8
X
Dengan : X = S[Top];
9
2
17
Top
X
43
b) Proses PUSH
void PUSH( void)
{
Top
= Top + 1;
S[Top] = X;
}
Catatan :
Semua variabel dibuat
bersifat GLOBAL
c) Proses POP
void POP(void)
{
X
= S[Top];
Top = Top - 1;
}
44
#include<stdio.h>
void AWAL (void);
void PUSH(void);
void POP(void);
define n 10
int S[n];
int Top, X;
void main( )
{ AWAL( );
scanf(“%i”, &X);
PUSH();
POP( );
printf(“%i”, X);
}
void AWAL(void)
{
Top = -1;
}
void PUSH (void)
{ Top = Top + 1;
S[top] = X;
}
void POP (void)
{ X = S[top];
Top = Top - 1;
}
Semua variabel bersifat
GLOBAL
45
Ilustrasi Stack.
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
3
Top
X
Top
Diilustrasikan sebagai berikut :
n-1
S[ ]
0
1
2
3
X
X
X
X
4
5
6
7
8
9
Top
46
1.2.4 Kondisi Stack.
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
47
Kondisi Stack.
lawannya
lawannya
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
48
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
9
1
a. KOSONG
b. PENUH
c. BISA DIISI
Top
n-1
2
Kondisi Stack :
0
1
2
3
X
X
X
X
4
5
6
7
8
d. ADA ISINYA
9
Top
n-1
3
0
1
2
3
4
5
6
7
8
X
X
X
X
X
X
X
X
X
9
X
Top
49
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
1
a. KOSONG
Gambar : ?
Top
n-1
2
0
1
2
3
X
X
X
X
4
5
6
7
8
9
b. PENUH
Gambar : ?
c. BISA DIISI
Gambar : ?
Top
n-1
3
0
1
2
3
4
5
6
7
8
X
X
X
X
X
X
X
X
X
9
d. ADA ISINYA
Gambar : ?
X
Top
50
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
1
a. KOSONG
Gambar :
1
Top
n-1
2
0
1
2
3
X
X
X
X
4
5
6
7
8
9
b. PENUH
Gambar : ?
c. BISA DIISI
Gambar : ?
Top
n-1
3
0
1
2
3
4
5
6
7
8
X
X
X
X
X
X
X
X
X
9
d. ADA ISINYA
Gambar : ?
X
Top
51
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
1
a. KOSONG
Gambar :
1
Top
n-1
2
0
1
2
3
X
X
X
X
4
5
6
7
8
b. PENUH
Gambar :
3
9
c. BISA DIISI
Gambar : ?
Top
n-1
3
0
1
2
3
4
5
6
7
8
X
X
X
X
X
X
X
X
X
9
d. ADA ISINYA
Gambar : ?
X
Top
52
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
1
a. KOSONG
Gambar :
1
Top
n-1
2
0
1
2
3
X
X
X
X
4
5
6
7
8
b. PENUH
Gambar :
9
c. BISA DIISI
Gambar :
Top
n-1
3
3
0
1
2
3
4
5
6
7
8
X
X
X
X
X
X
X
X
X
9
1
2
d. ADA ISINYA
Gambar : ?
X
Top
53
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
1
a. KOSONG
Gambar :
1
Top
n-1
2
0
1
2
3
X
X
X
X
4
5
6
7
8
b. PENUH
Gambar :
9
c. BISA DIISI
Gambar :
Top
n-1
3
3
0
1
2
3
4
5
6
7
8
X
X
X
X
X
X
X
X
X
9
1
2
2
3
d. ADA ISINYA
Gambar :
X
Top
54
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
cirinya
1
a. KOSONG
?
:
?
1
Top
n-1
0
2
:
1
2
3
4
5
6
7
8
9
b. PENUH
3
X X X X
c. BISA DIISI :
Top
1
?
2
n-1
0
3
1
2
3
4
5
6
7
8
9
X X X X X X X X X X
d. ADA ISINYA :
2
?
3
Top
55
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
cirinya
1
a. KOSONG
1
Top
n-1
0
2
: Top = -1
1
2
3
4
5
6
7
8
9
b. PENUH
:
3
X X X X
c. BISA DIISI :
Top
1
3
1
2
3
4
5
6
7
8
9
X X X X X X X X X X
d. ADA ISINYA :
2
?
2
n-1
0
?
?
3
Top
56
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
cirinya
1
a. KOSONG
1
Top
n-1
0
2
: Top = -1
1
2
3
4
5
6
7
8
9
b. PENUH
: Top = n-1
3
X X X X
c. BISA DIISI :
Top
1
2
n-1
0
3
1
2
3
4
5
6
7
8
9
X X X X X X X X X X
d. ADA ISINYA :
2
?
?
3
Top
57
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
cirinya
1
a. KOSONG
1
Top
n-1
0
2
: Top = -1
1
2
3
4
5
6
7
8
9
b. PENUH
: Top = n-1
3
X X X X
c. BISA DIISI : Top < n-1
Top
1
2
n-1
0
3
1
2
3
4
5
6
7
8
9
X X X X X X X X X X
d. ADA ISINYA :
2
?
3
Top
58
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
Kondis Stack :
9
cirinya
1
a. KOSONG
1
Top
n-1
0
2
: Top = -1
1
2
3
4
5
6
7
8
9
b. PENUH
: Top = n-1
3
X X X X
c. BISA DIISI : Top < n-1
Top
1
2
n-1
0
3
1
2
3
4
5
6
7
8
9
X X X X X X X X X X
d. ADA ISINYA : Top > -1
2
3
Top
59
Kondisi Stack.
n-1
0
1
2
3
X
X
X
X
4
5
6
7
8
9
Top
Kondis Stack :
cirinya
a. KOSONG
Top = -1
b. PENUH
Top = n-1
c. BISA DIISI
Top < n-1
d. ADA ISINYA
Top > -1
60
1.2.4 Kondisi Stack.
ciri
Kondisi Stack
Ilustrasi gambar
(posisi Top)
a.
KOSONG tak ada isinya
Top = -1
Gambar 1
b.
PENUH tak bisa diisi lagi
Top = n-1
Gambar 3
c.
BISA DIISI (kebalikan dari PENUH)
Top < n-1
Gambar 1 dan 2
d.
ADA ISINYA (kebalikan dari KOSONG)
Top > -1
Gambar 2 dan 3
n-1
0
1
2
3
4
5
6
7
8
9
1
n-1
Top
2
0
1
2
3
X
X
X
X
Top
3
4
5
6
7
8
9
n-1
0
1
2
3
X
X
X
X
4
X
5
6
7
8
9
X
X
X
X
X
Top
61
1.2.5
Algoritma PUSH dan POP yang lengkap.
62
a. Algoritma yang lengkap untuk proses PUSH
n-1
0
1
2
3
X
X
X
X
4
5
6
7
8
9
Bila ada instruksi PUSH
maka akan d isi di elemen
nomor :
?
Top
63
a. Algoritma yang lengkap untuk proses PUSH
n-1
0
1
2
3
X
X
X
X
4
5
6
7
8
9
Bila ada instruksi PUSH
maka akan d isi di elemen
nomor :
?
Top
n-1
0
1
2
3
X
X
X
X
4
5
6
7
8
9
Bila ada instruksi PUSH
maka akan d isi di elemen
nomor :
4
Top
64
a. Algoritma yang lengkap untuk proses PUSH
n-1
0
1
2
3
X
X
X
X
4
5
6
7
8
9
Bila ada instruksi PUSH
maka akan diisi di elemen
nomor :
4
Top
n-1
0
1
2
3
4
5
6
7
8
9
X
X
X
X
X
X
X
X
X
X
Top
Dalam kondisi PENUH
Bolehkah melakukan PUSH ?
Jawab :
?
65
a. Algoritma yang lengkap untuk proses PUSH
n-1
0 1
X
2
X
3 4
X
5 6
7 8
9
Bila ada instruksi PUSH
maka akan d isi di elemen
X
nomor :
4
Top
n-1
0 1
X
X
2
3 4
X
X
5 6
X
7 8
X
9
X
X
X
X
Top
Dalam kondisi PENUH
Bolehkah melakukan PUSH ?
Jawab : TIDAK BOLEH
66
a. Algoritma yang lengkap untuk proses PUSH
Ilustrasi Stack
n-1
0 1
X
2
X
3 4
X
5 6
7 8
9
X
Top
Bila Stack PENUH, maka Tidak Boleh melakukan PUSH
sehingga, sebelum PUSH,
perlu dioeriksa apakah Stack dalam keadaan :
a. apakah KOSONG
b. apakah PENUH
?
c. apakah BISA DIISI
d. apakah ADA ISINYA
67
a. Algoritma yang lengkap untuk proses PUSH
Ilustrasi Stack
n-1
0 1
X
2
X
3 4
X
5 6
7 8
9
X
Top
Bila BISA DIISI
silahkan PUSH
sebaliknya (else)
Bila PENUH
jangan PUSH
jangan PUSH
sebaliknya (else)
silahkan PUSH
68
a. Algoritma yang lengkap untuk proses PUSH
void PUSH(void)
{ if ( BISA DIISI )
{ Top = Top + 1;
S[Top] = X;
}
else
printf( “Stack Penuh”);
}
69
a. Algoritma yang lengkap untuk proses PUSH
void PUSH(void)
{ if ( Top < n-1 )
{ Top = Top + 1;
S[Top] = X;
}
else
printf( “Stack Penuh”);
}
atau
void PUSH(void)
{ if ( Top == n-1 )
printf( “Stack Penuh”);
else
{ Top = Top + 1;
S[Top] = X;
}
}
Bila BISA DIISI
lakukan PUSH
Bila PENUH
jangan PUSH
else
lakukan PUSH
70
b. Algoritma yang lengkap untuk proses POP
void POP(void)
{
if (Top > -1 )
{
X
= S[Top];
Top = Top-1;
}
else
printf(“Stack Kosong”);
}
Bila ADA ISINYA
lakukan POP
atau : Algoritma yang lengkap untuk proses POP dengan ‘logika terbalik’
void POP(void)
{
if ( Top == -1 )
printf(“Stack Kosong”);
else
{
X
= S[Top];
Top = Top - 1;
}
}
Bila KOSONG
jangan POP
else
lakukan POP
71
1.2.6 Contoh Soal PUSH dan POP .
Baca sendiri di buku
72
1.3 Aplikasi Stack.
1.3.1.
1.3.2.
Memeriksa kelengkapan pasangan kurung buka dan
kurung tutup suatu arithmetic statement
A + B * ( C - D) / ( E + F )
BENAR
A+B*(C-D/(E+F)
SALAH
Merobah (konversi) bentuk INFIX menjadi
bentuk POSTFIX
INFIX
1.3.3.
POSTFIX
A+B+C*D
AB+CD *+
A + (B + C) * D
ABC+D*+
Mencatat Return Address oleh Operating System sewaktu
menjalankan sebuah program pada pelaksanaan call suatu
function.
73
1.4 Pointer sebagai penunjuk Stack.
a. Menyiapkan Stack dan Pointer :
n-1
0
Top
1
2
3
4
5
6
7
8
9
10
BatasAtas
Dasar
define n 11
int S[n], *Top, *BatasAtas, *Dasar
Dasar = &S[-1];
Top = &S[-1];
BatasAtas = &S[n-1];
74
0
1
2
3
4
5
6
7
8
9
n
10
BatasAtas
Top
Dasar
a.
Algoritma untuk PUSH
if(Top < BatasAtas)
Top++;
*Top = X;
else
printf(“Stack Penuh);
b.
Algoritma untuk POP
if(Top > Dasar)
X = *Top;
Top--;
else
printf(“Stack Penuh);
75
1.5 Representasi Stack menggunakan structure.
Perhatikan contoh berikut ini :
a.
Menyiapkan Stack.
#define MAXSTACK 10
typedef char ItemType;
tipe : char
typedef struct StackTag {
int Top;
ItemType S[MAXSTACK];
} StackType;
b.
dibuat 10 elemen
S[0] sampai dengan S[9]
Initialisasi.
void Intitialize(StackType
{ P->Top = -1; }
*P )
76
1.5 Representasi Stack menggunakan structure.
Perhatikan contoh berikut ini :
c.
Proses PUSH.
void PUSH(ItemType item, StackType *P)
{ if(P->Top >= MAXSTACK-1)
printf(“Stack Penuh”);
else
P->entry[++P->Top] = item;
d.
Proses POP.
void POP(ItemType *Q, StackType *P)
{ if(P->Top <= -1)
printf(“Stack Kosong”);
else
*Q = P->S[P->Top--];
}
77
0
1
2
3
4
5
6
n-1
X X X X
Top
Buku : halaman 56
Soal-I. Untuk Stack yang diilustrasikan pada Gambar diatas :
1. Sebutkan ciri bahwa Stack :
a. Kosong
b. Penuh
c. Bisa diisi
d. Ada isinya
2. Tulis algoritma dasar untuk:
a. PUSH
b. POP
3. Tulis algoritma yang lengkap untuk:
a. PUSH
b. POP
4. Tulis program (penggalan program) untuk menginput data melalui
keyboard satu persatu dan mem Push data tersebut ke Stack sampai
Stack penuh tak bisa diisi lagi.
5. Tulis program (penggalan program) untuk mengeluarkan (POP) isi
Stack satu per satu dan mencetaknya, sampai Stack menjadi kosong.
78
6. Dianggap tempat yang tersedia masih lebih dari 10 tempat.
Tulis program (penggalan program) untuk menginput
sebanyak 10 buah data melalui keyboard satu persatu dan
mem Push data tersebu ke Stack
7.
Dipastikan stack terisi lebih dari 10 elemen. Tulis program
(penggalan program) untuk mengeluarkan (POP) isi stack
sebanyak 10 elemen, satu per satu dan mencetaknya ke
layar
8.
Tulis program (penggalan program) untuk menginput melalui
keyboard satu persatu dan mem Push data tersebut ke Stack.
Bila tempat yang tersedia masih cukup untuk menampung 10
data baru, maka data yang diinput dan dipush sebanyak 10
buah data. Tapi bila tempat yang tersedia kurang dari 10
tempat, maka cukup menginput dan mem Push sebanyak
tempat yang tersedia, sampai stack penuh.
79
9.
Tulis program (penggalan program) untuk mengeluarkan
(POP) isi stack satu persatu dan mencetaknya ke layar. Bila
stack berisi 10 elemen atau lebih dari 10 elemen, maka
keluarkan dan cetak sebanyak hanya 10 elemen. Tapi bila isi
stack kurang dari 10 elemen, maka keluarkan semua isi stack,
sampai stack menjadi kosong.
80
81
6. Dianggap tempat yang tersedia masih lebih
dari 10 tempat. Tulis program (penggalan
program) untuk menginput sebanyak 10
buah data melalui keyboard satu persatu
dan mem Push data tersebut ke Stack.
1 menit membaca soal
1 menit menyelesaikan jawaban soal
82
6. Dianggap tempat yang tersedia mesih lebih
dari 10 tempat. Tulis program (penggalan
program) untuk menginput sebanyak 10
buah data melalui keyboard satu persatu
dan mem Push data tersebut ke Stack.
83
6. Dianggap tempat yang tersedia mesih lebih
dari 10 tempat. Tulis program (penggalan
program) untuk menginput sebanyak 10
buah data melalui keyboard satu persatu
dan mem Push data tersebut ke Stack.
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14
n-1
X X X X
INPUT
3
Top
Top
0
1
2
3
X X X X
4
5
6
7
8
9
X
10 11 12 13 14
n-1
x x x x x x x x x x
13
Top
Top
X
Menginput dan mengisi 10
elemen stack
84
7. Dipastikan stack terisi lebih dari 10 elemen.
Tulis program (penggalan program) untuk
mengeluarkan (POP) isi stack sebanyak 10
elemen, satu per satu dan mencetaknya
ke layar
1 menit membaca soal
1 menit menyelesaikan jawaban soal
85
7. Dipastikan stack terisi lebih dari 10 elemen.
Tulis program (penggalan program) untuk
mengeluarkan (POP) isi stack sebanyak 10
elemen, satu per satu dan mencetaknya
ke layar
86
7. Dipastikan stack terisi lebih dari 10 elemen.
Tulis program (penggalan program) untuk
mengeluarkan (POP) isi stack sebanyak 10
elemen, satu per satu dan mencetaknya
ke layar
0
1
2
3
4
5
6
7
8
9
10 11
12 13 14
n-1
X X X X X X X X X X X X X X X
14
Top
Top
X
87
7. Dipastikan stack terisi lebih dari 10 elemen.
Tulis program (penggalan program) untuk
mengeluarkan (POP) isi stack sebanyak 10
elemen, satu per satu dan mencetaknya
ke layar
0
1
2
3
4
5
6
7
8
9
10 11
12 13 14
n-1
X X X X X X X X X X X X X X X
14
Top
Top
0
1
2
3
4
5
6
7
8
9
X
10 11
12 13 14
n-1
X X X X X
Top
Mengeluarkan (POP) 10
elemen stack
4
Top
X
88
89
8.
Tulis program (penggalan program) untuk menginput melalui
keyboard satu persatu dan mem Push data tersebut ke Stack.
Bila tempat yang tersedia masih cukup untuk menampung 10
data baru, maka data yang diinput dan dipush sebanyak 10
buah data. Tapi bila tempat yang tersedia kurang dari 10
tempat, maka cukup menginput dan mem Push sebanyak
tempat yang tersedia, sampai stack penuh.
9.
Tulis program (penggalan program) untuk mengeluarkan
(POP) isi stack satu persatu dan mencetaknya ke layar. Bila
stack berisi 10 elemen atau lebih dari 10 elemen, maka
keluarkan dan cetak sebanyak hanya 10 elemen. Tapi bila isi
stack kurang dari 10 elemen, maka keluarkan semua isi stack,
sampai stack menjadi kosong.
90
8. Tulis program (penggalan program) untuk menginput
melalui keyboard satu persatu dan mem Push data
tersebut ke Stack. Bila tempat yang tersedia masih
cukup untuk menampung 10 data baru, maka data
yang diinput dan di push sebanyak 10 buah data. Tapi
bila tempat yang tersedia kurang dari 10 tempat,
maka cukup menginput dan mem Push sebanyak
tempat yang tersedia, sampai stack penuh.
91
8. Tulis program (penggalan program) untuk menginput
melalui keyboard satu persatu dan mem Push data
tersebut ke Stack. Bila tempat yang tersedia masih
cukup untuk menampung 10 data baru, maka data
yang diinput dan di push sebanyak 10 buah data. Tapi
bila tempat yang tersedia kurang dari 10 tempat,
maka cukup menginput dan mem Push sebanyak
tempat yang tersedia, sampai stack penuh.
92
8. Tulis program (penggalan program) untuk menginput
melalui keyboard satu persatu dan mem Push data
tersebut ke Stack. Bila tempat yang tersedia masih
cukup untuk menampung 10 data baru, maka data
yang diinput dan di push sebanyak 10 buah data. Tapi
bila tempat yang tersedia kurang dari 10 tempat,
maka cukup menginput dan mem Push sebanyak
tempat yang tersedia, sampai stack penuh.
0
1
2
3
4
5
6
7
8
9
10 11
12 13 14
n-1
X X X X X X X X X X X X X X X
14
0
1
2
3
Top
X
Top
4
5
12 13 14
n-1
X X X X X X X X X X X X X X X
x x x x x x
n-1
Top
X
Masih
tersedia
kurang dari
10 lokasi
6
7
8
9
10 11
Mengisi stack sebanyak sisa
yang tersedia (sampai penuh)
karena sisa elemen yang Top
tersedia kurang dari 10 elemen
Diisi
sampai
penuh
93
8. Tulis program (penggalan program) untuk menginput
melalui keyboard satu persatu dan mem Push data
tersebut ke Stack. Bila tempat yang tersedia masih
cukup untuk menampung 10 data baru, maka data
yang diinput dan di push sebanyak 10 buah data. Tapi
bila tempat yang tersedia kurang dari 10 tempat,
maka cukup menginput dan mem Push sebanyak
tempat yang tersedia, sampai stack penuh.
0
1
2
3
4
5
6
7
8
9
10 11
12 13 14 15
16 17 18
n-1
10 11
12 13 14 15
16 17 18
n-1
X X X X X X X X X
8
0
1
2
3
Top
X
Top
4
5
6
7
8
9
X X X X X X X X X x x x x x x
18
Top
X
Masih
tersedia
>= 10
lokasi
x x x x
Mengisi stack sebanyak 10
lokasi karena sisa elemen
yang tersedia masih cukup
untuk 10 lokasi
Top
Diisi
sampai
penuh
94
9. Tulis program (penggalan program)
untuk
mengeluarkan (POP) isi stack satu persatu dan
mencetaknya ke layar. Bila stack berisi 10 elemen
atau lebih dari 10 elemen, maka keluarkan dan cetak
sebanyak 10 elemen. Tapi bila isi stack kurang dari
10 elemen, maka keluarkan semua isi stack, sampai
stack menjadi kosong.
95
9. Tulis program (penggalan program)
untuk
mengeluarkan (POP) isi stack satu persatu dan
mencetaknya ke layar. Bila stack berisi 10 elemen
atau lebih dari 10 elemen, maka keluarkan dan cetak
sebanyak 10 elemen. Tapi bila isi stack kurang dari
10 elemen, maka keluarkan semua isi stack, sampai
stack menjadi kosong.
96
9. Tulis program (penggalan program)
untuk
mengeluarkan (POP) isi stack satu persatu dan
mencetaknya ke layar. Bila stack berisi 10 elemen
atau lebih dari 10 elemen, maka keluarkan dan cetak
sebanyak 10 elemen. Tapi bila isi stack kurang dari
10 elemen, maka keluarkan semua isi stack, sampai
stack menjadi kosong.
0
1
2
3
4
5
6
7
8
9
10 11
12 13 14
n-1
X X X X X X X X
7
Top
Top
0
Top
1
2
3
4
5
6
7
8
9
10 11
12 13 14
Mengeluarkan seluruh isi stack , karena
isinya kurang dari 10 elemen
X
n-1
-1
Top
X
97
9. Tulis program (penggalan program)
untuk
mengeluarkan (POP) isi stack satu persatu dan
mencetaknya ke layar. Bila stack berisi 10 elemen
atau lebih dari 10 elemen, maka keluarkan dan cetak
sebanyak 10 elemen. Tapi bila isi stack kurang dari
10 elemen, maka keluarkan semua isi stack, sampai
stack menjadi kosong.
0
1
2
3
4
5
6
7
8
9
10 11
12 13 14
n-1
x x x x x x x x x x x x x x x
Top
14
Top
0
1
2
3
4
5
6
7
8
9
10 11
12 13 14
X
n-1
x x x x x
Top
Mengeluarkan 10 elemen stack
karena jumlah elemen yang ada
isinya >= 10 elemen
4
Top
X
98
99
1
Sudah ada sebuah stack yang dibuat dengan
int S[n], dengan variabel Top bertipe int
sebagai penunjuk posisi isi stack yang ‘paling
atas’. Tidak diketahui apakah stack tersebut
dalam keadaan kosong, penuh, bisa diisi, atau
ada isinya.
Tulis program (penggalan program) untuk
menginput data melalui keyboard satu persatu
dan mem Push data tersebut ke Stack (bila
stack tersebut bisa diisi) sampai Stack penuh
tak bisa diisi lagi.
1 menit membaca soal
1 menit menyelesaikan jawaban soal
100
2
Sudah ada sebuah stack yang dibuat dengan
int S[n], dengan variabel Top bertipe int
sebagai penunjuk posisi isi stack yang ‘paling
atas’. Tidak diketahui apakah stack tersebut
dalam keadaan kosong, penuh, bisa diisi, atau
ada isinya.
Tulis program (penggalan program) untuk
mengeluarkan isi stack tersebut (bila ada
isinya), dan mencetaknya ke layar monitor, satu
persatu sampai stack tersebut kosong.
1 menit membaca soal
1 menit menyelesaikan jawaban soal
101
102
Soal-II.
1. Sudah ada 2 buah Stack yaitu A dan B, yang dibuat
dengan int A[50] dan int B[50], masing-masing dengan
penunjuk posisi paling atas dengan nama : TopA, dan
TopB. Stack A sudah ada isinya nilai-nilai ujian
mahasiswa. Stack B belum ada isinya, dengan ilustrasi
pada Gambar-2.11a
TopA
7
6 62
5 74
7
6
4 80
3 95
2 53
1 70
4
3
0 65
-1 A
5
TopB
2
1
0
-1 B
103
Susun program ( penggalan program ) untuk memindahkan
isi Stack A ke Stack B sedemikian rupa sehingga Stack A
menjadi kosong, dan isi Stack B urut terbalik dibandingkan
isi Stack A semula,
seperti yang diilustrasikan pada
Gambar-2.11b.
TopB
TopA
7
6 62
5 74
7
6
7
6
5
5
4 80
3 95
2 53
1 70
4
3
4
3
2
1
2
1
TopB
0 65
-1 A
Gambar-2.11a
0
-1 B
TopA
0
-1 A
7
6 65
5 70
4 53
3 95
2 80
1 74
0 62
-1 B
Gambar-2.11b
104
2. Sudah ada 3 buah Stack yaitu A, B dan C, yang dibuat
dengan int A[50], int B[50], dan int C[50], masing-masing
dengan penunjuk posisi paling atas dengan nama : TopA,
TopB, dan TopC. Stack A sudah ada isinya nilai-nilai ujian
mahasiswa. Stack B dan Stack C belum ada isinya,
dengan ilustrasi pada Gambar-2.12a
TopA
7
6 62
5 74
7
6
7
6
5
5
4 80
3 95
2 53
1 70
4
3
4
3
2
1
2
1
0 65
-1 A
TopB
0
-1 B
TopC
0
-1 C
Gambar-2.12a
105
Susun program ( penggalan program ) untuk memindahkan isi
Stack A ke Stack B sedemikian rupa sehingga Stack A menjadi
kosong, dan isi Stack B urutannya sama dengan isi Stack A
semula, seperti yang diilustrasikan pada Gambar-2.12b. Stack C
dapat digunakan bila diperlukan.
Catatan : Semua proses, harus mengikuti prinsip proses stack
PUSH dan POP
TopA
TopB
7
6 62
5 74
7
6
7
6
7
6
5
5
5
4 80
3 95
2 53
1 70 TopB
4
3
4
3
4
3
2
1
2
TopC 1
2
TopA 1
0 65
-1 A
0
-1 B
Gambar-2.12a
0
-1 C
0
-1 A
7
6 62
5 74
7
6
4 80
3 95
2 53
1 70 TopC
4
3
0 65
-1 B
5
2
1
0
-1 C
Gambar-2.12b
106
3. Sudah ada 3 buah Stack yaitu A, B dan C, yang dibuat
dengan int A[50], int B[50], dan int C[50], masing-masing
dengan penunjuk posisi paling atas dengan nama : TopA,
TopB, dan TopC. Stack A sudah ada isinya nilai-nilai ujian
mahasiswa. Stack B dan Stack C belum ada isinya,
dengan ilustrasi pada Gambar-2.13a
TopA
7
6 62
5 74
7
6
7
6
5
5
4 80
3 95
2 53
1 70
4
3
4
3
2
1
2
1
0 65
-1 A
TopB
0
-1 B
TopC
0
-1 C
Gambar-2.13 a
107
Susun program ( penggalan program ) untuk memindahkan isi
Stack A ke Stack B sedemikian rupa sehingga yang dipindahkan
ke Stack B hanyalah yang nilainya dibawah 70, sedangkan yang
nilainya 70 keatas, tetap berada di Stack A ( atau dikembalikan
lagi ke Stack A) sehingga ilustrasi hasil prosesnya seperti yang
diperlihatlkan pada Gambar-2.13b.
TopA
TopB
7
6 62
5 74
7
6
7
6
7
6
7
6
7
6
5
5
5
5
5
4 80
3 95
2 53
1 70 TopB
4
3
4
3
4
3
4
3
2
1
2
TopC 1
0 65
-1 A
0
-1 B
Gambar-2.13a
0
-1 C
4
3 74
2 80
TopA 1 95
0 70
-1 A
2
2 62
1 53 TopC 1
0
0 65
-1 C
-1 B
Gambar-2.13b
108
4. Sudah ada dua buah stack SA dan SB
yang dibuat dengan int SA[20] dan
SB[20], belum ada isinya. Penunjuk data
paling ‘atas’ : TopA untuk SA, dan TopB
untuk SB.
Sudah ada 10 buah data integer dalam
lembar dokumen sebagai berikut :
12, 17, 5, 10, 15, 7, 25, 11, 22, 19
Susun
program untuk
menginput
data
diatas satu per
satu sesuai
urutan data ( pertama 12, kedua 17, dan
seterusnya ) dan menyimpannya ke
dalam stack SA sedemikian rupa
sehingga isi stack SA urut nilai menaik
seperti
yang
diilustrasikan
pada
Gambar-2.14.
Stack SB dapat digunakan bila
diperlukan.
TopA
10
10
9 25
9
8 22
8
7 19
7
6 17
6
5 15
5
4 12
4
3 11
3
2 10
1 7
2
0
5
-1 SA
Catatan : Semua proses menggunakan operasi stack
PUSH dan POP
TopB
1
0
-1 SB
Gambar-2.14
109
5. Sudah ada 3 buah Stack yaitu A, B dan C, yang dibuat
dengan int A[50], int B[50], dan int C[50], masing-masing
dengan penunjuk posisi paling atas dengan nama : TopA,
TopB, dan TopC. Stack A sudah ada isinya nilai-nilai ujian
mahasiswa. Stack B dan Stack C belum ada isinya, dengan
ilustrasi pada Gambar-2.16a.
TopA
7
7
7
6 55
6
6
5 74
5
5
4 80
4
4
3 95
3
3
2 53
2
2
1 66
0 59
-1 A
TopB
1
0
-1
TopC
B
Gambar-2.16a
1
0
-1
C
110
Susun program ( penggalan program ) untuk memindahkan isi
Stack A ke Stack B sedemikian rupa sehingga Stack A menjadi
kosong, dan isi Stack B nilainya urut menaik, dari nilai terkecil
sampai dengan nilai terbesar seperti yang diilustrasikan pada
Gambar-2.16b. Stack C dapat digunakan bila diperlukan.
TopA
TopB
7
7
7
7
7
7
6 55
6
6
6
6 95
6
5 74
5
5
5
5 80
5
4 80
4
4
4
4 74
4
3 95
3
3
3
3 66
3
2 53
2
2
2
2 59
2
1 66 TopB 1
TopC 1
TopA 1
0
0
0 59
-1
A
0
-1
B
Gambar-2.16a
-1 C
-1
1 55 TopC 1
A
0 53
-1
B
0
-1 C
Gambar-2.16a
Catatan : Semua proses, harus mengikuti prinsip proses stack PUSH dan POP
111