Vous êtes sur la page 1sur 86

1

Kurikulum
2
U m u m
3
Buku Literatur
4
materi
1. Stack

2. Queue

3. Linked List

4. Tree

5. Graph

6. Search & Sort
5
. Stack

. Queue

. Tree

. Graph
Pokok Pembahasan
6
Stack
Queue
Tree
Graph
linear
non
linear
Array
Linked-
List
(statis)
(dinamis)
struktur
Peng-alokasi-an
memory
Satu
dimensi
Dua
dimensi
Linear
Non
Linear
Stack
Queue
Tree
Graph
Stack
Queue
Tree
Graph
7
6.3 & 7.3
NESTED LOOP



STACK
8
STACK
( TUMPUKAN )
9
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
10
Buku-4
Buku-3
Buku-2
Buku-1
4

3

2

1
1
2
3
4
Top
Meja
Nomor
Urut
Masuk
(PUSH)
Nomor Urut
Keluar
(POP)
1. Single Stack.
Stack Tunggal, satu stack dalam satu collection
1.1 Ilustrasi Single Stack.
11
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 )
12
1.2 Representasi Single Stack menggunakan
Array Satu Dimensi.
0 1 2 3 4 5 6 7 8 9
misal n = 10
n-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 :
13
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 : ?
PUSH
POP
14
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 : ?
PUSH
POP
15
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
16
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
17
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[ ]
18
Algoritma dasar
untuk


PUSH
19
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
20
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
Top
Top
X
3
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
21
Pilih algoritma yang benar
untuk 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 15
Top
25 12 17 10
S[ ]
Top
X
4 15
Top
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-1
Setelah nilai X diPUSH
Ke Stack
Sebelum nilai X diPUSH
Ke Stack
22
A = B;
Yang diisi, variabel A
atau variabel B
?
25
A
17
B
A = B;
A B
Sebelum :
Sesudah :
?
23
A = B;
Yang diisi adalah : variabel A
25
A
17
B
A = B;
17
A
17
B
Sebelum :
Sesudah :
24
17
A
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];
25
Pilih algoritma yang benar
untuk 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 15
Top
25 12 17 10
S[ ]
Top
X
4 15
Top
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-1
Setelah nilai X diPUSH
Ke Stack
Sebelum nilai X diPUSH
Ke Stack
26
Pilih algoritma yang benar
untuk 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 15
Top
25 12 17 10
S[ ]
Top
X
4 15
Top
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-1
Setelah nilai X diPUSH
Ke Stack
Sebelum nilai X diPUSH
Ke Stack
27
Untuk PUSH
Algoritma yang benar
Top = Top + 1;
S[Top] = X;
Top
X
3 15
Top
25 12 17 10
S[ ]
Top
X
4 15
Top
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-1
Setelah nilai X diPUSH
Ke Stack
Sebelum nilai X diPUSH
Ke Stack
28
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
29
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
30
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 :
31
Algoritma dasar
untuk


POP
32
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
33
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
Top
Top
X
3
25 12 17 10 S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
34
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
3
Top
25 12 17 10
S[ ]
Top
X
2 10
Top
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-1
Setelah POP
Sebelum POP
35
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
3
Top
25 12 17 10
S[ ]
Top
X
2 10
Top
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-1
Setelah POP
Sebelum POP
36
Untuk POP
Algoritma yang benar
S[Top] = X;
Top = Top - 1;

Top
X
3
Top
25 12 17 10
S[ ]
Top
X
2 10
Top
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-1
Setelah POP
Sebelum POP
37
Pertanyaan :
Setelah 10 disimpan di X
apakah nilai 10
masih ada dalam S[3] ?
Pertanyaan :
Setelah Top dipindahkan
menunjuk S[2]
apakah nilai 10
masih ada dalam S[3] ?
Jawab :
Jawab :
Top
X
2 10
Top
25 12 17
S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Setelah POP
Top
X
3
Top
25 12 17 10
S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Sebelum POP
3 10
Top
25 12 17 10
S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Isi X
Top
X
38
Pertanyaan :
Setelah 10 disimpan di X
apakah nilai 10
masih ada dalam S[3] ?
Pertanyaan :
Setelah Top dipindahkan
menunjuk S[2]
apakah nilai 10
masih ada dalam S[3] ?
Jawab : masih ada
Jawab : masih ada
tapi untuk keperluan
ilustrasi, nilainya dihapus
Top
X
2 10
Top
25 12 17
S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Setelah POP
Top
X
3
Top
25 12 17 10
S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Sebelum POP
3 10
Top
25 12 17 10
S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Isi X
Top
X
39
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-1
Sebelum POP
Top
X
3
40
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-1
Sebelum POP
Top
25 12 17 10
S[ ]
0 1 2 3 4 5 6 7 8 9
n-1
Top
X
3 10
41
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-1
Sebelum 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
42
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--];

