Anda di halaman 1dari 223

dan

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,

sudah kita pelajari pada mata kuliah


ANDAL dan ALGO1.

Yang akan dipelajari pada matakuliah


ALGO2 ini,
adalah : urutan menyimpan dan
mengambilnya mengikuti aturan tertentu ,
tergantung sifat penyimpanan dan
pengambilannya.

5
Ada 2 macam sifat penyimpanan dan
pengambilan :

1. Bersifat STACK ( TUMPUKAN ) ,


yaitu bila proses urutan menyimpan dan
mengambil bersifat LIFO, (Last In First Out ),
yang maksudnya , data yang terakhir disimpan,
itu lah yang pertama (lebih dulu) diambil, atau
dikeluarkan.

2. Bersifat QUEUE, ( ANTRIAN )


yaitu bila proses urutan menyimpan dan
mengambil bersifat FIFO, ( First In First Out ),
yang maksudnya , data yang pertama disimpan,
itu lah yang pertama (lebih dulu) diambil, atau
dikeluarkan.

Kemudian, STACK dan QUEUE ,


ini disebut STRUKTUR DATA
6
Jadi ada 2 macam STRUKTUR DATA yang
akan kita pelajari yaitu :

1. Struktur STACK , dan,

2. Struktur QUEUE

7
8
1

9
1

10
11
Menyimpan data ke dalam memory ,
( Array satu Dimensi ), dan
mengambilnya kembali .

Menyimpan dan mengambil, mengikuti proses


yang bersifat STACK ,
yaitu yang masuk (disimpan) terakhir
itulah yang yang keluar (diambil) lebih dulu.

Proses seperti ini disebut :


LAST IN FIRST OUT
( LIFO )
Yang masuk terakhir
itulah
yang keluar lebih dulu
12
6.3 & 7.3
NESTED LOOP

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,

bukan berarti secara fisik


datanya bertumpuk, tetapi
sifatnya mengikuti sifat
tumpukan, LIFO

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 :

- 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 )


Yang terakhir masuk, itu lah
yang pertama keluar.
38
Ada dua model Stack yang akan kita pelajari

1. Single Stack , dan


2. Double Stack

Single Stack , bila menggunakan satu buah


array satu dimensi untuk satu buah stack.

Double Stack , bila menggunakan satu buah


array satu dimensi untuk dua buah stack.

39
40
Single Stack
Hanya ada satu Stack dalam sebuah
collection data

Dalam sebuah array satu dimensi,


hanya ada satu buah stack

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

misal dibuat dengan :


Top
#define n 10
-
3 -
-
Top X -
int S[n];
int Top, X;

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

Diantara 4 elemen data ini

25 yang pertama disimpan,


10 yang terakhir disimpan.

Bila ada data baru yang akan masuk,


disimpan dilokasi index no. 4,

Bila ada data yang akan diambil, maka yang


diambil nilai 10 yang ada dilokasi index no. 3
44
ILUSTRASI misal n = 10
n-1
0 1 2 3 4 5 6 7 8 9

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

Pertanyaan : dalam keadaan


seperti sekarang
Kalau ada perintah PUSH
( Isi, Masuk, Simpan)
maka akan diisi di elemen nomor : ?
dan Top akan menunjuk
elemen nomor : ?

46
n-1
0 1 2 3 4 5 6 7 8 9
PUSH
S[ ] 25 12 17 10
POP

3 Top
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

47
n-1
0 1 2 3 4 5 6 7 8 9
PUSH
S[ ] 25 12 17 10
POP

Top

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 : ?
48
n-1
0 1 2 3 4 5 6 7 8 9
PUSH
S[ ] 25 12 17 10
POP

Top

Top X

Pertanyaan : dalam keadaan seperti sekarang

Kalau ada perintah POP ( Keluar, Ambil)


maka akan diambil isi elemen nomor : ? 3
dan Top akan menunjuk elemen nomor : ? 2
49
Ilustrasi Stack.
n-1
0 1 2 3 4 5 6 7 8 9

