Anda di halaman 1dari 23

Struktur Data

Tumpukan (Stack)
Definisi Stack (Tumpukan)

• Stack (tumpukan) adalah barisan berhingga dari suatu


item/elemen dimana semua operasi insertion (operasi sisip
elemen pada stack) dan operasi deletion (operasi
hapus/ambil elemen dari stack) dilakukan pada satu ujung.
• Operasi insertion juga disebut operasi Push dan operasi
deletion disebut operasi Pop. Sedang ujung yang dimaksud
disebut sebagai Top.
Ilustrasi Stack
Konsep stack
• Stack disebut sebagai LIFO (Last In First Out). Karena operasi Push berarti
meletakkan elemen baru di posisi Top dan operasi Pop berarti mengambil
elemen di posisi Top.
Stack ADT
• Beberapa fungsi pada ADT tumpukan yang perlu dibentuk
untuk keperluan akses data pada stack adalah sebagai
berikut:
• push(x), menambahkan elemen x ke bagian top
• pop(), mengambil data dari posisi top
• peek(), melihat isi yang teratas/pertama dari tumpukan
• top(), elemen teratas, sama dengan peek()
• isEmpty(), memeriksa apakah tumpukan kosong
• len(), menghitung jumlah elemen dalam tumpukan
Proses Push

C top

B B

A A A
empty push(A) push(B) push(C)
top=0 top=1 top=2 top=3
Algoritma operasi push
Prosedur push (input x : item; in-out S : Stack)
{prosedur menempatkan item pada posisi top dari stack}
Definisi Variabel
int atas;
Rincian Langkah
If S.top = maks
then write (“tumpukan penuh”);
else
S.top  S.top + 1;
atas  S.top;
S.isi[atas]  x;
endif.
Implementasi dalam python
def push(self, x):
if self.top == maks:
print (‘Tumpukan penuh’)
else:
self.top += 1
atas = self.top
self.isi[atas] = x

• menggunakan python list sebagai struktur data dasar akan memudahkan implementasi
ADT dari stack, perhatikan fungsi push berikut:

def push(self, e):


# memasukkan elemen e di posisi top
self._data.append(e)

• fungsi append() pada list otomatis menempatkan elemen di posisi atas


Proses Pop

C top

B B top

A A A top

top=3 pop(C) pop(B)


top=2 top=1
Algoritma operasi pop
Prosedur pop (output x : item; in-out S:Stack)
{prosedur mengambil data dari tumpukan pada posisi top dari stack}
Definisi Variabel
int atas;
Rincian Langkah:
If S.top = 0
then write (“tumpukan kosong”);
else
atas  S.top;
x  S.isi[atas];
S.top  S.top – 1;
endif
Implementasi dalam python
• Menggunakan python list dalam operasi pop
def pop(self):
# mengambil elemen di posisi top
# Raise Empty exception if the stack is empty.
if self.is_empty():
raise Empty(’Stack is empty’)
return self._data.pop()
Contoh Modul ArrayStack
Contoh penggunaan
>>> from ArrayStack import * #menggunakan struktur tumpukan
>>> s = ArrayStack() #inisialisasi variable stack
>>> for x in range(0,5): #mengisi stack s dengan nilai 0, 1, 2, 3, 4
s.push(x)
>>> print(s.peek()) #melihat isi elemen teratas
>>> print(s.top()) #melihat elemen teratas
>>> print(s.is_empty()) #mengecek apakah stack dalam keadaan kosong
>>> print(s.pop()) #menghapus elemen stack
>>> print(s.pop())
>>> print(s.pop())
>>> print(s.pop())
>>> print(s.pop())
>>> print(s.pop())
>>> print(s.is_empty()) #mengecek apakah stack dalam keadaan kosong
Contoh aplikasi
• Bentuk aplikasi sederhana dari struktur data stack ini
adalah membalik sebuah kalimat yang di input.
• Contoh kalimat yang di input adalah “struktur data”
maka outputnya adalah “atad rutkurts”.
• Langkahnya adalah, setiap huruf, mulai dari kiri ke
kanan, di masukkan (push) seluruhnya ke dalam stack.
Kemudian satu persatu huruf ini diambil (pop) dari
stack, dengan demikian kalimat akan terbaca terbalik.
Implementasi stack
untuk membalik kalimat

Contoh eksekusi-nya
Latihan
• Rancang program menggunakan stack untuk membentuk
output berikut ini:

Masukkan Kalimat : ALGORITMA DAN STRUKTUR DATA


Kalimat dibalik : DATA STRUKTUR DAN ALGORITMA

• Selesaikan dengan memanfaatkan beberapa stack.


Aplikasi: infix ke suffix
Aplikasi yang lain dari tumpukan (stack) adalah penulisan notasi “polish” dari
ekspresi matematis. Ketika compiler akan melaksanakan ekspresi matematis maka
notasi yang dikenal adalah notasi infix yang diubah ke notasi polish (atau notasi
suffix), misalnya sebagai berikut:
 
infix: a – b * c suffix (polish): a b c * –
a+b*c+d abc*+d+
a–b+c/d+e ab–cd/+e+
Agar proses penterjemahan notasi infix ke notasi polish dapat dilakukan
maka diperlukan tabel atau vektor dari urutan (precedence) simbol operator
serta rank-nya, seperti pada tabel berikut ini.

Simbol Precedence ( f ) Rank ( r )


+ - 1 -1
* / 2 -1
a, b, c, … 3 1
# 0  
Algoritma-nya
Input (masukan) algoritma adalah string infix yang diakhiri oleh tanda ‘#’,
output (keluaran) algoritma adalah notasi polish. Secara umum algoritma-
nya sebagai berikut:

1. Inisialisasi isi tumpukan S dengan simbol #


2. Baca notasi infix, kemudian ambil satu simbol mulai dari sisi paling kiri
3. Lakukan perulangan hingga langkah ke-6 selama input <> #
4. Ambil dan keluarkan (pop) simbol pada tumpukan apabila nilai precedence-nya
>= nilai precedence dari input saat ini.
5. Masukkan (push) simbol input ke dalam tumpukan
6. Baca kembali simbol berikutnya dari string infix.
Implementasi stack
untuk mengubah infix ke suffix
Contoh eksekusi
Thank You :)

Anda mungkin juga menyukai