MG 10 - Implementasi Stack Dan Queue Dengan Array
MG 10 - Implementasi Stack Dan Queue Dengan Array
BOTTOM BOTTOM
int IsEmpty(stack S) {
return (TOP(S) == nil);
}
int IsFull(stack S) {
return (TOP(S) == MaxEl);
}
IMPLEMENTASI STACK
DENGAN ARRAY
void Push(stack *S, infotype X) {
if (!IsFull(*S)) {
TOP(*S)++;
InfoTop(*S) = X;
} else {
printf(" * Stack Penuh\n");
}
}
IMPLEMENTASI STACK
DENGAN ARRAY
void Pop(stack *S, infotype *X) {
if (!IsEmpty(*S)) {
*X = InfoTop(*S);
TOP(*S)--;
} else {
printf(" * Stack Kosong\n");
}
}
IMPLEMENTASI STACK
DENGAN ARRAY
int main() {
stack DataTest;
infotype DataHapus;
CreateEmpty(&DataTest);
printf("Push(3)\n"); Push(&DataTest, 3);
………
printf("Pop() -> "); Pop(&DataTest, &DataHapus);
printf("Hapus %d\n",DataHapus);
printf("\nIsi Stack\n");
while (!IsEmpty(DataTest)) {
Pop(&DataTest, &DataHapus);
printf("%d\n",DataHapus);
}
return 0;
}
IMPLEMENTASI QUEUE
PENDAHULUAN
• QUEUE adalah list linier yang:
dikenali elemen pertama (HEAD) dan elemen terakhirnya
(TAIL)
aturan penyisipan dan penghapusan elemennya
didefinisikan sebagai berikut:
Penyisipan selalu dilakukan setelah elemen terakhir
Penghapusan selalu dilakukan pada elemen pertama
satu elemen dengan yang lain dapat diakses melalui
informasi NEXT
PENDAHULUAN
• Elemen Queue tersusun secara FIFO (First In First
Out)
• Pemakaian queue:
antrian job yang harus ditangani oleh sistem operasi
(job scheduling)
antrian dalam dunia nyata
DEFINISI FUNGSIONAL
Fungsi Keterangan
void CreateEmpty() Membuat sebuah antrian kosong
boolean IsEmpty() Menguji apakah antrian dalam kondisi
kosong, true jika antrian kosong, dan
false jika tidak
boolean IsFull() Menguji apakah antrian dalam kondisi
penuh, true jika antrian penuh, dan
false jika tidak
void Add() Menambahkan sebuah elemen setelah
ekor (elemen terakhir) dari antrian
REPRESENTASI QUEUE
DENGAN TABEL
• Memori tempat penyimpan elemen adalah sebuah
tabel dengan indeks 1..IdxMax.
• IdxMax dapat juga “dipetakan” ke kapasitas Queue
• Representasi field Next: Jika i adalah “address”
sebuah elemen, maka suksesor i adalah Next dari
elemen Queue.
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
• Tabel dengan representasi HEAD dan TAIL yang
“berputar” mengelilingi indeks tabel dari awal
sampai akhir, kemudian kembali ke awal
• Jika Queue kosong, maka HEAD=0 dan TAIL=0
• Representasi ini memungkinkan tidak perlu lagi
ada pergeseran yang harus dilakukan seperti pada
alternatif II pada saat penambahan elemen
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
• Ilustrasi Queue tidak kosong, dengan 5 elemen,
dengan HEAD “sedang” berada di posisi awal
int isFull(Queue Q) {
return (NbElmt(Q)==MaxEl);
}
CreateEmpty(&DataAntrian);
printf("Add(2)\n"); Add(&DataAntrian, 2);
printf("Add(3)\n"); Add(&DataAntrian, 3);
………
printf("Del() -> "); Del(&DataAntrian, &hapus);
printf("Hapus %d\n",hapus);
return 0;
}
TERIMA KASIH