001 Algo2 SingleStack Elearning
001 Algo2 SingleStack Elearning
1
Elearning Algo-2
Pertemuan ke-1
2
Apa
yang akan
DIPELAJARI
?
3
7 Pertemuan
sebelum
UTS
‘ hanya ’
Mempelajari : Cara menyimpan data ke dalam
ARRAY satu dimensi,
atau
ke dalam suatu tempat yang
disebut LINKED-LIST,
kemudian mengambil
(membaca) data yang disimpan
tadi
4
Menyimpan data ke dalam ARRAY satu
dimensi, dan mengambil ( membaca ) data
yang ada dalam array tersebut,
5
Ada 2 macam sifat penyimpanan dan
pengambilan :
2. Struktur QUEUE
7
8
1
9
1
10
11
Menyimpan data ke dalam memory ,
( Array satu Dimensi ), dan
mengambilnya kembali .
13
14
delete
insert
A stack is an ordered
collection of items into which 7
new items may be inserted and 6
from which items may be
5
deleted at one end, called the
4
top of the stack.
3
2
( Yedidyah L, Moshe J. A., and Aaron M. 1
Tenenbaum;
Data Structures Using C and C++)
15
Disebut TUMPUKAN,
16
Ilustrasi Proses Stack.
Ilustrasi menumpuk
benda sejenis
di atas meja
3 Benda-4
Benda pertama
diberi nomor 0 (nol), Benda-3
2
karena Stack
menggunakan Benda-2
1
array 1 Dimensi,
dimana kolom 0 Benda-1
pertama nomor Meja
indeksya = nol
17
Dalam keadaan seperti ini , dikatakan Benda yang paling
atas ( palig Top ) adalah Benda nomor-3.
Nomor Benda yang paling atas ini disimpan dalam sebuah
variabel yang diberi nama : Top
Sehingga disebut :
Top = 3
Top = 3
3 Benda-4
2 Benda-3
1 Benda-2
0 Benda-1
Meja
18
Urutan 0,1,2,3 ini
disebut urutan
Masuk,
atau Simpan,
atau PUSH
Untuk STACK,
memasukkan atau
menyimpan data
ke Stack disebut
mem-PUSH
data ke Stack 3 Benda-4
2 Benda-3
PUSH
artinya dorong 1 Benda-2
0 Benda-1
Meja
19
Benda belum ada
diatas meja.
Belum ada data
yang no-0 (nol).
Jadi dibuat :
Top = -1
Top = -1 Meja
20
Benda-1
diletakkan
diatas meja,
Top = Top + 1,
Top = 0 Top = 0
0 Benda-1
Meja
21
Benda-2
diletakkan
diatas Benda-1
Top = Top + 1
Top = 1
Top = 1
1 Benda-2
0 Benda-1
Meja
22
Benda-3
diletakkan
diatas Benda-2
Top = Top + 1
Top = 2 Top = 2
2 Benda-3
1 Benda-2
0 Benda-1
Meja
23
Benda-4
diletakkan
diatas Benda-3
Top = Top + 1
Top = 3 Top = 3
3 Benda-4
2 Benda-3
1 Benda-2
0 Benda-1
Meja
24
25
Urutan 3,2,1,0 ini
Ilustrasi mengambil data disebut urutan
dari dalam STACK Keluar,
atau Ambil,
atau POP
Benda-4 3 POP
artinya
Benda-3 2 melenting keluar
Benda-2 1
Benda-1 0 Meja
26
Ilustrasi mengambil data
dari dalam STACK
Sekarang Top = 3
Top = 3
Benda-4 3
Benda-3 2
Benda-2 1
Benda-1 0 Meja
27
Ilustrasi mengambil data
dari dalam STACK Ambil data yang
paling atas.
Top dikurang 1
Sekarang Top = 2
Top = 3
Benda-4 3
Benda-3 2
Benda-2 1
Benda-1 0 Meja
28
Ilustrasi mengambil data
dari dalam STACK
Sekarang Top = 2
Top = 2
Benda-3 2
Benda-2 1
Benda-1 0 Meja
29
Ilustrasi mengambil data
dari dalam STACK Ambil data yang
paling atas.
Top dikurang 1
Sekarang Top = 1
Top = 2
Benda-3 2
Benda-2 1
Benda-1 0 Meja
30
Ilustrasi mengambil data
dari dalam STACK
Sekarang Top = 1
Top = 1
Benda-2 1
Benda-1 0 Meja
31
Ilustrasi mengambil data
dari dalam STACK Ambil data yang
paling atas.
Top dikurang 1
Sekarang Top = 0
Top = 1
Benda-2 1
Benda-1 0 Meja
32
Ilustrasi mengambil data
dari dalam STACK
Sekarang Top = 0
Top = 0
Benda-1 0 Meja
33
Ilustrasi mengambil data
dari dalam STACK Ambil data yang
paling atas.
Top dikurang 1
Sekarang Top = -1
Benda-1
Top = -1
-1
34
Ilustrasi mengambil data
dari dalam STACK
Sekarang Top = -1
Top = -1
-1
35
Ilustrasi mengambil data
dari dalam STACK
Kalau Top = -1
Berarti data
sudah habis
Top = -1
-1
36
37
Dalam struktur STACK, digunakan istilah :
39
40
Single Stack
Hanya ada satu Stack dalam sebuah
collection data
41
1.1 Ilustrasi Single Stack
menggunakan Array Satu Dimensi
misal n = 10
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
42
ILUSTRASI misal n = 10
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
nomor indeks
untuk lokasi
terakhir diyatakan
dengan n-1
Nama array S
Tipe dan jumlah elemen Jumlah
tergantung data yang akan elemen
disimpan
misal = n
Nama bebas
Kebetulan dalam contoh ini diberi nama S
ILUSTRASI misal n = 10
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
S[ ] 25 12 17 10
Top
Dari 4 buah nilai yang
tersimpan, nomor index
lokasi data yang terakhir
disimpan dalam variabel yang misal dibuat dengan :
namanya Top. #define n 10
-
-
-
3 -
int S[n];
Top X int Top, X;
45
n-1
0 1 2 3 4 5 6 7 8 9
PUSH
S[ ] 25 12 17 10
POP
3 Top
Top X
46
n-1
0 1 2 3 4 5 6 7 8 9
PUSH
S[ ] 25 12 17 10
POP
3 Top
Top X
47
n-1
0 1 2 3 4 5 6 7 8 9
PUSH
S[ ] 25 12 17 10
POP
Top
Top X
Top
Top X
S[ ] 25 12 17 10
Top
Top X
S[ ] X X X X
Top 50
1.2 Prinsip / Konsep Proses pada Stack
51
1.3.1 Bila ditulis dalam sebuah FUNGSI
Misal nama FUNGSInya : AWAL( )
void AWAL( )
{
Top = -1;
}
S[ ]
-1
Top Top X
52
Contoh Penggunaan
sebuah Fungsi // Dev-C++ 5.11
#include<stdio.h>
Misal nama int X;
Fungsinya : TAMBAH() void TAMBAH()
{ X = X + 1;
}
int main()
{
X = 5;
TAMBAH();
printf("%i", X );
}
Algoritma dasar
untuk
PUSH
54
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
3 15
Top
Top X
55
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
3 15
Top
Top X
Dengan :
Top = Top + 1;
S[Top] = X;
56
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
3 15
Top
Top X
Top = Top + 1 ;
Pindahkan Top satu langkah ke atas
57
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
4 15
Top
Top X
Top = Top + 1 ;
Pindahkan Top satu langkah ke atas
Top sekarang = 4
58
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 15
4 15
Top
Top X
dengan S[Top] = X;
S[ ] 25 12 17 10 a. Top = Top + 1;
S[Top] = X;
Keadaan Top 3 15
seperti ini
X
b. S[Top] = X;
Top
Top = Top + 1;
c. Top = Top + 1;
Setelah nilai X diPUSH
Ke Stack, keadaan menjadi : X = S[Top];
n-1
0 1 2 3 4 5 6 7 8 9
d. X = S[Top];
S[ ] 25 12 17 10 15 Top = Top + 1;
Top 4 15
Top X
? 60
Teori : Penulisan instruksi dan maksudnya
Sebelum : 25 17
A B
A = B;
Sesudah :
?
A B
61
Teori : Penulisan instruksi dan maksudnya
Sebelum : 25 17
A B
A = B;
A 17
a. A[3] = X;
b. X = A[3];
17
X
63
Untuk mengisi elemen A[3]
0 1 2 3 4 5 Pilih instruksi yang benar :
A 17
a. A[3] = X;
ini yang benar
17
X
64
Misal keadaan sekarang : Pilih algoritma yang
Sebelum nilai X diPUSH Ke Stack Benar untuk PUSH
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 a. Top = Top + 1;
S[Top] = X;
Top 3 15
X
b. S[Top] = X;
Top
Top = Top + 1;
Setelah nilai X diPUSH
Ke Stack
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 15
Top 4 15
Top X
65
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
Top
3 15
Top X
66
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
Top
4 15
Top X
67
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 15
Top
4 15
Top X
68
Misal keadaan sekarang : Pilih algoritma yang
Sebelum nilai X diPUSH Ke Stack Benar untuk PUSH
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 a. Top = Top + 1;
S[Top] = X;
Top 3 15
ini yang benar
Top X
S[ ] 25 12 17 10 15
Top 4 15
Top X
69
Algoritma PUSH
Top = Top + 1;
yang benar : S[Top] = X;
Sebelum : n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 3 15
Top X
Top
n-1
0 1 2 3 4 5 6 7 8 9 Dengan : Top = Top + 1;
S[ ] 25 12 17 10
4 15
Top X
Top
S[ ] 25 12 17 10 15 4 15
Top X
Top 70
Algoritma PUSH yang SALAH : S[Top] = X;
Top = Top + 1;
Sebelum : n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 3 15
Top X
Top
Top X
Top
Sesudah : n-1
0 1 2 3 4 5 6 7 8 9
Dengan : Top = Top + 1;
S[ ] 25 12 17 15 4 15
Top X
Top 71
Algoritma dasar untuk PUSH
atau :
S[++Top] = X;
72
1.3.3
Algoritma dasar
untuk
POP
73
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
Top
3
Top X
Pertanyaan :
Dalam keadaan seperti sekarang
Top
2 10
Top X
Jawab :
Keadaan menjadi : Instruksi
yang diperlukan :
Top akan menunjuk kolom no-2
( Top berisi : 2 ) X = S[Top];
Top = Top – 1;
dan isi X = 10,
75
Untuk POP,
Sebelum POP n-1 Pilih algoritma yang benar
0 1 2 3 4 5 6 7 8 9
a. X = S[Top];
S[ ] 25 12 17 10
Top = Top - 1;
Top 3
b. Top = Top - 1;
Top X X = S[Top];
S[ ] 25 12 17 d. S[Top] = X;
Top = Top - 1;
Top 2 10
Top X
?
76
Keadaan sebelum POP
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
Top
Top X
77
n-1
0 1 2 3 4 5 6 7 8 9
Apa instruksinya : ?
78
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
Top
3 10 X = S[Top];
Top X
79
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17
Top
3 10 Untuk kepentingan
Top X ilustrasi,
isi S[Top] tidak
diperlihatkan lagi
80
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17
Top
2 10
Top
mundur ke
Top X
kolom 2
Apa instruksinya : ?
81
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17
Top
2 10
Top
mundur ke
Top X
kolom 2
Top = Top - 1;
82
Untuk POP,
Sebelum POP n-1 Pilih algoritma yang benar
0 1 2 3 4 5 6 7 8 9
a. X = S[Top];
S[ ] 25 12 17 10
Top = Top - 1;
Top 3
b. Top = Top - 1;
Top X X = S[Top];
S[ ] 25 12 17 d. S[Top] = X;
Top = Top - 1;
Top 2 10
Top X
?
83
Untuk POP,
Sebelum POP n-1 Pilih algoritma yang benar
0 1 2 3 4 5 6 7 8 9
a. X = S[Top];
S[ ] 25 12 17 10
Top = Top - 1;
Top 3
b. Top = Top - 1;
Top X X = S[Top];
S[ ] 25 12 17 d. S[Top] = X;
Top = Top - 1;
Top 2 10
Top X
84
Sebelum POP n-1
0 1 2 3 4 5 6 7 8 9 Untuk POP
Algoritma yang benar
S[ ] 25 12 17 10
X = S[Top];
Top 3 Top = Top - 1;
Top X
S[ ] 25 12 17 void POP( )
{ X = S[Top];
Top 2 10
Top X
Top = Top - 1;
}
85
Sebelum POP n-1
0 1 2 3 4 5 6 7 8 9 Pertanyaan :
25 12 17 10
Setelah 10 disimpan di X
S[ ]
apakah nilai 10
S[ ] 25 12 17 10
Pertanyaan :
3 10
Top Setelah Top dipindahkan
Top X menunjuk S[2]
Setelah POP apakah nilai 10
n-1
0 1 2 3 4 5 6 7 8 9 masih ada dalam S[3] ?
S[ ] 25 12 17
Jawab :
Top 2 10
86
Top X
Sebelum POP n-1
0 1 2 3 4 5 6 7 8 9 Pertanyaan :
25 12 17 10
Setelah 10 disimpan di X
S[ ]
apakah nilai 10
S[ ] 25 12 17 10
Pertanyaan :
3 10
Top Setelah Top dipindahkan
Top X menunjuk S[2]
Setelah POP apakah nilai 10
n-1
0 1 2 3 4 5 6 7 8 9 masih ada dalam S[3] ?
S[ ] 25 12 17
Jawab : masih ada
tapi untuk keperluan
Top 2 10 ilustrasi, nilainya dihapus
87
Top X
Algoritma POP yang benar : X = S[Top];
Sebelum POP n-1 Top = Top - 1;
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 3
Top X
Top
Kita Ulangi
88
Algoritma POP yang benar : X = S[Top];
Sebelum POP n-1 Top = Top - 1;
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 3
Top X
Top
n-1
0 1 2 3 4 5 6 7 8 9 Dengan : X=S[Top];
S[ ] 25 12 17 10 3 10
Top X
Top
89
Algoritma POP yang benar : X = S[Top];
Sebelum POP n-1 Top = Top - 1;
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 3
Top X
Top
n-1 Dengan : X=S[Top];
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 3 10
Top X
Top
n-1
Dengan : Top = Top -1;
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 2 10
Top X
Top
90
Contoh bila ditulis
Algoritma dasar untuk POP
dalam sebuah fungsi
atau : X = S[Top];
Top--;
atau : X = S[Top--];
91
Algoritma POP yang SALAH : Top = Top - 1;
n-1 X = S[Top];
Sebelum POP
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 3
Top X
Top
n-1 Dengan : Top = Top -1;
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10 2
Top X
Top
S[ ] 25 12 17 10 2 17
Top X
Top
Seharusnya yang diisikan ke X adalah nilai 10
92
a) Proses Awal
b) Proses PUSH
void POP(void)
{ X = S[Top];
Top = Top - 1;
} 93
#include<stdio.h> void AWAL(void)
void AWAL (void); {
void PUSH(void); Top = -1;
void POP(void); }
define n 10
int S[n]; void PUSH (void)
int Top, X; { Top = Top + 1;
S[Top] = X;
int main( ) }
{ AWAL( );
- void POP (void)
- { X = S[Top];
- Top = Top - 1;
scanf(“%i”, &X); }
PUSH();
-
-
-
Semua variabel bersifat
POP( ); GLOBAL
printf(“%i”, X);
-
-
} 94
95
//ALGO2-1a.cpp Dev-C++5.11
#include<stdio.h>
#define n 10
int S[n];
int Top, X; int main( )
{ AWAL( );
void AWAL ( ) scanf("%i", &X);
{ PUSH();
Top = -1; POP( );
} printf("\n isi Stack : %i", X);
void PUSH( ) }
{ Top = Top + 1;
S[Top] = X;
}
void POP( )
{ X = S[Top];
Top = Top - 1;
}
96
Ilustrasi Stack.
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10
Top 3
Top X
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] X X X X
Top
97
1.4 Kondisi Stack.
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
98
Kondisi Stack.
a. KOSONG
b. PENUH
lawannya
lawannya
c. BISA DIISI
d. ADA ISINYA
99
Kondisi Stack.
Kalau KOSONG
a. KOSONG
Berarti
TIDAK ADA ISINYA
b. PENUH
lawannya
lawannya
c. BISA DIISI
d. ADA ISINYA
100
Kondisi Stack.
c. BISA DIISI
d. ADA ISINYA
101
Kondisi Stack.
a. KOSONG
b. PENUH
lawannya
lawannya
c. BISA DIISI
102
Kondisi Stack.
a. KOSONG
b. PENUH
lawannya
lawannya
c. BISA DIISI
103
Kondisi Stack.
n-1 Kondisi Stack :
0 1 2 3 4 5 6 7 8 9
a. KOSONG
1
b. PENUH
Top
c. BISA DIISI
n-1
d. ADA ISINYA
0 1 2 3 4 5 6 7 8 9
2 X X X X
Top
n-1
0 1 2 3 4 5 6 7 8 9
3 X X X X X X X X X X
Top 104
Kondisi Stack.
n-1 Kondisi Stack :
0 1 2 3 4 5 6 7 8 9
1 a. KOSONG
Gambar : ?
Top
b. PENUH
n-1
Gambar : ?
0 1 2 3 4 5 6 7 8 9
2 X X X X
c. BISA DIISI
Gambar : ?
Top
Top 105
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
1 a. KOSONG
Gambar : 1
Top
b. PENUH
n-1
Gambar : ?
0 1 2 3 4 5 6 7 8 9
2 X X X X
c. BISA DIISI
Gambar : ?
Top
Top 106
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
1 a. KOSONG
Gambar : 1
Top
b. PENUH
n-1 3
Gambar :
0 1 2 3 4 5 6 7 8 9
2 X X X X
c. BISA DIISI
Gambar : ?
Top
Top 107
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
1 a. KOSONG
Gambar : 1
Top
b. PENUH
n-1 3
Gambar :
0 1 2 3 4 5 6 7 8 9
2 X X X X
c. BISA DIISI
Gambar :
1 2
Top
Top 108
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
1 a. KOSONG
Gambar : 1
Top
b. PENUH
n-1 3
Gambar :
0 1 2 3 4 5 6 7 8 9
2 X X X X
c. BISA DIISI
Gambar :
1 2
Top
Top 109
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
cirinya
1
a. KOSONG : ?
Top 1
n-1
0 1 2 3 4 5 6 7 8 9 b. PENUH : ?
2 X X X X 3
Top
110
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
cirinya
1
a. KOSONG : Top = -1
Top 1
n-1 b. PENUH : ?
0 1 2 3 4 5 6 7 8 9
2 X X X X 3
Top
111
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
cirinya
1
a. KOSONG : Top = -1
Top
1
n-1
0 1 2 3 4 5 6 7 8 9 b. PENUH : Top = n-1
2 X X X X 3
Top
112
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
cirinya
1
a. KOSONG : Top = -1
Top
1
Top
113
Kondisi Stack.
n-1
Kondis Stack :
0 1 2 3 4 5 6 7 8 9
cirinya
1
a. KOSONG : Top = -1
Top
1
Top
Kondisi Stack.
n-1
0 1 2 3 4 5 6 7 8 9
X X X X
Top
a. KOSONG Top = -1
115
Kondisi Stack.
ciri
Kondisi Stack Ilustrasi gambar
(posisi Top)
n-1
0 1 2 3 4 5 6 7 8 9
1
n-1
0 1 2 3 4 5 6 7 8 9
Top
2 X X X X
Top n-1
0 1 2 3 4 5 6 7 8 9
3 X X X X X X X X X X
Top 116
1.5
Algoritma
PUSH dan POP
yang lengkap.
117
1.5.1 Algoritma yang lengkap
untuk proses PUSH
0 1 2 3 4 5 6 7 8
n-1
9
Soal :
Bila ada instruksi PUSH
X X X X maka akan di isi di elemen
nomor : ?
Top
118
0 1 2 3 4 5 6 7 8
n-1
9
Soal :
Bila ada instruksi PUSH
X X X X maka akan di isi di elemen
nomor : ?
Top
n-1
0 1 2 3 4 5 6 7 8 9
Jawab :
X X X X Bila ada instruksi PUSH
maka akan di isi di elemen
Top nomor : 4
119
n-1
0 1 2 3 4 5 6 7 8 9
Bila ada instruksi PUSH
X X X X maka akan diisi di elemen
nomor : 4
Top
n-1
0 1 2 3 4 5 6 7 8 9
Dalam kondisi PENUH
X X X X X X X X X X Bolehkah melakukan PUSH ?
Top Jawab : ?
120
n-1
0 1 2 3 4 5 6 7 8 9
Bila ada instruksi PUSH
X X X X maka akan d isi di elemen
nomor : 4
Top
n-1
0 1 2 3 4 5 6 7 8 9
Dalam kondisi PENUH
X X X X X X X X X X Dapatkah melakukan PUSH ?
121
Ilustrasi Stack
n-1
0 1 2 3 4 5 6 7 8 9
X X X X
Top
a. apakah KOSONG
b. apakah PENUH ?
Pilih salah satu
c. apakah BISA DIISI
jawaban
d. apakah ADA ISINYA
122
Ilustrasi Stack
n-1
0 1 2 3 4 5 6 7 8 9
X X X X
Top
123
Algoritma yang lengkap
untuk proses PUSH
void PUSH( )
{ if ( BISA_DIISI )
{ Top = Top + 1;
S[Top] = X;
}
else
printf( “Stack Penuh”);
}
Perkataan : “ BISA_DIISI “
Dapat merupakan nilai return dari
sebuah Fungsi ‘ BISA DIISI ‘ , atau sebuah
penyataan logika yang bernilai TRUE
atau FALSE
124
void PUSH( )
Bila BISA DIISI
{ if ( Top < n-1 )
{ Top = Top + 1; lakukan PUSH
S[Top] = X;
} Top < n-1
else Bernilai TRUE
atau FALSE
printf( “Stack Penuh”);
}
125
Algoritma yang lengkap
untuk proses POP
void POP( )
{ if ( ADA_ISINYA )
{ Top = Top + 1;
S[Top] = X;
}
else
printf( “Stack Penuh”);
}
Perkataan : “ ADA_ISINYA “
Dapat merupakan nilai return dari
sebuah Fungsi ‘ ADA_ISINYA ‘ , atau
sebuah penyataan logika yang bernilai
TRUE atau FALSE
126
void POP( )
Bila ADA ISI nya
{ if ( Top > -1 )
{ X = S[Top]; lakukan POP
Top = Top - 1;
} Top > -1 atau Top >= 0
else Bernilai TRUE
atau FALSE
printf( “Stack Kosong”);
}
atau
void POP( d) Bila KOSONG
{ if ( Top == -1 ) jangan POP
printf( “Stack Kosong”);
else
else lakukan POP
{ X = S[Top];
Top == -1 atau Top < 0
Top = Top - 1;
Bernilai TRUE
}
atau FALSE
}
127
1. Pada Single Stack, algoritma dasar
untuk PUSH adalah :
C. D. if(Top > -1 )
if(Top > 0 )
{ X = S[Top]; { S[Top] = X;
Top = Top - 1; Top = Top + 1;
} }
5. Niat menginput 12 buah data tambahan dan menyimpannya ke
Single Stack, bila Stack masih dapat menampung tambahan 12
buah data. Tapi bila Stack tidak dapat menampung tambahan 12
buah data baru, maka cukup menginput dan mengisi ke Stack
seadanya tempat yang tersedia sampai Stack penuh.
Algoritma yang benar untuk maksud diatas adalah :
A. B. C. D.
while(Top1 > -1) while(Top1 > -1) while(Top1 > -1) while(Top1 > -1)
{ X = S1[Top1]; { X = S1[Top1]; { X = S1[Top1]; { X = S1[Top1];
Top1=Top1 - 1; Top1=Top1 - 1; Top1=Top1 - 1; Top1=Top1 - 1;
if( X < 60 ) if( X < 60 ) if( X < 60 ) if( X < 60 )
{ Top2 = Top2 + 1; { Top3 = Top3 + 1; { Top3 = Top3 + 1; { Top2 = Top2 + 1;
S2[Top2] = X; S3[Top3] = X; S3[Top3] = X; S2[Top2] = X;
} } } }
else else else else
{ Top2 = Top2 + 1; { Top3 = Top3 + 1; { Top2 = Top2 + 1; { Top3 = Top3 + 1;
S2[Top2] = X; S3[Top3] = X; S2[Top2] = X; S3[Top3] = X;
} } } }
} } } }
While(Top3 > -1) While(Top3 > -1) While(Top3 > -1) While(Top3 > -1)
{ X=S3[Top3]; { X=S3[Top3]; { X=S3[Top3]; { X=S3[Top3];
Top3 = Top3 -1; Top3 = Top3 -1; Top3 = Top3 -1; Top3 = Top3 -1;
Top1 = Top1 + 1; Top1 = Top1 + 1; Top1 = Top1 + 1; Top1 = Top1 + 1;
S1[Top1] = X; S1[Top1] = X; S1[Top1] = X; S1[Top1] = X;
} } } }
Contoh Soal UTS
( Hanya untuk dipelajari
tidak untuk dikerjakan
sekarang )
0 1 2 3 4 5 6 n-1
Soal-1. X X X X
Untuk Stack yang
diilustrasikan pada
Gambar yang diberikan :
Top
1.1. Sebutkan ciri bahwa Stack :
a. Kosong
b. Penuh
c. Bisa diisi
d. Ada isinya
Halaman : 58 Halaman : 14
143
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 7
6 62 6
5 74 5
4 80 4
3 95 3
2 53 2
1 70 TopB 1
0 65 0
-1 A -1 B
Gambar-2.11a
144
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.
TopA TopB
7 7 7 7
6 62 6 6 6 65
5 74 5 5 5 70
4 80 4 4 4 53
3 95 3 3 3 95
2 53 2 2 2 80
1 70 TopB 1 TopA 1 1 74
0 65 0 0 0 62
-1 A -1 B -1 A -1
Gambar-2.11a Gambar-2.11b
Halaman : 58 Halaman : 14
SEBELUM SESUDAH
7 7 7 7
TopA TopB
6 62 6 6 6 65
5 74 5 5 5 70
4 80 4 4 4 53
3 95 3 3 3 95
2 53 2 2 2 80
1 70 1 1 1 74
0 65 0 0 0 62
TopB
-1 A -1 B TopA
-1 A -1 B
146
PROSES
7 7
TopA
6 62 6
5 74 5
4 80 4
3 95 3
2 53 2
1 70 1
0 65 0
-1 A TopB
-1 B
147
PROSES X = A[TopA];
TopA = TopA – 1;
62
X
7 7
6 6
TopA
5 74 5
4 80 4
3 95 3
2 53 2
1 70 1
0 65 0
-1 A TopB
-1 B
148
PROSES TopB = TopB + 1;
B[TopB] = X;
7 7
6 6
TopA
5 74 5
4 80 4
3 95 3
2 53 2
1 70 1
TopB
0 65 0 62
-1 A -1 B
149
PROSES X = A[TopA];
TopA = TopA – 1;
74
X
7 7
6 6
5 5
TopA
4 80 4
3 95 3
2 53 2
1 70 1
TopB
0 65 0 62
-1 A -1 B
150
PROSES TopB = TopB + 1;
B[TopB] = X;
7 7
6 6
5 5
TopA
4 80 4
3 95 3
2 53 2
70 TopB 74
1 1
0 65 0 62
-1 A -1 B
151
PROSES X = A[TopA];
TopA = TopA – 1;
80
X
7 7
6 6
5 5
4 4
TopA
3 95 3
2 53 2
70 TopB 74
1 1
0 65 0 62
-1 A -1 B
152
PROSES TopB = TopB + 1;
B[TopB] = X;
7 7
6 6
5 5
4 4
TopA
3 95 3
TopB
2 53 2 80
1 70 1 74
0 65 0 62
-1 A -1 B
153
PROSES X = A[TopA];
TopA = TopA – 1;
95
X
7 7
6 6
5 5
4 4
3 3
TopA TopB
2 53 2 80
1 70 1 74
0 65 0 62
-1 A -1 B
154
PROSES TopB = TopB + 1;
B[TopB] = X;
7 7
6 6
5 5
4 4
TopB 95
3 3
TopA
2 53 2 80
1 70 1 74
0 65 0 62
-1 A -1 B
155
PROSES X = A[TopA];
TopA = TopA – 1;
53
X
7 7
6 6
5 5
4 4
TopB 95
3 3
2 2 80
TopA 70 74
1 1
0 65 0 62
-1 A -1 B
156
PROSES TopB = TopB + 1;
B[TopB] = X;
7 7
6 6
5 5
TopB
4 4 53
3 3 95
2 2 80
TopA 70 74
1 1
0 65 0 62
-1 A -1 B
157
PROSES X = A[TopA];
TopA = TopA – 1;
70
X
7 7
6 6
5 5
TopB
4 4 53
3 3 95
2 2 80
1 1 74
TopA
0 65 0 62
-1 A -1 B
158
PROSES TopB = TopB + 1;
B[TopB] = X;
7 7
6 6
TopB
5 5 70
4 4 53
3 3 95
2 2 80
1 1 74
TopA
0 65 0 62
-1 A -1 B
159
PROSES X = A[TopA];
TopA = TopA – 1;
65
X
7 7
6 6
TopB
5 5 70
4 4 53
3 3 95
2 2 80
1 1 74
0 0 62
TopA
-1 A -1 B
160
PROSES TopB = TopB + 1;
B[TopB] = X;
65
X
7 7
TopB
6 6 65
5 5 70
4 4 53
3 3 95
2 2 80
1 1 74
0 0 62
TopA
-1 A -1 B
TopA
7 7 7
6 62 6 6
5 74 5 5
4 80 4 4
3 95 3 3
2 53 2 2
1 70 TopB 1 TopC 1
0 65 0 0
-1 A -1 B -1 C
Gambar-2.12a
Halaman : 58 Halaman : 14
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 7 7 7 7 7
6 62 6 6 6 6 62 6
5 74 5 5 5 5 74 5
4 80 4 4 4 4 80 4
3 95 3 3 3 3 95 3
2 53 2 2 2 2 53 2
1 70 TopB 1 TopC 1 TopA 1 1 70 TopC 1
0 65 0 0 0 0 65 0
-1 A -1 B -1 C -1 A -1 B -1 C
Gambar-2.12a Gambar-2.12b
164
Halaman : 58 Halaman : 14
SEBELUM
7 7 7
TopA
6 62 6 6
5 74 5 5
4 80 4 4
3 95 3 3
2 53 2 2
1 70 1 1
0 65 0 0
-1 A TopB
-1 B TopC
-1 C
165
SESUDAH
7 7 7
TopB
6 6 62 6
5 5 74 5
4 4 80 4
3 3 95 3
2 2 53 2
1 1 70 1
0 0 65 0
TopA
-1 A -1 B TopC
-1 C
166
SEBELUM
7 7 7
TopA
6 62 6 6
5 74 5 5
4 80 4 4
3 95 3 3
2 53 2 2
1 70 1 1
0 65 0 0
-1 A TopB
-1 B TopC
-1 C
167
SESUDAH
7 7 7
TopA TopB
6 62 6 62 6
5 74 5 74 5
4 80 4 80 4
3 95 3 95 3
2 53 2 53 2
1 70 1 70 1
0 65 0 65 0
-1 A -1 B TopC
-1 C
168
PROSES Tahap-1.
Memindahkan seluruh
X isi Stak A ke Stack C
7 7 7
TopA
6 62 6 6
5 74 5 5
4 80 4 4
3 95 3 3
2 53 2 2
1 70 1 1
0 65 0 0
-1 A TopB
-1 B TopC
-1 C
169
PROSES Tahap-1.
Bagaimana
X
programnya
7 7 7
TopC
6 6 6 65
5 5 5 70
4 4 4 53
3 3 3 95
2 2 2 80
1 1 1 74
0 0 0 62
TopA
-1 A TopB
-1 B -1 C
170
PROSES Tahap-1.
TopC = TopC + 1;
7 7 7 C[TopC] = X;
TopC
6 6 6 65 }
5 5 5 70
4 4 4 53 Selama Stack A
masih ada isinya
3 3 3 95
2 2 2 80 Simpan (PUSH)
1 1 1 74 di Stack C
0 0 0 62
TopA
-1 A TopB
-1 B -1 C
Ambil (POP)
isi Stack A
171
PROSES Tahap-2.
Memindahkan seluruh
X isi Stak C ke Stack B
7 7 7
TopC
6 6 6 65
5 5 5 70
4 4 4 53
3 3 3 95
2 2 2 80
1 1 1 74
0 0 0 62
TopA
-1 A TopB
-1 B -1 C
172
PROSES Tahap-2.
Bagaimana
X
programnya
7 7 7
TopB
6 6 62 6
5 5 74 5
4 4 80 4
3 3 95 3
2 2 53 2
1 1 70 1
0 0 65 0
TopA
-1 A -1 B TopC
-1 C
173
PROSES Tahap-2.
TopB = TopB + 1;
7 7 7 B[TopB] = X;
TopB
6 6 62 6 }
5 5 74 5
4 4 80 4 Selama Stack C
masih ada isinya
3 3 95 3
2 2 53 2 Simpan (PUSH)
1 1 70 1 di Stack B
0 0 65 0
TopA
-1 A -1 B TopC
-1 C
Ambil (POP)
isi Stack C
174
175
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 7 7
6 62 6 6
5 74 5 5
4 80 4 4
3 95 3 3
2 53 2 2
1 70 TopB 1 TopC 1
0 65 0 0
-1 A -1 B -1 C
Gambar-2.13 a
176
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 7 7 7 7 7
6 62 6 6 6 6 6
5 74 5 5 5 5 5
4 80 4 4 4 4 4
3 95 3 3 3 74 3 3
2 53 2 2 2 80 2 62 2
1 70 TopB 1 TopC 1 TopA 1 95 1 53 TopC 1
0 65 0 0 0 70 0 65 0
-1 A -1 B -1 C -1 A -1 B -1 C
Gambar-2.13a Gambar-2.13b
177
4. Sudah ada dua buah stack SA dan SB
yang dibuat dengan int SA[20] dan
SB[20], belum ada isinya. Penunjuk data TopA
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 TopB 1 TopC 1
0 59 0 0
-1 A -1 B -1 C
Gambar-2.16a 179
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 1 55 TopC 1
0 59 0 0 0 0 53 0
-1 -1 -1 C -1 -1 -1 C
A B A B
Gambar-2.16a Gambar-2.16a
180
Catatan : Semua proses, harus mengikuti prinsip proses stack PUSH dan POP
181
SEBELUM
7 7 7
Top1 6 17 6 6
5 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 0 0
-1 S1 Top2 -1 S2 Top3 -1 S3
182
SESUDAH
7 7 7
6 Top2 6 33 6
5 5 27 5
4 4 25 4
3 3 17 3
2 2 15 2
1 1 12 1
0 0 5 0
Top1 -1 S1 -1 S2 Top3 -1 S3
183
PROSES
7 7 7
Top1 6 17 6 6
5 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 0 0
-1 S1 Top2 -1 S2 Top3 -1 S3
184
PROSES
17
X
7 7 7
6 6 6
Top1 5 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 0 0
-1 S1 Top2 -1 S2 Top3 -1 S3
POP S1
185
PROSES
17
X
7 7 7
6 6 6
Top1 5 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 0 0
-1 S1 Top2 -1 S2 Top3 -1 S3
PUSH ke S2
186
PROSES
7 7 7
6 6 6
Top1 5 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 17 0
-1 S1 -1 S2 Top3 -1 S3
PUSH ke S2
187
5
X
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 17 0
-1 S1 -1 S2 Top3 -1 S3
POP lagi S1
188
PROSES
5
X
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 17 0
-1 S1 -1 S2 Top3 -1 S3
5
X
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 17 0
-1 S1 -1 S2 Top3 -1 S3
5
X Y
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 17 0
-1 S1 -1 S2 Top3 -1 S3
5 17
X Y
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 0 0
-1 S1 Top2 -1 S2 Top3 -1 S3
POP S2
192
PROSES
5
X Y
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 0 Top3 0 17
-1 S1 Top2 -1 S2 -1 S3
PUSH S3
193
PROSES
5
X Y
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 0 Top3 0 17
-1 S1 Top2 -1 S2 -1 S3
X Y
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 5 Top3 0 17
-1 S1 -1 S2 -1 S3
195
X Y
7 7 7
6 6 6
5 5 5
Top1 4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 5 Top3 0 17
-1 S1 -1 S2 -1 S3
7 7 7
6 6 6
Top1 5 5 5
4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 5 Top3 0 17
-1 S1 -1 S2 -1 S3
7 7 7
6 6 6
5 5 5
Top1 4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 5 Top3 0 17
-1 S1 -1 S2 -1 S3
7 7 7
6 6 6
5 5 5
Top1 4 33 4 4
3 25 3 3
2 12 2 2
1 15 1 1
0 27 Top2 0 5 0
-1 S1 -1 S2 Top3 -1 S3
7 7 7
6 6 6
5 5 5
Top1 4 33 4 4
3 25 3 3
2 12 2 2
1 15 Top2 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
7 7 7
6 6 6
5 5 5
Top1 4 33 4 4
3 25 3 3
2 12 2 2
1 15 Top2
1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
7 7 7
6 6 6
5 5 5
Top1 4 33 4 4
3 25 3 3
2 12 2 2
1 15 Top2 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
7 7 7
6 6 6
5 5 5
4 4 4
Top1 3 25 3 3
2 12 2 2
1 15 Top2 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
7 7 7
6 6 6
5 5 5
4 4 4
Top1 3 25 3 3
2 12 2 2
1 15 Top2 -1
1 17 1
0 27 0 5 0
-1 S1 S2 Top3 -1 S3
7 7 7
6 6 6
5 5 5
4 4 4
Top1 3 25 3 3
2 12 2 2
1 15 Top2 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
7 7 7
6 6 6
5 5 5
4 4 4
Top1 3 25 3 3
2 12 2 2
1 15 Top2 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
7 7 7
6 6 6
5 5 5
4 4 4
Top1 3 25 3 3
2 12 Top2 2 33 2
1 15 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
208
209
X Y
7 7 7
6 6 6
5 5 5
4 4 4
Top1 3 25 3 3
2 12 Top2 2 33 2
1 15 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
210
25
X Y
7 7 7
6 6 6
5 5 5
4 4 4
3 3 3
Top1 2 12 Top2 2 33 2
1 15 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
211
25
X Y
7 7 7
6 6 6
5 5 5
4 4 4
3 3 3
Top1 2 12 Top2 2 33 2
1 15 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
212
25
X Y
7 7 7
6 6 6
5 5 5
4 4 4
3 3 3
Top1 2 12 2 2
1 15 Top2 1 17 1
0 27 0 5 Top3 0 33
-1 S1 -1 S2 -1 S3
7 7 7
6 6 6
5 5 5
4 4 4
3 3 3
Top1 2 12 Top2 2 25 2
1 15 1 17 1
0 27 0 5 Top3 0 33
-1 S1 -1 S2 -1 S3
PUSH X ke S2
214
X Y
7 7 7
6 6 6
5 5 5
4 4 4
3 Top2 3 33 3
Top1 2 12 2 25 2
1 15 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
Kembalikan isi S3 ke S2
215
216
X Y
7 7 7
6 6 6
5 5 5
4 4 4
3 Top2 3 33 3
Top1 2 12 2 25 2
1 15 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
Kembalikan isi S3 ke S2
217
12
X Y
7 7 7
6 6 6
5 5 5
4 4 4
3 Top2 3 33 3
2 2 25 2
Top1 1 15 1 17 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
218
12
X Y
7 7 7
6 6 6
5 5 5
4 4 4
3 3 3
2 2 Top3 2 17
Top1 1 15 1 1 25
0 27 Top2 0 5 0 33
-1 S1 -1 S2 -1 S3
219
X Y
7 7 7
6 6 6
5 5 5
4 4 4
3 3 3
2 2 Top3 2 17
Top1 1 15 Top2 1 12 1 25
0 27 0 5 0 33
-1 S1 -1 S2 -1 S3
220
X Y
7 7 7
6 6 6
5 5 5
4 Top2 4 33 4
3 3 25 3
2 2 17 2
Top1 1 15 1 12 1
0 27 0 5 0
-1 S1 -1 S2 Top3 -1 S3
221