My first Magazine pemrograman-kompetitif-dasar | Page 96
8 Struktur Data Dasar
procedure PUSH (item)
topO f Stack ← topO f Stack + 1
7:
stack[topO f Stack] ← item
8: end procedure
5:
6:
procedure POP ()
topO f Stack ← topO f Stack − 1
11: end procedure
9:
10:
function TOP ()
return stack[topO f Stack]
14: end function
12:
13:
15:
16:
17:
18:
19:
20:
21:
function IS E MPTY ()
if topO f Stack = 0 then
return true
else
return f alse
end if
end function
Saat mengimplementasikan kode di atas, pastikan nilai maxSize sama dengan maksimal
operasi push yang mungkin dilakukan. Dalam pemrograman kompetitif, biasanya banyaknya
operasi push yang mungkin dapat diperkirakan dari soal yang diberikan. Perhatikan juga bahwa
pada operasi pop, kita tidak benar-benar menghapus elemennya, melainkan hanya variabel
penunjuknya yang "dimundurkan".
Contoh Soal 8.2: Pencarian string
Anda diberikan sebuah string, misalnya acaabcbcd. Cari string abc dalam string tersebut.
Jika ditemukan maka hapus string abc tersebut, lalu ulangi pencarian. Pencarian berakhir
ketika tidak terdapat string abc lagi. Anda diminta untuk menentukan total penghapusan
yang berhasil dilakukan.
Contoh
Pada string acaabcbcd terdapat sebuah string abc, dan hapus string tersebut menjadi
acabcd. Lalu, ditemukan lagi string abc dan hapus menjadi acd. Karena tidak ditemukan lagi
string abc, maka jawabannya adalah 2.
Soal tersebut dapat diselesaikan dengan cara berikut:
•
•
•
•
Lakukan iterasi setiap karakter pada string tersebut.
Untuk setiap karakter, push ke dalam stack .
Cek 3 karakter teratas pada stack .
Jika 3 karakter teratas merupakan abc, artinya terdapat 1 penghapusan. Lalu pop ketiga
huruf tersebut dari stack .
Pada soal ini, Anda harus dapat memodifikasi struktur data stack agar Anda dapat melaku-
kan operasi top pada 3 elemen teratas. Kompleksitas total adalah O(N), dengan N merupakan
86