S[ ] 25 12 17 10

Top

Top X

Diilustrasikan sebagai berikut :


n-1
0 1 2 3 4 5 6 7 8 9

S[ ] X X X X

Top 50
1.2 Prinsip / Konsep Proses pada Stack

LIFO (Last In First Out)

1.3 Macam Proses pada Stack

1.3.1 AWAL (Inisialisasi)


1.3.2 PUSH (Insert, Masuk, Simpan, Tulis)
1.3.3 POP (Delete, Keluar, Ambil , Baca / Hapus)

51
1.3.1 Bila ditulis dalam sebuah FUNGSI
Misal nama FUNGSInya : AWAL( )

Top = -1; Contoh bila ditulis dalam


sebuah Fungsi

void AWAL( )
{
Top = -1;
}

Yang diilustrasikan sebagai berikut :


n-1
0 1 2 3 4 5 6 7 8 9

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 );
}

Bila Program ini


dijalankan maka
akan
tercetak : 6
1.3.2

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

Bila Sekarang Top = 3

Pertanyaan : dalam keadaan seperti sekarang


Kalau ada perintah PUSH (Isi, Masuk, Simpan)
maka isi X akan disimpan di Stack elemen nomor : ?
dan Top akan menunjuk elemen nomor : ?
Jawab : Elemen no 4. atau S[4];

55
n-1
0 1 2 3 4 5 6 7 8 9

S[ ] 25 12 17 10

3 15
Top
Top X

Bila Sekarang Top = 3

Dengan :
Top = Top + 1;
S[Top] = X;

Maka Elemen no 4, akan berisi : 15

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

Perhatikan gerakan gambar panah Top.


Mula mula Top pindah dulu ke no. 4
Kemudian

dengan S[Top] = X;

baru mengisi kolom no. 4 dengan nilai 15


Sebelum nilai X diPUSH Pilih algoritma yang benar
Ke Stack
n-1 untuk PUSH
0 1 2 3 4 5 6 7 8 9

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

A = B; Yang diisi, variabel A


atau variabel B ?

Sebelum : 25 17

A B

A = B;

Sesudah :
?
A B
61
Teori : Penulisan instruksi dan maksudnya

A = B; Yang diisi, variabel A


atau variabel B ?

Sebelum : 25 17

A B

A = B;

Sesudah : 17 17 Yang diisi


Variabel A
A B
62
Untuk mengisi elemen A[3]
0 1 2 3 4 5 Pilih instruksi yang benar :

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

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

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

Sesudah : n-1 Dengan : S[Top] = X;


0 1 2 3 4 5 6 7 8 9

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

n-1 Dengan : S[Top] = X;


0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 15 3 15

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

Top = Top + 1; Contoh bila ditulis


S[Top] = X; dalam sebuah fungsi

atau : void PUSH( )


Top+= 1;
S[Top] = X; { Top = Top + 1;
S[Top] = X;
atau : }
Top++;
S[Top] = X;

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

Kalau ada perintah POP ( Keluar, Ambil )


maka akan diambil isi elemen nomor : ?
dan setelah itu Top akan menunjuk elemen nomor : ?
Dan Tulis instruksi untuk proses POP
yang diperlukan 74
n-1
0 1 2 3 4 5 6 7 8 9
S[ ] 25 12 17 10

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];

Setelah POP c. Top = Top - 1;


n-1 S[Top] = X;
0 1 2 3 4 5 6 7 8 9

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

S[ ] 25 12 17 10 Ambil isi S[Top]


simpan ke X
Top
atau :
3 10
Isilah X
Top X
dengan data yang
ada S[Top]

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];

Setelah POP c. Top = Top - 1;


n-1 S[Top] = X;
0 1 2 3 4 5 6 7 8 9

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];

Setelah POP c. Top = Top - 1;


n-1 S[Top] = X;
0 1 2 3 4 5 6 7 8 9

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