43
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
3
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
44
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 dibuat
bersifat GLOBAL
45
#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
46
Ilustrasi Stack.
Diilustrasikan sebagai berikut :
Top
X
3
Top
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
47
1.2.4 Kondisi Stack.
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
48
Kondisi Stack.
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
l
a
w
a
n
n
y
a

l
a
w
a
n
n
y
a

49
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
50
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
51
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
52
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
53
Kondisi Stack.
Kondis Stack :
a. KOSONG
b. PENUH
c. BISA DIISI
d. ADA ISINYA
Gambar :
Gambar :
Gambar :
Gambar : ?
1
3
1 2
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
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
55
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
56
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
57
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
58
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
59
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
60
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
61
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
62
1.2.5
Algoritma PUSH dan POP yang lengkap.
63
a. Algoritma yang lengkap untuk proses PUSH
Bila ada instruksi PUSH
maka akan d isi di elemen
nomor : ?
Top
X X X X
0 1 2 3 4 5 6 7 8 9
n-1
64
a. Algoritma yang lengkap untuk proses PUSH
Bila ada instruksi PUSH
maka akan d isi di elemen
nomor : ?
Bila ada instruksi PUSH
maka 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
65
a. Algoritma yang lengkap untuk proses PUSH
Bila ada instruksi PUSH
maka akan diisi di elemen
nomor : 4
Dalam kondisi PENUH
Bolehkah 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
66
a. Algoritma yang lengkap untuk proses PUSH
Bila ada instruksi PUSH
maka akan d isi di elemen
nomor : 4
Dalam kondisi PENUH
Bolehkah 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
67
a. Algoritma yang lengkap untuk proses PUSH
Ilustrasi Stack
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
?
0 1 2 3 4 5 6 7 8 9
n-1
Top
X X X X
68
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
69
a. Algoritma yang lengkap untuk proses PUSH
void PUSH(void)
{ if ( BISA DIISI )
{ Top = Top + 1;
S[Top] = X;
}
else
printf( Stack Penuh);
}
70
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
71
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
72
1.2.6 Contoh Soal PUSH dan POP .
Baca sendiri di diktat
73
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.
74
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-1
0 1 2 3 4 5 6 7 8 9 10
BatasAtas Top
Dasar
75
n
0 1 2 3 4 5 6 7 8 9 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);
76
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 elemen
S[0] sampai dengan S[9]
tipe : char
b. Initialisasi.
void Intitialize(StackType *P )
{ P->Top = -1; }
77
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--];
}
78
X X X X
0 1 2 3 4 5 6 n-1
Top
Soal-I. Untuk Stack yang diilustrasikan pada Gambar diatas :
a. Kosong
b. Penuh
c. Bisa diisi
d. Ada isinya
1. Sebutkan ciri bahwa Stack :
2. Tulis algoritma dasar untuk:
a. PUSH
b. POP
3. Tulis algoritma yang lengkap untuk: a. PUSH
b. 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.
79
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.
80
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.
81
82
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
83
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
84
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.
17
5
33
25
12
15
27 0
1
2
3
4
5
6
7
-1
S1
Top1
0
1
2
3
4
5
6
7
-1
S2
Top2
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.
0
1
2
3
4
5
6
7
-1
S1
Top1
27
15
12
25
33
5
17 0
1
2
3
4
5
6
7
-1
S2
Top2
85
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.
17
5
33
25
12
15
27 0
1
2
3
4
5
6
7
-1
S1
Top1
0
1
2
3
4
5
6
7
-1
S2
Top2
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
0
1
2
3
4
5
6
7
-1
S1
Top1
17
5
33
25
12
15
27 0
1
2
3
4
5
6
7
-1
S2
Top2
0
1
2
3
4
5
6
7
-1
S3
Top3
0
1
2
3
4
5
6
7
-1
S3
Top3
86
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.
17
5
33
25
12
15
27 0
1
2
3
4
5
6
7
-1
S1
Top1
0
1
2
3
4
5
6
7
-1
S2
Top2
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
0
1
2
3
4
5
6
7
-1
S1
Top1
33
27
25
17
15
12
5 0
1
2
3
4
5
6
7
-1
S2
Top2
0
1
2
3
4
5
6
7
-1
S3
Top3
0
1
2
3
4
5
6
7
-1
S3
Top3

Vous aimerez peut-être aussi