0% menganggap dokumen ini bermanfaat (0 suara)
9 tayangan32 halaman

MG 10 - Implementasi Stack Dan Queue Dengan Array

Dokumen ini membahas implementasi struktur data Stack dan Queue menggunakan array. Stack diimplementasikan dengan prinsip Last-In-First-Out (LIFO) dan Queue dengan prinsip First-In-First-Out (FIFO), termasuk algoritma untuk menambah dan menghapus elemen. Contoh kode dalam C disertakan untuk menunjukkan cara kerja kedua struktur data tersebut.

Diunggah oleh

Zhuhal
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)
9 tayangan32 halaman

MG 10 - Implementasi Stack Dan Queue Dengan Array

Dokumen ini membahas implementasi struktur data Stack dan Queue menggunakan array. Stack diimplementasikan dengan prinsip Last-In-First-Out (LIFO) dan Queue dengan prinsip First-In-First-Out (FIFO), termasuk algoritma untuk menambah dan menghapus elemen. Contoh kode dalam C disertakan untuk menunjukkan cara kerja kedua struktur data tersebut.

Diunggah oleh

Zhuhal
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/ 32

IMPLEMENTASI STACK DAN Institut Teknologi

QUEUE DENGAN ARRAY Sumatera


A L G O R I T M A DA N S T R U KT U R DATA
POKOK BAHASAN

• Implementasi Stack dengan


Representasi Array
• Implementasi Queue Alternatif III
dengan Representasi Array
IMPLEMENTASI STACK
PENDAHULUAN
TOP
TOP

BOTTOM BOTTOM

• Struktur data merupakan langkah dalam penyimpanan data


bersama dengan kumpulan operasi untuk manipulasi data
tersebut.
• Struktur data sederhana yang dikenal dengan stack, yang
merupakan bentuk abstraksi dari tumpukan secara vertikal pada
obyek secara fisik.
PENDAHULUAN
• Stack merupakan list linier yang:
 Dikenali elemen puncaknya (TOP)
 Aturan penyisipan dan penghapusan elemennya
tertentu:
 Penyisipan selalu dilakukan "di atas" TOP
 Penghapusan selalu dilakukan pada TOP

• TOP adalah satu-satunya alamat tempat terjadi


operasi
• Last-In-First-Out (LIFO)
DEFINISI FUNGSIONAL
Fungsi Keterangan
void CreateEmpty() Membuat sebuah stack kosong
boolean IsEmpty() Menguji apakah stack dalam kondisi
kosong, true jika stack kosong, dan
false jika tidak
boolean IsFull() Menguji apakah stack dalam kondisi
penuh, true jika stack penuh, dan false
jika tidak
void Push() Menambahkan sebuah elemen,
sehingga kondisi TOP saat ini akan
berubah
DEFINISI FUNGSIONAL
• Definisi Selektor:
 Jika S adalah sebuah Stack, maka
 Top(S) adalah alamat elemen TOP, di mana operasi
penyisipan/penghapusan dilakukan
 InfoTop(S) adalah informasi yang disimpan pada Top(S)

• Definisi Stack kosong adalah Stack dengan


Top(S)=Nil (tidak terdefinisi)
REPRESENTASI STACK
DENGAN TABEL
• Representasi tabel sangat tepat untuk
mewakili Stack
 Pada Stack : operasi penambahan dan
pengurangan hanya dilakukan di salah satu
“ujung” tabel
 Pada Tabel: operasi boleh di manapun.
REPRESENTASI STACK
DENGAN TABEL
• Ilustrasi Stack tidak kosong, dengan 5
elemen:

• Ilustrasi Stack kosong


IMPLEMENTASI STACK
DENGAN ARRAY
#define nil 0
#define MaxEl 10

typedef int infotype;


typedef int address;
typedef struct {
infotype Data[MaxEl+1];
address TOP;
} stack;

#define TOP(S) (S).TOP