Contoh bila ditulis


Setelah POP dalam sebuah fungsi
n-1
0 1 2 3 4 5 6 7 8 9

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

Top 3 masih ada dalam S[3] ?


Top X
Isi X n-1 Jawab :
0 1 2 3 4 5 6 7 8 9

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

Top 3 masih ada dalam S[3] ?


Top X
Isi X n-1 Jawab : masih ada
0 1 2 3 4 5 6 7 8 9

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

X = S[Top]; void POP( )


Top = Top - 1;
{ X = S[Top];
atau :
X = S[Top]; Top = Top - 1;
Top-=1;
}

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

n-1 Dengan : X = S[Top];


0 1 2 3 4 5 6 7 8 9

S[ ] 25 12 17 10 2 17

Top X
Top
Seharusnya yang diisikan ke X adalah nilai 10
92
a) Proses Awal

void AWAL( void)


{ Top = -1;
}

b) Proses PUSH

void PUSH( void) Catatan :


{ Top = Top + 1;
S[Top] = X; Semua variabel
} dibuat
bersifat GLOBAL
c) Proses POP

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

Diilustrasikan sebagai berikut :

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.

Kalau TIDAK KOSONG


a. KOSONG
Berarti
ADA ISINYA
b. PENUH
lawannya
lawannya

c. BISA DIISI

d. ADA ISINYA

101
Kondisi Stack.

a. KOSONG

b. PENUH
lawannya
lawannya

c. BISA DIISI

d. ADA ISINYA Kalau ADA ISINYA


Berarti
TIDAK KOSONG

102
Kondisi Stack.

a. KOSONG

b. PENUH
lawannya
lawannya

c. BISA DIISI

d. ADA ISINYA Kalau TIDAK ADA ISINYA


Berarti
KOSONG

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

n-1 d. ADA ISINYA


0 1 2 3 4 5 6 7 8 9 Gambar : ?
3 X X X X X X X X X X

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

n-1 d. ADA ISINYA


0 1 2 3 4 5 6 7 8 9 Gambar : ?
3 X X X X X X X X X X

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

n-1 d. ADA ISINYA


0 1 2 3 4 5 6 7 8 9 Gambar : ?
3 X X X X X X X X X X

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

n-1 d. ADA ISINYA


0 1 2 3 4 5 6 7 8 9 Gambar : ?
3 X X X X X X X X X X

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

n-1 d. ADA ISINYA


Gambar :
0 1 2 3 4 5 6 7 8 9 2 3
3 X X X X X X X X X X

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 c. BISA DIISI : ?


1 2
n-1
0 1 2 3 4 5 6 7 8 9
d. ADA ISINYA : ?
3 X X X X X X X X X X
2 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 c. BISA DIISI : ?


1 2
n-1
0 1 2 3 4 5 6 7 8 9 d. ADA ISINYA : ?
3 X X X X X X X X X X
2 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 c. BISA DIISI : ?


1 2
n-1
0 1 2 3 4 5 6 7 8 9 d. ADA ISINYA : ?
3 X X X X X X X X X X
2 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

n-1 b. PENUH : Top = n-1


0 1 2 3 4 5 6 7 8 9
2 X X X X 3

Top c. BISA DIISI : Top < n-1


1 2
n-1
0 1 2 3 4 5 6 7 8 9 d. ADA ISINYA : ?
3 X X X X X X X X X X
2 3

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

n-1 b. PENUH : Top = n-1


0 1 2 3 4 5 6 7 8 9
2 X X X X 3

Top c. BISA DIISI : Top < n-1


1 2
n-1
0 1 2 3 4 5 6 7 8 9
d. ADA ISINYA : Top > -1
3 X X X X X X X X X X
2 3

Top
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

115
Kondisi Stack.
ciri
Kondisi Stack Ilustrasi gambar
(posisi Top)

a. KOSONG tak ada isinya Top = -1 Gambar 1


