Download - 01 Single Stack
1
Fakultas Teknologi Informasi
Universitas Budi Luhur
Kurikulum
2
U m u m
3
Buku Literatur
4
Buku Literatur
5
Buku Literatur
6
materi
1. Stack
2. Queue
3. Linked List
4. Tree
5. Graph
6. Search & Sort
7
. Stack
. Queue
. Tree
. Graph
Pokok Pembahasan
8
Stack
Queue
Tree
Graph
linear
nonlinear
Array
Linked-List
(statis)
(dinamis)
struktur Peng-alokasi-anmemory
Satu dimensi
Dua dimensi
Linear
NonLinear
StackQueueTree
Graph
StackQueue
TreeGraph
9
6.3 & 7.3NESTED LOOP
STACK
10
STACK( TUMPUKAN )
11
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.
( Yedidyah L, Moshe J. A., and Aaron M. Tenenbaum; Data Structures Using C and C++)
insert
delete
7
6
5
4
3
2
1
12
Buku-4
Buku-3
Buku-2
Buku-1
4
3
2
1
1
2
3
4
Top
Meja
NomorUrut Masuk(PUSH)
Nomor UrutKeluar (POP)
1. Single Stack. Stack Tunggal, satu stack dalam satu collection
1.1 Ilustrasi Single Stack.
13
Dalam struktur STACK, digunakan
istilah :
- PUSH untuk : Simpan, atau Masuk,
atau
Insert, atau Tulis.
- POP untuk : Ambil, atau Keluar, atau
Delete, atau Baca, atau
HapusPrinsip atau Konsep prosesnya disebut :
L I F O ( Last In First Out )
14
1.2 Representasi Single Stack menggunakan Array Satu Dimensi.
0 1 2 3 4 5 6 7 8 9
misal n = 10n-1
Top
Top X
3
25 12 17 10 S[ ]
1.2.1 Ilustrasi Single Stack menggunakan Array Satu Dimensi
#define n 10----int S[n];int Top, X;
misal dibuat dengan :
15
0 1 2 3 4 5 6 7 8 9
n-1
Top
Top X
3
25 12 17 10 S[ ]
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah PUSH ( Isi, Masuk, Simpan)
maka akan diisi di elemen nomor : ?dan Top akan menunjuk elemen nomor : ?
PUSHPOP
16
0 1 2 3 4 5 6 7 8 9
n-1
Top
Top X
3
25 12 17 10 S[ ]
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah POP ( Keluar, Ambil)
maka akan diambil isi elemen nomor : ?dan Top akan menunjuk elemen nomor : ?
PUSHPOP
17
Ilustrasi Stack.
0 1 2 3 4 5 6 7 8 9
n-1
Top
25 12 17 10 S[ ]
Top
X X X X S[ ]
Top X
3
Diilustrasikan sebagai berikut :
0 1 2 3 4 5 6 7 8 9
n-1
18
LIFO (Last In First Out)
a. AWAL (Inisialisasi)b. PUSH (Insert, Masuk, Simpan, Tulis)c. POP (Delete, Keluar, Ambil , Baca / Hapus)
1.2.2 Prinsip / Konsep Proses pada Stack
1.2.3 Macam Proses pada Stack
19
void AWAL(void){ Top = -1;}
a) Proses AWAL
Catatan :
Untuk memudahkan pembuatan program, maka array untuk Stack dan beberapa variabel yang terkait dibuat bersifat Glabal
0 1 2 3 4 5 6 7 8 9
n-1
Top Top X
-1
S[ ]
20
Algoritma dasaruntuk
PUSH
21
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah PUSH (Isi, Masuk, Simpan)
maka akan diisi di elemen nomor : ?dan Top akan menunjuk elemen nomor : ?
Top
Top X
3
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
22
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah PUSH (Isi, Masuk, Simpan)
maka akan diisi di elemen nomor : 4dan Top akan menunjuk elemen nomor : 4
Top
Top X
3
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
23
Pilih algoritma yang benaruntuk PUSH
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;
?
Top X
3 15Top
25 12 17 10 S[ ]
Top X
4 15Top
25 12 17 10 15 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1Setelah nilai X diPUSHKe Stack
Sebelum nilai X diPUSHKe Stack
24
A = B; Yang diisi, variabel Aatau variabel B
?
25
A
17
B
A = B;
A B
Sebelum :
Sesudah : ?
25
A = B; Yang diisi adalah : variabel A
25
A
17
B
A = B;
17
A
17
B
Sebelum :
Sesudah :
26
17A
0 1 2 3 4 5
17
Untuk mengisi elemen A[3]Pilih instruksi yang benar :
a.
b.
A[3] = X;
X
X = A[3];
27
Pilih algoritma yang benaruntuk PUSH
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;
?
Top X
3 15Top
25 12 17 10 S[ ]
Top X
4 15Top
25 12 17 10 15 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1Setelah nilai X diPUSHKe Stack
Sebelum nilai X diPUSHKe Stack
28
Pilih algoritma yang benaruntuk PUSH
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;
Top X
3 15Top
25 12 17 10 S[ ]
Top X
4 15Top
25 12 17 10 15 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1Setelah nilai X diPUSHKe Stack
Sebelum nilai X diPUSHKe Stack
29
Untuk PUSH Algoritma yang benar
Top = Top + 1;S[Top] = X;
Top X
3 15Top
25 12 17 10 S[ ]
Top X
4 15Top
25 12 17 10 15 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1Setelah nilai X diPUSHKe Stack
Sebelum nilai X diPUSHKe Stack
30
Top X
3 15
Top
25 12 17 10 S[ ]
Top X
4 15
Top
25 12 17 10 15 S[ ]
Top
25 12 17 10 S[ ]
Top X
4 15
Dengan : Top = Top + 1;
Dengan : S[Top] = X;
Algoritma PUSH yang benar : Top = Top + 1; S[Top] = X;
Sebelum :
Sesudah :
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
31
Algoritma PUSH yang SALAH : S[Top] = X;Top = Top + 1;
Top X
3 15
Top
25 12 17 10 S[ ]
Top X
4 15
Top
25 12 17 15 S[ ]
Top
25 12 17 15 S[ ]
Top X
3 15
Dengan : Top = Top + 1;
Dengan : S[Top] = X;
Sebelum :
Sesudah :
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
32
Algoritma dasar untuk PUSH
Top = Top + 1; S[Top] = X;
Top+= 1; S[Top] = X;
Top++; S[Top] = X;
S[++Top] = X;
atau :
atau :
atau :
33
Algoritma dasaruntuk
POP
34
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
: ?
Top
Top X
3
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
35
Pertanyaan : dalam keadaan seperti sekarang
Kalau ada perintah POP ( Keluar, Ambil)
maka akan diambil isi elemen nomor : 3dan setelah itu Top akan menunjuk elemen nomor
: 2
Top
Top X
3
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
36
Untuk POP,Pilih algoritma yang benar
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;
?
Top X
3Top
25 12 17 10 S[ ]
Top X
2 10Top
25 12 17 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1Setelah POP
Sebelum POP
37
Untuk POP,Pilih algoritma yang benar
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;
Top X
3Top
25 12 17 10 S[ ]
Top X
2 10Top
25 12 17 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1Setelah POP
Sebelum POP
38
Untuk POP Algoritma yang benar
X = S[Top];Top = Top - 1;
Top X
3Top
25 12 17 10 S[ ]
Top X
2 10Top
25 12 17 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1Setelah POP
Sebelum POP
39
Pertanyaan :Setelah 10 disimpan di Xapakah nilai 10
masih ada dalam S[3] ?
Pertanyaan :Setelah Top dipindahkan menunjuk S[2] apakah nilai 10masih ada dalam S[3]
?
Jawab :
Jawab :
Top X
2 10Top
25 12 17 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Setelah POP
Top X
3Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Sebelum POP
3 10Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Isi X
Top X
40
Pertanyaan :Setelah 10 disimpan di Xapakah nilai 10
masih ada dalam S[3] ?
Pertanyaan :Setelah Top dipindahkan menunjuk S[2] apakah nilai 10masih ada dalam S[3]
?
Jawab : masih ada
Jawab : masih adatapi untuk keperluan ilustrasi, nilainya dihapus
Top X
2 10Top
25 12 17 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Setelah POP
Top X
3Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Sebelum POP
3 10Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Isi X
Top X
41
Algoritma POP yang benar : X = S[Top];Top = Top - 1;
Kita Ulangi
Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Sebelum POP
Top X
3
42
Dengan : X=S[Top];
Top X
3
Algoritma POP yang benar : X = S[Top];Top = Top - 1;
Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Sebelum POP
Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Top X
3 10
43
Dengan : X=S[Top];
Top X
3
Algoritma POP yang benar : X = S[Top];Top = Top - 1;
Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1Sebelum POP
Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Top X
3 10
Dengan : Top = Top -1;
Top
25 12 17 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Top X
2 10
44
Algoritma dasar untuk POP
X = S[Top]; Top = Top - 1;
atau :
atau :
atau :
X = S[Top]; Top-=1;
X = S[Top]; Top--;
X = S[Top--];
45
Algoritma POP yang SALAH : Top = Top - 1;X = S[Top];
Dengan : Top = Top -1;
Top X
3
Top
25 12 17 10 S[ ]
Sebelum POP
Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Top X
2
Dengan : X = S[Top];
Top
25 12 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Top X
2 17
46
void PUSH( void){ Top = Top + 1; S[Top] = X;}
void POP(void){ X = S[Top]; Top = Top - 1;}
b) Proses PUSH
c) Proses POP
Catatan :
Semua variabel dibuatbersifat GLOBAL
47
#include<stdio.h>void AWAL (void);void PUSH(void);void POP(void);define n 10int 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 bersifatGLOBAL
48
Ilustrasi Stack.
Diilustrasikan sebagai berikut :
Top X
3Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Top
X X X X S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
49
1.2.4 Kondisi Stack.
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
50
Kondisi Stack.
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
law
an
nya
law
an
nya
51
Kondisi Stack.
Kondisi Stack :
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9
n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
52
Kondisi Stack.
Kondis Stack :
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
Gambar : ?
Gambar : ?
Gambar : ?
Gambar : ?
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9
n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
53
Kondisi Stack.
Kondis Stack :
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
Gambar :
Gambar : ?
Gambar : ?
Gambar : ?
1
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9
n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
54
Kondisi Stack.
Kondis Stack :
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
Gambar :
Gambar :
Gambar : ?
Gambar : ?
1
3
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9
n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
55
Kondisi Stack.
Kondis Stack :
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
Gambar :
Gambar :
Gambar :
Gambar : ?
1
3
1 2Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9
n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
56
Kondisi Stack.
Kondis Stack :
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
Gambar :
Gambar :
Gambar :
Gambar :
1
3
1 2
2 3
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9
n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9
n-1
0 1 2 3 4 5 6 7 8 9
n-1
57
Kondisi Stack.
Kondis Stack :
a. KOSONG : ?
b. PENUH : ?
c. BISA DIISI : ?
d. ADA ISINYA : ?
1
3
1 2
2 3
cirinya
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9 n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9 n-1
0 1 2 3 4 5 6 7 8 9 n-1
58
Kondisi Stack.
Kondis Stack :
a. KOSONG : Top = -1
b. PENUH : ?
c. BISA DIISI : ?
d. ADA ISINYA : ?
1
3
1 2
2 3
cirinya
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9 n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9 n-1
0 1 2 3 4 5 6 7 8 9 n-1
59
Kondisi Stack.
Kondis Stack :
a. KOSONG : Top = -1
b. PENUH : Top = n-1
c. BISA DIISI : ?
d. ADA ISINYA : ?
1
3
1 2
2 3
cirinya
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9 n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9 n-1
0 1 2 3 4 5 6 7 8 9 n-1
60
Kondisi Stack.
Kondis Stack :
a. KOSONG : Top = -1
b. PENUH : Top = n-1
c. BISA DIISI : Top < n-1
d. ADA ISINYA : ?
1
3
1 2
2 3
cirinya
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9 n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9 n-1
0 1 2 3 4 5 6 7 8 9 n-1
61
Kondisi Stack.
Kondis Stack :
a. KOSONG : Top = -1
b. PENUH : Top = n-1
c. BISA DIISI : Top < n-1
d. ADA ISINYA : Top > -1
1
3
1 2
2 3
cirinya
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9 n-1
Top
1
2
3
0 1 2 3 4 5 6 7 8 9 n-1
0 1 2 3 4 5 6 7 8 9 n-1
62
Kondisi Stack.
0 1 2 3 4 5 6 7 8 9
n-1
Top
X X X X
Kondis Stack :a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
cirinya
Top = -1
Top = n-1
Top < n-1
Top > -1
63
Kondisi Stack c i r i(posisi Top)
Ilustrasi gambar
a.
b.
c.
d.
KOSONG tak ada isinya
PENUH tak bisa diisi lagi
BISA DIISI (kebalikan dari PENUH)
ADA ISINYA (kebalikan dari KOSONG)
Top = -1
Top = n-1
Top < n-1
Top > -1
Gambar 1
Gambar 3
Gambar 1 dan 2
Gambar 2 dan 3
1.2.4 Kondisi Stack.
Top
X X X X
Top
X X X X X X X X X X
Top
1
2
3
0 1 2 3 4 5 6 7 8 9 n-1
0 1 2 3 4 5 6 7 8 9 n-1
0 1 2 3 4 5 6 7 8 9 n-1
64
1.2.5 Algoritma PUSH dan POP yang lengkap.
65
a. Algoritma yang lengkap untuk proses PUSH
Bila ada instruksi PUSHmaka akan d isi di elemen
nomor : ?Top
X X X X
0 1 2 3 4 5 6 7 8 9
n-1
66
a. Algoritma yang lengkap untuk proses PUSH
Bila ada instruksi PUSHmaka akan d isi di elemen
nomor : ?
Bila ada instruksi PUSHmaka akan d isi di elemen
nomor : 4
0 1 2 3 4 5 6 7 8 9
n-1
Top
X X X X
Top
X X X X
0 1 2 3 4 5 6 7 8 9
n-1
67
a. Algoritma yang lengkap untuk proses PUSH
Bila ada instruksi PUSHmaka akan diisi di elemen
nomor : 4
Dalam kondisi PENUHBolehkah melakukan PUSH ?
Jawab : ?
0 1 2 3 4 5 6 7 8 9
n-1
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9
n-1
68
a. Algoritma yang lengkap untuk proses PUSH
Bila ada instruksi PUSHmaka akan d isi di elemen
nomor : 4
Dalam kondisi PENUHBolehkah melakukan PUSH ?
Jawab : TIDAK BOLEH
0 1 2 3 4 5 6 7 8 9
n-1
Top
X X X X
Top
X X X X X X X X X X
0 1 2 3 4 5 6 7 8 9
n-1
69
a. Algoritma yang lengkap untuk proses PUSH
Ilustrasi Stack
Bila Stack PENUH, maka Tidak Boleh melakukan PUSHsehingga, sebelum PUSH,perlu dioeriksa apakah Stack dalam keadaan :
a. apakah KOSONG
b. apakah PENUH
c. apakah BISA DIISI
d. apakah ADA ISINYA
?
0 1 2 3 4 5 6 7 8 9
n-1
Top
X X X X
70
a. Algoritma yang lengkap untuk proses PUSH
Bila BISA DIISI
silahkan PUSH
sebaliknya (else)
Bila PENUH jangan PUSH
sebaliknya (else) silahkan PUSH
jangan PUSH
Ilustrasi Stack
0 1 2 3 4 5 6 7 8 9
n-1
Top
X X X X
71
a. Algoritma yang lengkap untuk proses PUSH
void PUSH(void){ if ( BISA DIISI ) { Top = Top + 1; S[Top] = X; } else printf( “Stack Penuh”);}
72
a. Algoritma yang lengkap untuk proses PUSH
void PUSH(void){ if ( Top < n-1 ) { Top = Top + 1; S[Top] = X; } else printf( “Stack Penuh”);}
void PUSH(void){ if ( Top == n-1 ) printf( “Stack Penuh”); else { Top = Top + 1; S[Top] = X; }}
atau
Bila BISA DIISI lakukan PUSH
Bila PENUH
jangan PUSH
else lakukan PUSH
73
b. Algoritma yang lengkap untuk proses POP
void POP(void){ if (Top > -1 ) { X = S[Top]; Top = Top-1; } else printf(“Stack Kosong”);}
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; } }
atau :
Bila ADA ISINYA lakukan POP
Bila KOSONG jangan POP
else lakukan POP
74
1.2.6 Contoh Soal PUSH dan POP .
Baca sendiri di diktat
75
1.3 Aplikasi Stack.
Memeriksa kelengkapan pasangan kurung buka dan kurung tutup suatu arithmetic statement
1.3.1.
A + B * ( C - D) / ( E + F ) BENAR
A + B * ( C - D / ( E + F ) SALAH
Merobah (konversi) bentuk INFIX menjadi bentuk POSTFIX
1.3.2.
A + B + C * D
A + (B + C) * D
A B + C D * +
A B C + D * +
INFIX POSTFIX
Mencatat Return Address oleh Operating System sewaktu menjalankan sebuah program pada pelaksanaan call suatu function.
1.3.3.
76
1.4 Pointer sebagai penunjuk Stack.
a.Menyiapkan Stack dan Pointer :
define n 11-int S[n], *Top, *BatasAtas, *Dasar--Dasar = &S[-1];Top = &S[-1];BatasAtas = &S[n-1];
n-10 1 2 3 4 5 6 7 8 9 10
BatasAtasTop
Dasar
77
n0 1 2 3 4 5 6 7 8 9 10
BatasAtasTop
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);
78
1.5 Representasi Stack menggunakan structure.
Perhatikan contoh berikut ini :
a. Menyiapkan Stack.
#define MAXSTACK 10
typedef char ItemType;
typedef struct StackTag { int Top; ItemType S[MAXSTACK];} StackType;
dibuat 10 elemenS[0] sampai dengan S[9]
tipe : char
b. Initialisasi.
void Intitialize(StackType *P ) { P->Top = -1; }
79
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--]; }
80
X X X X
0 1 2 3 4 5 6 n-1
Top
Soal-I. Untuk Stack yang diilustrasikan pada Gambar diatas :
a. Kosongb. Penuhc. Bisa diisid. Ada isinya
1. Sebutkan ciri bahwa Stack :
2. Tulis algoritma dasar untuk:a. PUSHb. POP
3. Tulis algoritma yang lengkap untuk:a. PUSHb. POP
5. Tulis program (penggalan program) untuk mengeluarkan (POP) isi Stack satu per satu dan mencetaknya, sampai Stack menjadi kosong.
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.
1.6 Soal Latihan Mandiri.
81
6. Bila Stack berisi bilangan integer, maka susun algoritma untuk menghitung dan mencetak total isi Stack tanpa menghapus isi Stack.
8. 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.
7. 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.
82
6. Bila Stack berisi bilangan integer, maka susun algoritma untuk menghitung dan mencetak total isi Stack tanpa menghapus isi Stack.
83
6. Bila Stack berisi bilangan integer, maka susun algoritma untuk menghitung dan mencetak total isi Stack tanpa menghapus isi Stack.
84
6. Bila Stack berisi bilangan integer, maka susun algoritma untuk menghitung dan mencetak total isi Stack tanpa menghapus isi Stack.
Top X
3Top
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
64
Total
85
7. 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.
86
7. 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.
87
7. 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 n-1
Top
X X X X
Top X
3
88
8. 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.
89
8. 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.
90
8. 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
Top
X X X X X X X X X X X X X X X
Top X
14
91
10. 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.
9. 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
9. 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.
93
9. 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.
94
9. 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
Top
X X X X X X X X X X X X X X X
Top X
14
95
9. 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
Top
X X X X X X X X
Top X
7
96
10.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.
97
10.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.
98
10.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
Top
X X X X X X X X
Top X
7
99
10.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
Top
X X X X X X X X X X X X X X X
Top X
14
100
101
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
102
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.
2
103
3 Sudah ada dua buah stack S1, dan S2, yang dibuat dengan int S1[n] dan S2[n]. Stack S1 sudah ada isinya, dan stack S2, belum ada isinya, yang diilustrasikan dengan gambar disebelah kanan ini.
175
33251215270
1
2
3
4
5
6
7
-1 S1
Top1
01
2
3
4
5
6
7
-1 S2Top2
Susun program (penggalan program) untuk mengeluarkan isi stack S1, dan memindahkan isinya ke stack S2, sehingga stack S1 menjadi kosong, dengan ilustrasi seperti gambar disebelah kanan ini.
01
2
3
4
5
6
7
-1 S1Top1
27151225335
1701
2
3
4
5
6
7
-1 S2
Top2
104
4
Sudah ada tiga buah stack S1,S2 dan S3, yang dibuat dengan int S1[n], S2[n] dan S3[n]. Stack S1 sudah ada isinya, dan stack S2 dan S3, belum ada isinya, yang diilustrasikan dengan gambar disebelah kanan ini.
175
33251215270
1
2
3
4
5
6
7
-1 S1
Top1
01
2
3
4
5
6
7
-1 S2Top2
Susun program (penggalan program) untuk mengeluarkan isi stack S1, dan memindahkan isinya ke stack S2, sehingga stack S1 menjadi kosong, dengan ilustrasi seperti gambar disebelah kanan ini. Stack S3 dapat digunakan bilamana diperlukan
01
2
3
4
5
6
7
-1 S1Top1
175
33251215270
1
2
3
4
5
6
7
-1 S2
Top2
01
2
3
4
5
6
7
-1 S3Top3
01
2
3
4
5
6
7
-1 S3Top3
105
5 Sudah ada tiga buah stack S1,S2 dan S3, yang dibuat dengan int S1[n], S2[n] dan S3[n]. Stack S1 sudah ada isinya, dan stack S2 dan S3, belum ada isinya, yang diilustrasikan dengan gambar disebelah kanan ini.
175
33251215270
1
2
3
4
5
6
7
-1 S1
Top1
01
2
3
4
5
6
7
-1 S2Top2
Susun program (penggalan program) untuk mengeluarkan isi stack S1, dan memindahkan isinya ke stack S2, sehingga stack S1 menjadi kosong, dan isi stack S2 urut menaik dengan ilustrasi seperti gambar disebelah kanan ini. Stack S3 dapat digunakan bilamana diperlukan
01
2
3
4
5
6
7
-1 S1Top1
33272517151250
1
2
3
4
5
6
7
-1 S2
Top2
01
2
3
4
5
6
7
-1 S3Top3
01
2
3
4
5
6
7
-1 S3Top3