Anda di halaman 1dari 18

Stack

Struktur Data

nur.zahrati@polibatam.ac.id
 Definisi Stack
 Representasi Stack
Overview
 Operasi pada Stack

2
 Secara bahasa, STACK = tumpukan
 Sekumpulan data yang organisasi atau strukturnya
bersifat tumpukan

Definisi Stack

3
 Last In First Out (LIFO)
 Data yang terakhir masuk ke dalam stack akan menjadi
yang pertama kali keluar
 Top menjadi satu-satunya alamat tempat terjadinya
operasi
Stack

4
 Cara paling sederhana untuk merepresentasikan stack
menggunakan array
 Dengan asumsi: banyaknya elemen stack tidak akan
melebihi batas maksimum elemen array
 Jadi dibutuhkan:
Representasi  1 buah array untuk menyimpan data stack dengan ukuran
maksimal tertentu
Stack  1 buah penunjuk elemen teratas dari stack (top)
 Buat struktur (struct) untuk stack

5 7 10 Top = 2
0 1 2 3 4 5 6 7 8 9

5
 Stack dapat juga direpresentasikan sebagai list dengan
Representasi pointer untuk ukuran stack bervariasi (tidak terbatas
Stack jumlah maksimal elemen array)
 Belum dibahas sekarang

6
Jumlah maksimum isi stack
(modifikasi sesuai kebutuhan)

#define MAX 100

Representasi typedef int tipeItem;


Stack dengan typedef struct{
Array tipeItem data[MAX];
int top;
} Stack;

Tipe data yang hendak disimpan di masing-masing slot stack


(modifikasi sesuai kebutuhan)
7
 Push  menyisipkan elemen baru, jika tidak penuh
 Pop  mengambil dan menghapus elemen yang
terakhir disisipkan, jika tidak kosong

Operasi Utama Contoh operasi:


pada Stack Stack X push(10)
push(2)
push(4)
pop()
pop()
push(1)

Bagaimana isi stack X sekarang?

8
 Create/inisialisasi  membuat stack baru
yang masih kosong
 isEmpty  mengembalikan true jika stack
Operasi Lain kosong
pada Stack  isFull  mengembalikan true jika stack penuh
 getTop  mengambil elemen yang terakhir
disisipkan, jika tidak kosong

9
Stack S;

Membuat
Variabel Variabel S bertipe Stack yang dideklarasikan sebagai
variabel global (dideklarasikan di atas main)
Bertipe Stack
Variabel S ini akan dijadikan contoh dalam penjelasan
operasi-operasi pada stack di slide selanjutnya
 Membuat stack baru yang masih kosong
 K. Awal: Sembarang
 K. Akhir: Tercipta stack kosong

 Set nilai top di bawah nilai indeks terkecil yang mungkin dari array
 Misal: indeks array dimulai dari 0, maka set top = -1

Create
void create(Stack *S)
/Inisialisasi {
(*S).top = -1;
} int main()
{
create(&S);

}
 Memeriksa apakah stack kosong
 Stack kosong jika top = -1
 Pemeriksaan isEmpty dilakukan sebelum operasi
getTop dan Pop

isEmpty int isEmpty(Stack S)


{
return (S.top == -1);
}

Mengembalikan 0 jika false,


Bilangan lain jika true
 Memeriksa apakah stack penuh
 Stack penuh jika top = …?
 Pemeriksaan isFull dilakukan sebelum operasi Push

int isFull(Stack S)
isFull {
return (S.top == MAX-1);
}

Mengembalikan 0 jika false,


Bilangan lain jika true
 Menyisipkan elemen baru setelah elemen terakhir
(yang berada di top)
 Nilai top dinaikkan satu
Push
 Elemen top yang baru diisi dengan elemen yang
hendak dimasukkan
 Dicek dahulu apakah sudah penuh

14
K. Awal: Stack S dan x sudah terdefinisi, S tidak
penuh
K. Akhir: top = top+1 dan x menjadi elemen top
stack

void push(Stack *S, tipeItem x)


{
Push if (!isFull(*S)){
(*S).top++;
(*S).data[(*S).top] = x;
} else
printf("Stack penuh. Push gagal.\n");
}

15
 Menghapus elemen terakhir stack
 Mengubah nilai top (dikurangi 1)
 Dicek dahulu apakah stack kosong

K. Awal: Stack S sudah terdefinisi, S tidak kosong


K. Akhir: top  top - 1
Pop void pop(Stack *S)
{
if (!isEmpty(*S))
(*S).top--;
else
printf("Stack kosong. Pop gagal.\n");
}
 Mengambil elemen pada top stack
 Pastikan stack tidak kosong sebelum dilakukan getTop

tipeItem getTop(Stack S)
getTop {
return (S.data[S.top]);
}
Apa saja yang sudah Anda pelajari hari ini?

18

Anda mungkin juga menyukai