b. PENUH tak bisa diisi lagi Top = n-1 Gambar 3
c. BISA DIISI (kebalikan dari PENUH) Top < n-1 Gambar 1 dan 2
d. ADA ISINYA (kebalikan dari KOSONG) Top > -1 Gambar 2 dan 3

n-1
0 1 2 3 4 5 6 7 8 9
1
n-1
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 ?

Top Jawab : TIDAK DAPAT

121
Ilustrasi Stack
n-1
0 1 2 3 4 5 6 7 8 9

X X X X

Top

Bila Stack PENUH, maka Tidak Dapat melakukan PUSH


sehingga, sebelum PUSH,
perlu diperiksa apakah Stack dalam keadaan :

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

Bila BISA DIISI silahkan PUSH


sebaliknya (else) jangan PUSH
atau

Bila PENUH jangan PUSH


sebaliknya (else) silahkan PUSH

123
Algoritma yang lengkap
untuk proses PUSH

Contoh ditulis dalam sebuah Fungsi

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”);
}

atau void PUSH( )


Bila PENUH
{ if ( Top == n-1 )
jangan PUSH
printf( “Stack Penuh”);
else else
{ Top = Top + 1; lakukan PUSH
S[Top] = X; Top == n-1
} Bernilai TRUE
} atau FALSE

125
Algoritma yang lengkap
untuk proses POP

Contoh ditulis dalam sebuah Fungsi

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 :

A. Top = Top + 1; B. S[Top] = X;


S[Top] = X; Top = Top + 1;

C. Top = Top + 1; D. X = S[Top] ;


X = S[Top] ; Top = Top + 1;

2. Pada Single Stack, algoritma dasar


untuk POP adalah :

A. Top = Top - 1; B. X = S[Top] ;


X = S[Top] ; Top = Top - 1;

C. Top = Top - 1; D. S[Top] = X ;


S[Top] = X ; Top = Top - 1;
3. Pada Single Stack, algoritma yang
lengkap untuk PUSH adalah :

A. if(Top > -1) B. if(Top < n )


{ Top = Top + 1; { Top = Top + 1;
S[Top] = X; S[Top] = X;
} }

C. if(Top < n-1 ) D. if(Top < n-1 )


{ Top = Top + 1; { S[Top] = X;
S[Top] = X; Top = Top + 1;
} }
4. Pada Single Stack, algoritma yang
lengkap untuk POP adalah :

A. if(Top > -1) B. if(Top > -1 )


{ Top = Top + 1; { X = S[Top];
S[Top] = X; Top = Top - 1;
} }

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. while ( Top < n-1 && Top <= 12) B. Y = 0;


{ scanf(“%i”, &X); while ( Top < n-1 && Y <= 12)
Top = Top + 1; { scanf(“%i”, &X);
S[Top] = X; Top = Top + 1;
} S[Top] = X;
Y = Y+1;
}

C. while ( Top < n-1 || Top <= 12) D.


{ scanf(“%i”, &X); Z = 0;
Top = Top + 1; while ( Top < n-1 && Z < 12)
S[Top] = X; { scanf(“%i”, &X);
} Top = Top + 1;
S[Top] = X;
Z = Z+1;
}
6. Niat mengeluarkan 12 buah isi Single Stack dan mencetaknya
satu per satu ke layar, bila isi Stack masih cukup tersedia
untuk diambil 12 buah.. Tapi bila isi Stack yang ada kurang
dari 12 buah, maka terpaksa dikeluarkan semuanya, sampai isi
Stack habis.
Algoritma yang benar untuk maksud diatas adalah :

A. while ( Top > -1 && Top <= 12 ) B. Y=0


{ X = S[Top]; while ( Top > -1 && Y < 12 )
Top = Top - 1; { X = S[Top];
printf(“ %i”, X); Top = Top - 1;
} printf(“ %i”, X);
Y= Y + 1;
}

C. while ( Top > -1 || Top <= 12 ) D. Y=0


