0% menganggap dokumen ini bermanfaat (0 suara)
31 tayangan35 halaman

Materi Stack and Queue

Dokumen ini membahas tentang stack dan queue sebagai struktur data linear. Stack dan queue merupakan struktur data abstrak yang dapat diimplementasikan menggunakan array atau linked list. Dokumen ini juga menjelaskan operasi dasar dan contoh penerapan stack dan queue.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
31 tayangan35 halaman

Materi Stack and Queue

Dokumen ini membahas tentang stack dan queue sebagai struktur data linear. Stack dan queue merupakan struktur data abstrak yang dapat diimplementasikan menggunakan array atau linked list. Dokumen ini juga menjelaskan operasi dasar dan contoh penerapan stack dan queue.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 35

Stack dan Queue

(Dengan Array)
Struktur Data Linear
 Adalah kumpulan komponen-komponen yang tersusun
membentuk satu garis linear.
 Stack: struktur data linear dimana penambahan atau
pengurangan komponen dilakukan di satu ujung saja (LIFO).
 Queue: struktur data linear dimana penambahan
komponen dilakukan di satu ujung, sementara
pengurangan dilakukan di ujung lain (FIFO).
 Kedua struktur tersebut merupakan struktur data abstrak
dimana implementasi pada tingkat lebih rendah dapat
menggunakan struktur sequential (array) atau struktur
berkait (linear linked-list).
Stack

Kita hanya dapat mengakses data yang paling


akhir dimasukkan.
Stack
(lanjutan 1)

Operasi-operasi dasar:
Operasi Keterangan
Push digunakan untuk menambah data pada Stack (pada
tumpukan paling atas).
Pop digunakan untuk mengambil data pada Stack (pada
tumpukan paling atas).
IsEmpty fungsi yang digunakan untuk mengecek apakah Stack
masih kosong.
IsFull fungsi yang digunakan untuk mengecek apakah Stack
sudah penuh.
Peek melihat data paling atas dari Stack

Clear digunakan untuk mengosongkan Stack.


Stack
(lanjutan 2)
Stack
(lanjutan 3)

 Variabel top digunakan untuk yang mencatat


indek dalam array dari top of the stack.
 Untuk stack kosong maka top berharga -1.
top = -1 (inisialisasi)
 Dengan demikian operasi isEmpty
memeriksa apakah top=-1, jika true maka
berarti Stack masih kosong. Maka method
isEmpty() adalah :
public boolean isEmpty() {
return (top == -1);
}
Stack
(lanjutan 4)

 Jika nilai top sama dengan jumlah array, maka


artinya Stack sudah penuh. Maka method isFull()
adalah :
public boolean isFull() {
return (top == max-1);
}
 Saat terjadi push, lakukan dengan increment top,
dan tulis data ke dalam posisi top tersebut dalam
array. Maka method push() adalah :
public void push(long j) {
isi[++top] = j;
}
Stack
(lanjutan 5)

 Saat terjadi pop, lakukan dengan decrement


top. Maka method pop() adalah :
public long pop() {
return isi[top--];
}
 Method untuk melihat data paling atas dari
Stack, yaitu method peek() adalah :
public long peek() {
return isi[top];
}
Stack
(lanjutan 6)

 Untuk mengosongkan Stack, maka digunakan method clear() yang


melakukan penghapusan data secara berulang-ulang sampai isi Stack
habis.
public void clear() {
while( !isEmpty() )
pop();
}
 Untuk melihat isi dari Stack, maka digunakan method tampil () seperti
berikut :
public void tampil() {
for(int i=top; i>=0; i--) {
System.out.print(isi[i]);
System.out.print(" ");
}
System.out.println("");
}
Aplikasi Stack

 Untuk kalkulator Scientific.


 3+4-2, ((2+4)*7)+3*(9–5), dan sebagainya.
 Ada 2 istilah: operand (angka) dan operator (+, -, *, /).
 Operasi aritmatika seperti 3+4-2 dan ((2+4)*7)+3*(9–
5) disebut dengan infix.
 Infix: operator yang diletakkan di antara 2 operand.
 Postfix: operator yang mengikuti operand.
 Prefix: kebalikan dari postfix.
 Infix harus diterjemahkan ke dalam Postfix untuk
membuat kalkulator Scientific.
Infix dan Postfix

Infix : 3+4 Postfix : 34+  Prefix : +34


Pengkalkulasian Infix oleh Manusia

1. Baca infix satu persatu dari kiri ke kanan.


2. Tugas utamanya adalah menemukan 2 operand
dan 1 operator.
Perhatikan juga apakah ada operator
selanjutnya atau tidak. Jika tidak ada langsung
dikalkulasi. Jika ada, perhatikan derajatnya, jika
sederajat atau lebih rendah, kalkulasi. Jika lebih
tinggi, tunda kalkulasi.
3. Lanjutkan pembacaan dan lakukan kalkulasi jika
memungkinkan.
Pengkalkulasian Infix oleh Manusia
(lanjutan 1)

Infix: 3 + 4 - 5
Pengkalkulasian Infix oleh Manusia
(lanjutan 2)

Infix: 2+4*5
Pengkalkulasian Infix oleh Manusia
(lanjutan 3)

Infix: 3*(4+5)
Penerjemahan Infix ke Postfix

Infix: A+B-C
Penerjemahan Infix ke Postfix
(lanjutan 1)

Infix: A+B*C
Penerjemahan Infix ke Postfix
(lanjutan 2)

