Transcript 01-Single

Fakultas Teknologi Informasi
Universitas Budi Luhur
Kurikulum
1
Umum
2
Buku Literatur
3
Buku Literatur
4
Buku Literatur
5
materi
1. Stack
2. Queue
3. Linked List
4. Tree
5. Graph
6. Search & Sort
6
Pokok Pembahasan
. Stack
. Queue
. Tree
. Graph
7
struktur
Peng-alokasi-an
memory
Stack
linear
Queue
Array
(statis)
Tree
non
linear
Graph
LinkedList
(dinamis)
Satu
dimensi
Stack
Queue
Tree
Dua
dimensi
Graph
Linear
Stack
Queue
Non
Linear
Tree
Graph
8
STACK
6.3 & 7.3
NESTED LOOP
9
STACK
( TUMPUKAN )
10
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
11
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
12
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 )
13
1.2
Representasi Single Stack menggunakan
Array Satu Dimensi.
1.2.1 Ilustrasi Single Stack menggunakan Array Satu Dimensi
n-1
0
S[ ]
1
2
3
4
5
6
7
8
misal n = 10
9
25 12 17 10
misal dibuat dengan :
Top
3
Top
X
#define n 10
int S[n];
int Top, X;
14
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 PUSH ( Isi, Masuk, Simpan)
maka akan diisi di elemen nomor :
?
dan Top akan menunjuk elemen nomor :
?
15
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
?
: ?
16
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
17
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)
18
a)
Proses AWAL
Catatan :
void AWAL(void)
{
Top
= -1;
}
Untuk
memudahkan
pembuatan
program, maka array untuk Stack
dan
beberapa
variabel
yang
terkait dibuat bersifat Glabal
n-1
0
1
2
3
4
5
6
7
8
9
S[ ]
-1
Top
Top
X
19
Algoritma dasar
untuk
PUSH
20
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 PUSH (Isi, Masuk, Simpan)
maka akan diisi di elemen nomor :
?
dan Top akan menunjuk elemen nomor :
?
21
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 PUSH (Isi, Masuk, Simpan)
maka akan diisi di elemen nomor :
4
dan Top akan menunjuk elemen nomor :
4
22
Sebelum nilai X diPUSH
Ke Stack
0
S[ ]
1
2
3
4
n-1
5
6
7
8
25 12 17 10
Top
0
1
2
3
4
5
6
Top = Top + 1;
S[Top] = X;
15
Top
X
b.
S[Top] = X;
Top = Top + 1;
n-1
c.
Top = Top + 1;
X = S[Top];
d.
X = S[Top];
Top = Top + 1;
7
8
9
25 12 17 10 15
Top
a.
3
Setelah nilai X diPUSH
Ke Stack
S[ ]
9
Pilih algoritma yang benar
untuk PUSH
4
15
Top
X
?
23
A = B;
Sebelum :
Yang diisi, variabel A
atau variabel B
25
17
A
B
?
A = B;
?
Sesudah :
A
B
24
A = B;
Sebelum :
Yang diisi adalah : variabel A
25
17
A
B
A = B;
Sesudah :
17
17
A
B
25
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
26
Sebelum nilai X diPUSH
Ke Stack
0
S[ ]
1
2
3
4
n-1
5
6
7
8
25 12 17 10
Top
0
1
2
3
4
5
6
Top = Top + 1;
S[Top] = X;
15
Top
X
b.
S[Top] = X;
Top = Top + 1;
n-1
c.
Top = Top + 1;
X = S[Top];
d.
X = S[Top];
Top = Top + 1;
7
8
9
25 12 17 10 15
Top
a.
3
Setelah nilai X diPUSH
Ke Stack
S[ ]
9
Pilih algoritma yang benar
untuk PUSH
4
15
Top
X
?
27
Sebelum nilai X diPUSH
Ke Stack
0
S[ ]
1
2
3
4
n-1
5
6
7
8
25 12 17 10
Top
0
1
2
3
4
5
6
Top = Top + 1;
S[Top] = X;
15
Top
X
b.
S[Top] = X;
Top = Top + 1;
n-1
c.
Top = Top + 1;
X = S[Top];
d.
X = S[Top];
Top = Top + 1;
7
8
9
25 12 17 10 15
Top
a.
3
Setelah nilai X diPUSH
Ke Stack
S[ ]
9
Pilih algoritma yang benar
untuk PUSH
4
15
Top
X
28
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
29
Algoritma PUSH yang benar :
Sebelum :
0
S[ ]
1
n-1
2
3
4
5
6
7
8
9
25 12 17 10
Top
0
S[ ]
Top = Top + 1;
S[Top] = X;
1
2
3
n-1
4
5
6
7
8
9
25 12 17 10
Top
Sesudah :
0
S[ ]
1
n-1
2
3
4
25 12 17 10 15
Top
5
6
7
8
9
3
15
Top
X
Dengan : Top = Top + 1;
4
15
Top
X
Dengan : S[Top] = X;
4
15
Top
X
30
Algoritma PUSH yang SALAH :
Sebelum :
0
S[ ]
1
n-1
2
3
4
5
6
7
8
9
25 12 17 10
Top
0
S[ ]
S[Top] = X;
Top = Top + 1;
1
2
3
n-1
4
5
6
7
8
9
25 12 17 15
Top
Sesudah :
0
S[ ]
1
n-1
2
3
4
25 12 17 15
Top
5
6
7
8
9
3
15
Top
X
Dengan : S[Top] = X;
3
15
Top
X
Dengan : Top = Top + 1;
4
15
Top
X
31
Algoritma dasar untuk PUSH
Top = Top + 1;
S[Top] = X;
atau :
atau :
atau :
Top+= 1;
S[Top] = X;
Top++;
S[Top] = X;
S[++Top] = X;
32
Algoritma dasar
untuk
POP
33
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 :
?
34
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
35
Sebelum POP
0
S[ ]
1
n-1
2
3
4
5
6
7
8
25 12 17 10
3
Top
X
Top
Setelah POP
0
S[ ]
9
1
n-1
2
3
4
5
6
7
8
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;
9
25 12 17
Top
Untuk POP,
Pilih algoritma yang benar
2
10
Top
X
?
36
Sebelum POP
0
S[ ]
1
n-1
2
3
4
5
6
7
8
25 12 17 10
3
Top
X
Top
Setelah POP
0
S[ ]
9
1
n-1
2
3
4
5
6
7
8
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;
9
25 12 17
Top
Untuk POP,
Pilih algoritma yang benar
2
10
Top
X
37
Sebelum POP
0
S[ ]
1
n-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
38
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
0
1
2
3
4
5
6
7
n-1
Pertanyaan :
Setelah Top dipindahkan
menunjuk S[2]
apakah nilai 10
9
masih ada dalam S[3]
10
X
Setelah POP
S[ ]
Pertanyaan :
Setelah 10 disimpan di X
apakah nilai 10
masih ada dalam S[3]
3
Top
Top
S[ ]
9
8
25 12 17
Top
?
Jawab :
2
10
Top
X
39
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
0
1
2
3
4
5
6
7
n-1
Pertanyaan :
Setelah Top dipindahkan
menunjuk S[2]
apakah nilai 10
9
masih ada dalam S[3]
10
X
Setelah POP
S[ ]
Pertanyaan :
Setelah 10 disimpan di X
apakah nilai 10
masih ada dalam S[3]
3
Top
Top
S[ ]
9
8
25 12 17
Top
?
Jawab : masih ada
2
10
Top
X
tapi untuk keperluan
ilustrasi, nilainya dihapus
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
Top
X
Kita Ulangi
41
Algoritma POP yang benar :
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
3
Top
Top
S[ ]
9
25 12 17 10
0
1
2
3
25 12 17 10
Top
X = S[Top];
Top = Top - 1;
n-1
4
5
6
7
8
X
Dengan : X=S[Top];
9
3
10
Top
X
42
Algoritma POP yang benar :
n-1
Sebelum POP
0
S[ ]
1
2
3
4
5
6
7
8
3
Top
Top
S[ ]
9
25 12 17 10
0
1
2
3
n-1
4
5
6
7
8
Top
n-1
S[ ]
1
2
25 12 17
Top
3
4
5
6
7
8
X
Dengan : X=S[Top];
9
25 12 17 10
0
X = S[Top];
Top = Top - 1;
3
10
Top
X
Dengan : Top = Top -1;
9
2
10
Top
X
43
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--];
44
Algoritma POP yang SALAH :
Top = Top - 1;
X = S[Top];
Sebelum POP
S[ ]
3
25 12 17 10
Top
Top
0
S[ ]
1
2
3
n-1
4
5
6
7
8
2
Top
Top
n-1
S[ ]
1
2
25 12
3
10
Top
Dengan : Top = Top -1;
9
25 12 17 10
0
X
4
5
6
7
8
X
Dengan : X = S[Top];
9
2
17
Top
X
45
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;
}
46
#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
47
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
0
S[ ]
1
2
3
4
5
6
7
8
9
X X X X
Top
48
1.2.4 Kondisi Stack.
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
49
Kondisi Stack.
lawannya
lawannya
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
50
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
0
2
Kondisi Stack :
1
2
3
4
5
6
7
8
d. ADA ISINYA
9
X X X X
Top
n-1
0
3
1
2
3
X X X X
4
5
6
7
8
9
X X X X X X
Top
51
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
9
1
a. KOSONG
Gambar :
Top
n-1
0
2
1
2
3
4
5
6
7
8
9
X X X X
1
2
3
X X X X
Gambar :
Gambar :
n-1
0
b. PENUH
?
?
c. BISA DIISI
Top
3
Kondis Stack :
4
5
6
7
8
9
?
d. ADA ISINYA
Gambar :
?
X X X X X X
Top
52
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
9
1
a. KOSONG
Gambar :
Top
n-1
0
2
1
2
3
4
5
6
7
8
9
X X X X
1
2
3
X X X X
Gambar :
Gambar :
n-1
0
b. PENUH
1
?
c. BISA DIISI
Top
3
Kondis Stack :
4
5
6
7
8
9
?
d. ADA ISINYA
Gambar :
?
X X X X X X
Top
53
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
9
1
a. KOSONG
Gambar :
Top
n-1
0
2
1
2
3
4
5
6
7
8
9
X X X X
1
2
3
X X X X
Gambar :
Gambar :
n-1
0
b. PENUH
1
3
c. BISA DIISI
Top
3
Kondis Stack :
4
5
6
7
8
9
?
d. ADA ISINYA
Gambar :
?
X X X X X X
Top
54
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
9
1
a. KOSONG
Gambar :
Top
n-1
0
2
1
2
3
4
5
6
7
8
9
X X X X
1
2
3
X X X X
Gambar :
Gambar :
n-1
0
b. PENUH
1
3
c. BISA DIISI
Top
3
Kondis Stack :
4
5
6
7
8
9
1
2
d. ADA ISINYA
Gambar :
?
X X X X X X
Top
55
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
9
1
a. KOSONG
Gambar :
Top
n-1
0
2
1
2
3
4
5
6
7
8
9
X X X X
1
2
3
X X X X
Gambar :
Gambar :
n-1
0
b. PENUH
1
3
c. BISA DIISI
Top
3
Kondis Stack :
4
5
6
7
8
9
1
2
d. ADA ISINYA
Gambar :
2
3
X X X X X X
Top
56
Kondisi Stack.
0
1
2
3
4
5
6
7
8
n-1
9
1
2
1
2
3
4
5
6
7
8
n-1
9
X X X X
Top
0
3
cirinya
a. KOSONG
:
?
b. PENUH
:
?
c. BISA DIISI :
?
1
Top
0
Kondis Stack :
1
2
3
3
1
4
5
6
7
8
2
n-1
9
X X X X X X X X X X
d. ADA ISINYA :
2
?
3
Top
57
Kondisi Stack.
0
1
2
3
4
5
6
7
8
n-1
9
1
2
1
2
3
4
5
6
7
8
n-1
9
X X X X
Top
0
3
cirinya
a. KOSONG
: Top = -1
b. PENUH
:
?
c. BISA DIISI :
?
1
Top
0
Kondis Stack :
1
2
3
3
1
4
5
6
7
8
2
n-1
9
X X X X X X X X X X
d. ADA ISINYA :
2
?
3
Top
58
Kondisi Stack.
0
1
2
3
4
5
6
7
8
n-1
9
1
2
1
2
3
4
5
6
7
8
n-1
9
X X X X
3
a. KOSONG
: Top = -1
b. PENUH
: Top = n-1
1
2
3
3
c. BISA DIISI :
Top
0
cirinya
1
Top
0
Kondis Stack :
1
4
5
6
7
8
2
n-1
9
X X X X X X X X X X
d. ADA ISINYA :
2
?
?
3
Top
59
Kondisi Stack.
0
1
2
3
4
5
6
7
8
n-1
9
1
2
1
2
3
4
5
6
7
8
n-1
9
X X X X
3
a. KOSONG
: Top = -1
b. PENUH
: Top = n-1
1
2
3
3
c. BISA DIISI : Top < n-1
Top
0
cirinya
1
Top
0
Kondis Stack :
1
4
5
6
7
8
2
n-1
9
X X X X X X X X X X
d. ADA ISINYA :
2
?
3
Top
60
Kondisi Stack.
0
1
2
3
4
5
6
7
8
n-1
9
1
2
1
2
3
4
5
6
7
8
n-1
9
X X X X
3
a. KOSONG
: Top = -1
b. PENUH
: Top = n-1
1
2
3
3
c. BISA DIISI : Top < n-1
Top
0
cirinya
1
Top
0
Kondis Stack :
1
4
5
6
7
8
2
n-1
9
X X X X X X X X X X
d. ADA ISINYA : Top > -1
2
3
Top
61
Kondisi Stack.
n-1
0
1
2
3
4
5
6
7
8
9
X X X X
Top
Kondis Stack :
cirinya
a. KOSONG
Top = -1
b. PENUH
Top = n-1
c. BISA DIISI
Top < n-1
d. ADA ISINYA
Top > -1
62
1.2.4 Kondisi Stack.
c i r i
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
0
1
Top
1
2
2
3
4
0
5
1
6
2
7
3
8
4
n-1
9
5
6
7
8
n-1
9
X X X X
Top
3
0
1
2
3
X X X X
4
5
6
7
8
n-1
9
X X X X X X
Top
63
1.2.5
Algoritma PUSH dan POP yang lengkap.
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 d isi di elemen
nomor :
?
Top
65
a. Algoritma yang lengkap untuk proses PUSH
n-1
0
1
2
3
4
5
6
7
8
9
X X X X
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
66
a. Algoritma yang lengkap untuk proses PUSH
n-1
0
1
2
3
4
5
6
7
8
9
X X X X
Bila ada instruksi PUSH
maka akan diisi di elemen
nomor :
4
Top
n-1
0
1
2
3
X X X X
4
5
6
7
8
9
X X X X X X
Top
Dalam kondisi PENUH
Bolehkah melakukan PUSH ?
Jawab :
?
67
a. Algoritma yang lengkap untuk proses PUSH
n-1
0
1
2
3
4
5
6
7
8
9
X X X X
Bila ada instruksi PUSH
maka akan d isi di elemen
nomor :
4
Top
n-1
0
1
2
3
X X X X
4
5
6
7
8
9
X X X X X X
Top
Dalam kondisi PENUH
Bolehkah melakukan PUSH ?
Jawab : TIDAK BOLEH
68
a. Algoritma yang lengkap untuk proses PUSH
Ilustrasi Stack
0
1
2
3
n-1
4
5
6
7
8
9
X X X 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
69
a. Algoritma yang lengkap untuk proses PUSH
Ilustrasi Stack
0
1
2
3
4
n-1
5
6
7
8
9
X X X X
Top
Bila BISA DIISI
silahkan PUSH
sebaliknya (else)
Bila PENUH
jangan PUSH
jangan PUSH
sebaliknya (else)
silahkan PUSH
70
a. Algoritma yang lengkap untuk proses PUSH
void PUSH(void)
{ if ( BISA DIISI )
{ Top = Top + 1;
S[Top] = X;
}
else
printf( “Stack Penuh”);
}
71
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
72
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
73
1.2.6
Contoh Soal PUSH dan POP .
Baca sendiri di diktat
74
1.3
Aplikasi Stack.
1.3.1. Memeriksa kelengkapan pasangan kurung buka dan
kurung tutup suatu arithmetic statement
1.3.2.
A + B * ( C - D) / ( E + F )
BENAR
A + B * ( C - D / ( E + F )
SALAH
Merobah (konversi) bentuk INFIX menjadi
bentuk POSTFIX
INFIX
POSTFIX
A + B + C * D
A B + C D * +
A + (B + C) * D
A B C + D * +
1.3.3. Mencatat Return Address oleh Operating System
sewaktu menjalankan sebuah program pada pelaksanaan
call suatu function.
75
1.4
Pointer sebagai penunjuk Stack.
a. Menyiapkan Stack dan Pointer :
0
Top
1
2
3
4
5
6
7
8
9
n-1
10
BatasAtas
Dasar
define n 11
int S[n], *Top, *BatasAtas, *Dasar
Dasar = &S[-1];
Top = &S[-1];
BatasAtas = &S[n-1];
76
0
1
2
3
4
5
6
7
8
9
Top
n
10
BatasAtas
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);
77
1.5
Representasi Stack menggunakan structure.
Perhatikan contoh berikut ini :
a.
Menyiapkan Stack.
#define MAXSTACK 10
tipe : char
typedef char ItemType;
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 )
78
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--];
}
79
1.6
Soal Latihan Mandiri.
0
1
2
3
4
5
6
n-1
X X X X
Top
Soal-I.
Untuk Stack yang diilustrasikan pada Gambar diatas :
1. Sebutkan ciri bahwa Stack :
a. Kosong
2. Tulis algoritma dasar untuk:
b. Penuh
a. PUSH
c. Bisa diisi
b. POP
d. Ada isinya
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.
80
6. Bila Stack berisi bilangan integer, maka susun algoritma untuk
menghitung dan mencetak total isi Stack tanpa menghapus isi
Stack.
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.
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.
81
6.
Bila Stack berisi bilangan integer, maka susun
algoritma untuk menghitung dan mencetak total
isi Stack tanpa menghapus isi 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.
n-1
0
S[ ]
1
2
3
4
5
6
7
8
9
25 12 17 10
Top
3
Top
64
X
Total
84
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.
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.
0
1
2
3
4
5
6
n-1
X X X X
Top
3
Top
X
87
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.
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.
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
X
90
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.
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.
91
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.
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
X
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
X X X X X X X X
Top
7
Top
X
95
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.
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.
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
Top
7
Top
X
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
X X X X X X X X X X X X X X X
Top
14
Top
X
99
100
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.
101
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.
102
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.
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.
Top1
7
6 17
5 5
4 33
7
6
5
4
3 25
2 12
3
2
1 15
0 27
-1
1
0
-1
S1
7
6
5
4
Top1
Top2
Top2
S2
7
6 27
5 15
4 12
3
2
3 25
2 33
1
0
-1
1 5
0 17
-1
S1
S2
103
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.
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
Top1
7
6 17
5 5
4 33
7
6
5
4
7
6
5
4
3 25
2 12
3
2
3
2
1 15
0 27
-1
1
0
-1
1
0
-1
S1
7
6
5
4
Top1
Top2
Top2
S2
Top3
7
6
5
4
7
6 17
5 5
4 33
3
2
3 25
2 12
3
2
1
0
-1
1 15
0 27
-1
1
0
-1
S1
S2
S3
Top3
104
S3
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.
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
Top1
7
6 17
5 5
4 33
7
6
5
4
7
6
5
4
3 25
2 12
3
2
3
2
1 15
0 27
-1
1
0
-1
1
0
-1
S1
7
6
5
4
Top1
Top2
Top2
S2
Top3
7
6
5
4
7
6 33
5 27
4 25
3
2
3 17
2 15
3
2
1
0
-1
1 12
0 5
-1
1
0
-1
S1
S2
S3
Top3
105
S3