{ X = S[Top]; while ( Top > -1 && Y <= 12 )
Top = Top - 1; { X = S[Top];
printf(“ %i”, X); Top = Top - 1;
} printf(“ %i”, X);
Y = Y + 1;
}
7. Sudah ada 2 buah Single Stack dengan jumlah elemen yang
sama dan tipe data yang sama. Stack pertama namanya S1,
dengan penunjuk Top1, sudah ada isinya. Stack ke-dua
namanya S2 dengan penunjuk Top2, masih kosong. Algoritma
yang benar untuk memindahkan seluruh isi S1 ke S2 adalah :

A. while(Top2 < n-1) B. while(Top2 < n )


{ X = S1[Top1]; { X = S1[Top1];
Top1 = Top1 - 1; Top1 = Top1 - 1;
Top2 = Top2 + 1; Top2 = Top2 + 1;
S2[Top2] = X; S2[Top2] = X;
} }

C. while(Top1 > -1) D. while(Top1 > -1)


{Top1= Top1 - 1; { X = S1[Top1];
X = S1[Top1]; Top1=Top1 - 1;
Top2 = Top2 + 1; Top2 = Top2 + 1;
S2[Top2] = X; S2[Top2] = X;
} }
8. Sudah ada 3 buah Single Stack dengan jumlah elemen yang sama
dan tipe data yang sama. Stack pertama namanya S1, dengan
penunjuk Top1, sudah ada isinya nilai ujian. Stack ke-dua
namanya S2 dengan penunjuk Top2, masih kosong. Stack ke-tiga
namanya S3 dengan penunjuk Top3. Algoritma yang benar untuk
memindahkan seluruh isi S1 yang lebih kecil dari 60 ke S2, dan
S1 hanya berisi nilai ujian yang lebih besar atau sama dengan 60
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

1.2. Tulis algoritma dasar untuk :


a. PUSH
b. POP

1.3. Tulis algoritma yang lengkap untuk :


a. PUSH
b. POP
0 1 2 3 4 5 6 n-1
Soal-2. X X X X
Untuk Stack yang
diilustrasikan pada
Gambar yang diberikan :
Top

2.1. 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.

2.2. Tulis program (penggalan program) untuk mengeluarkan


(POP) isi Stack satu per satu dan mencetaknya, sampai
Stack menjadi kosong.
0 1 2 3 4 5 6 n-1
Soal-3. X X X X
Untuk Stack yang
diilustrasikan pada
Gambar yang diberikan :
Top

3.1. Dianggap tempat yang tersedia masih lebih dari 10


tempat. Tulis program (penggalan program) untuk
menginput sebanyak 10 buah data melalui keyboard
satu persatu dan mem Push data tersebu ke Stack

3.2. 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 n-1
Soal-4. X X X X
Untuk Stack yang
diilustrasikan pada
Gambar yang diberikan :
Top

4.1. Tulis program (penggalan program) untuk menginput


melalui keyboard satu persatu dan mem Push data
tersebut ke Stack. Bila tempat yang tersedia masih
cukup untuk menampung 10 data baru, maka data
yang diinput dan dipush sebanyak 10 buah data. Tapi
bila tempat yang tersedia kurang dari 10 tempat,
maka cukup menginput dan mem Push sebanyak
tempat yang tersedia, sampai stack penuh.
0 1 2 3 4 5 6 n-1
Soal-4. X X X X
Untuk Stack yang
diilustrasikan pada
Gambar yang diberikan :
Top

4.2. Tulis program (penggalan program) untuk


mengeluarkan (POP) isi stack satu persatu dan
mencetaknya ke layar. Bila stack berisi 10 elemen
atau lebih dari 10 elemen, maka keluarkan dan cetak
sebanyak hanya 10 elemen. Tapi bila isi stack
kurang dari 10 elemen, maka keluarkan semua isi
stack, sampai stack menjadi kosong.
Berikutnya ada
contoh contoh soal
yang perlu untuk
difahami
Contoh

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 sudah = -1  Proses SELESAI 161