Infix: A*(B+C)
Penerjemahan Infix ke Postfix
(lanjutan 3)

Infix: A+B*(C-D)
Penerjemahan Infix ke Postfix
(lanjutan 4)

Infix: A+B-C
Penerjemahan Infix ke Postfix
(lanjutan 5)

Infix: A+B*C
Penerjemahan Infix ke Postfix
(lanjutan 6)

A*(B+C)
Queue

Hanya dapat mengakses data yang paling


dahulu dimasukkan.
Queue
(lanjutan)

Operasi-operasi dasar:
Operasi Keterangan
EnQueue digunakan untuk menambah data pada Queue (pada urutan
paling belakang (ekor)).

DeQueue digunakan untuk mengambil data pada Queue (pada urutan


paling depan (kepala)).

IsEmpty fungsi yang digunakan untuk mengecek apakah Queue


masih kosong.

IsFull fungsi yang digunakan untuk mengecek apakah Queue


sudah penuh.

Peek Melihat data paling depan dari Queue


Clear digunakan untuk mengosongkan Queue.
Simple Idea Queue

 Simpan data-data dalam suatu array dimana


data paling depan harus pada index 0 dan
data paling belakang pada index+1 .
 Queue mula-mula kosong, oleh karena itu
index harus sama dengan -1.
 Dalam hal ini index disimbolkan dengan ekor,
sehingga :
 ekor = -1 (inisialisasi)
Simple Idea Queue
(lanjutan 1)

 Jika nilai ekor sama dengan jumlah array, maka


Queue penuh sehingga method untuk isFull()
adalah :
public boolean isFull() {
return (ekor == max-1);
}
 Jika nilai ekor sama dengan 0, maka artinya
Queue masih kosong sehingga method untuk
isEmpty() adalah:
public boolean isEmpty() {
return (ekor == -1);
}
Simple Idea Queue
(lanjutan 2)

 Enqueue dengan mudah: increment ekor dan masukkan


data pada indek ekor. Maka method enQueue()-nya :
public void enQueue(long j) {
ekor++;
isi[ekor] = j;
}
 Dequeue tidak efisien: setiap elemen harus digeserkan ke
depan kemudian nilai ekor dikurangi 1. Maka method
deQueue()-nya :
public void deQueue() {
for(int i=0; i<ekor; i++)
isi[i]=isi[i+1];
ekor--;
}
Simple Idea Queue
(lanjutan 3)

 Method untuk melihat data paling depan dari


Queue, yaitu method peek() adalah :
public long peek() {
return isi[0];
}
 Untuk mengosongkan Stack, maka digunakan
method clear() yang melakukan penghapusan
data secara berulang-ulang sampai isi Stack habis.
public void clear() {
while( !isEmpty() )
deQueue();
}
Simple Idea Queue
(lanjutan 4)

Untuk melihat isi dari Stack, maka digunakan


method tampil () seperti berikut :
public void tampil() {
for(int i=0; i<ekor+1; i++) {
System.out.print(isi[i]);
System.out.print(" ");
}
System.out.println("");
}
Circular Queue

 Menggunakan dua buah indek, yaitu kepala


dan ekor.
 Circular Queue mengorbankan satu tempat
kosong tepat didepan elemen pertama, yaitu
indek kepala.
 Jika indek kepala dan ekor sama dengan
jumlah array, maka Queue kosong.
 Circular Queue mula-mula diinisialisasi sbb :
kepala = max-1;
ekor = max-1;
Circular Queue
(lanjutan 1)

 Jika indek kepala sama dengan indek ekor maka Queue kosong
sehingga method isEmpty() adalah :
public boolean isEmpty() {
return (kepala ==ekor);
}
 Queue penuh jika penerus indek ekor sama dengan indek
kepala. Dengan demikian method isFull() adalah :
public boolean isFull() {
int next;
if(ekor == max-1)
next=0;
else next = ekor+1;
return (next == kepala);
}
Circular Queue
(lanjutan 2)

 Enqueue dilakukan dengan menggerakkan indek ekor dan indek


kepala tetap. Kemudian masukkan data pada indek ekor.
public void enQueue(long j) {
if(ekor == max-1)
ekor = 0;
else ekor++;
isi[ekor] = j;
}
 Dequeue dilakukan dengan menggerakkan indek kepala dan indek
ekor tetap.
public void deQueue() {
if(kepala == max-1)
kepala = 0;
else kepala++;
}
Circular Queue
(lanjutan 3)

 Method untuk melihat data paling depan dari Queue, yaitu method
peek() adalah :
public long peek() {
return isi[kepala];
}
Ada hubungannya dengan deQueue, melihat data sekaligus
mengambil.
 Untuk mengosongkan Stack, maka digunakan method clear() yang
melakukan penghapusan data secara berulang-ulang sampai isi Stack
habis.
public void clear() {
while( !isEmpty() )
deQueue();
}
Circular Queue
(lanjutan 4)
Untuk melihat isi dari Circular Queue, else {
maka digunakan method tampil () for(i=kepala+1; i<max; i++) {
seperti berikut : System.out.print(isi[i]);
System.out.print(" ");
public void tampil() {
int i; }
if(kepala < ekor) { for(i=0; i<=ekor; i++) {
for(i=kepala+1; i<=ekor; i++) { System.out.print(isi[i]);
System.out.print(isi[i]); System.out.print(" ");
System.out.print(" "); }
}
}
}
System.out.println("");
}

Anda mungkin juga menyukai