#define InfoTop(S) (S).Data[(S).TOP]
IMPLEMENTASI STACK
DENGAN ARRAY
void CreateEmpty(stack *S) {
TOP(*S) = nil;
}

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

• Ilustrasi Queue tidak kosong, dengan 5 elemen,


dengan HEAD tidak berada di posisi awal, tetapi
masih “lebih kecil” atau “sebelum” TAIL
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
• Ilustrasi Queue tidak kosong, dengan 5 elemen,
HEAD tidak berada di posisi awal, tetapi “lebih
besar” atau “sesudah” TAIL (akibat
penghapusan/penambahan)
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III

Algoritma penambahan elemen:


• Jika masih ada tempat, “majukan” TAIL
• Jika TAIL sudah mencapai IdxMax, maka suksesor dari
IdxMax adalah 1 sehingga TAIL yang baru adalah 1
• Jika TAIL belum mencapai IdxMax, maka elemen
ditambahkan pada ruang berikutnya
• Kasus khusus untuk Queue kosong karena nilai HEAD
dan TAIL harus diset menjadi 1
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
Algoritma penghapusan elemen:
• Jika Queue tidak kosong: ambil nilai elemen HEAD, kemudian
HEAD “maju”. Penentuan suatu suksesor dari indeks yang
diubah/”maju” dibuat seperti pada algoritma penambahan
elemen: jika HEAD mencapai IdxMax, maka suksesor dari
HEAD adalah 1
• Kasus khusus untuk Queue dengan keadaan awal berelemen
1 buah, yaitu menyesuaikan HEAD dan TAIL dengan DEFINISI.
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III

• Algoritma ini efisien karena tidak perlu


pergeseran, dan seringkali strategi
pemakaian tabel semacam ini disebut
sebagai “circular buffer”, di mana tabel
penyimpan elemen dianggap sebagai
“buffer”
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
#define Nil 0
#define MaxEl 5

typedef int infotype;


typedef int address;
typedef struct {
infotype T[MaxEl+1];
address HEAD;
address TAIL;
} Queue;

#define Head(Q) (Q).HEAD


#define Tail(Q) (Q).TAIL
#define InfoHead(Q) (Q).T[(Q).HEAD]
#define InfoTail(Q) (Q).T[(Q).TAIL]
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
int isEmpty(Queue Q) {
return ((Head(Q)==Nil) && (Tail(Q)==Nil));
}

int isFull(Queue Q) {
return (NbElmt(Q)==MaxEl);
}

void CreateEmpty(Queue *Q) {


Head(*Q) = Nil;
Tail(*Q) = Nil;
}
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
int NbElmt(Queue Q) {
if (isEmpty(Q)) {
return 0;
} else {
if (Head(Q)<=Tail(Q)) {
return (Tail(Q)-Head(Q)+1);
} else {
return (MaxEl-Head(Q)+Tail(Q)+1);
}
}
}
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
void Add(Queue *Q, infotype x) {
if (!isFull(*Q)) {
if(isEmpty(*Q)) {
Head(*Q) = 1;
Tail(*Q) = 1;
} else {
if (Tail(*Q)==MaxEl) Tail(*Q)=1;
else Tail(*Q)++;
}
InfoTail(*Q) = x;
} else {
printf("Queue Penuh\n");
}
}
REPRESENTASI QUEUE DENGAN
TABEL
ALTERNATIF III
void Del(Queue *Q, infotype *hapus) {
*hapus = InfoHead(*Q);
if (Tail(*Q)==Head(*Q)) {
Head(*Q) = Nil;
Tail(*Q) = Nil;
} else {
if (Head(*Q)==MaxEl) Head(*Q)=1;
else Head(*Q)++;
}
}
int main() {
Queue DataAntrian;
int i, hapus;

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);

printf("Isi Queue = ");


while (Head(DataAntrian)!=Nil) {
printf("%d, ", InfoHead(DataAntrian));
Del(&DataAntrian, &hapus);
}
printf("\n");

return 0;
}
TERIMA KASIH

Anda mungkin juga menyukai