162
2. Sudah ada 3 buah Stack yaitu A, B dan C, yang dibuat
dengan int A[50], int B[50], dan int C[50], masing-masing
dengan penunjuk posisi paling atas dengan nama : TopA,
TopB, dan TopC. Stack A sudah ada isinya nilai-nilai ujian
mahasiswa. Stack B dan Stack C belum ada isinya,
dengan ilustrasi pada Gambar-2.12a

TopA
7 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.

while( TopA > -1 )


X { X = A[TopA];
TopA = TopA – 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.

while( TopC > -1 )


X { X = C[TopC];
TopC = TopC – 1;

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

paling ‘atas’ : TopA untuk SA, dan 10 10


TopB untuk SB. 9 25 9
Sudah ada 10 buah data integer dalam 8 22 8
lembar dokumen sebagai berikut :
7 19 7
12, 17, 5, 10, 15, 7, 25, 11, 22, 19 6 17 6
5 15 5
Susun program untuk menginput 4 12 4
data diatas satu per satu sesuai
3 11 3
urutan data ( pertama 12, kedua 17, dan
2 10 2
seterusnya ) dan menyimpannya ke
dalam stack SA sedemikian rupa 1 7 TopB 1
sehingga isi stack SA urut nilai menaik 5
0 0
seperti yang diilustrasikan pada -1 SA -1 SB
Gambar-2.14.
Stack SB dapat digunakan bila Gambar-2.14
diperlukan.
Catatan : Semua proses menggunakan operasi stack
PUSH dan POP
178
5. Sudah ada 3 buah Stack yaitu A, B dan C, yang dibuat
dengan int A[50], int B[50], dan int C[50], masing-masing
dengan penunjuk posisi paling atas dengan nama : TopA,
TopB, dan TopC. Stack A sudah ada isinya nilai-nilai ujian
mahasiswa. Stack B dan Stack C belum ada isinya, dengan
ilustrasi pada Gambar-2.16a.

TopA
7 7 7
6 55 6 6
5 74 5 5
4 80 4 4
3 95 3 3
2 53 2 2
1 66 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 tidak boleh diatas 17 17 > 5  17 pindah ke S3


189
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

Ungsikan seluruh isi S2 yang > X ke S3


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 Top2 0 17 0

-1 S1 -1 S2 Top3 -1 S3

Kebetulan isi S2 yang perlu


diungsikan hanya 1 buah
191
PROSES

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

Setelah semua isi X2 yang > X sudah dipindahkan ke S3,


Isilah X ke S2 194
PROSES

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

Sekarang isi stack S1, S2 dan S3 seperti ilustrasi diatas


196
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

Setelah isi X sudah di PUSH ke S2,


Kembalikan semua pengungsi di S3 ke S2
197
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

Kembalikan semua isi S3 ke S2


198
17
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 0

-1 S1 -1 S2 Top3 -1 S3

Kembalikan semua isi S3 ke S2


199
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 Top2 1 17 1
0 27 0 5 0

-1 S1 -1 S2 Top3 -1 S3

Kembalikan semua isi S3 ke S2


200
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 Top2
1 17 1
0 27 0 5 0

-1 S1 -1 S2 Top3 -1 S3

Semua pengungsi sudah kembali


Sekarang isi S2 sudah sorted
201
202
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 Top2 1 17 1
0 27 0 5 0

-1 S1 -1 S2 Top3 -1 S3

Mulai lagi memindahkan is S1 ke S2


203
33
X Y

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

Ambil lagi isi S1


204
33
X Y

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

Perlukah mengungsikan isi S2 ke S3?


205
33
X Y

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

Isi X > S2[Top2]  langsung PUSH X ke S2


206
33
X Y

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

Isi X > S2[Top2]  langsung PUSH X ke S2


207
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

Isi S2 tetap sorted

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

Ungsikan semua isi S2 yang > X ke S3


213
X Y

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

Anda mungkin juga menyukai