Modul 2 Tumpukan Dan Antrian
Modul 2 Tumpukan Dan Antrian
MODUL 2
TUMPUKAN (STACK) DAN ANTRIAN (QUEUE)
2.1 TUJUAN
Tujuan modul ini, adalah:
Memperkenalkan penggunaan perangkat lunak bahasa pemrograman untuk
mengimplementasikan struktur data (tipe data abstrak, tumpukan/stack dan
antrian/queue).
Memperkenalkan instruksi-instruksi yang dapat digunakan untuk menerapkan
struktur data tersebut.
Memperkenalkan cara pembuatan program yang berhubungan dengan konsep
tumpukan dan antrian.
Melatih mahasiswa menyelesaikan masalah tentang tumpukan dan antrian
dalam bentuk program aplikasi.
Penyajian Stack
Ada beberapa cara untuk menyajikan sebuah stack dalam bahasa pemrograman
Pascal. Cara penyajian ini didasarkan pada tipe struktur data yang digunakan.
Cara yang pertama menggunakan tipe struktur data yang disebut larik (array),
sedangkan cara yang kedua menggunakan struktur data senarai berantai (list).
Masing-masing cara mempunyai kekurangan dan kelebihan.
Penyajian dengan menggunakan array mudah diimplementasikan dalam bahasa
pemrograman, tetapi cara ini juga mempunyai kelemahan yaitu jumlah elemen
dalam stack sudah tertentu (statis), sedangkan dengan menggunakan senarai
berantai (list) kelemahan ini bisa ditutupi.
Dalam bab ini kita akan menggunakan array untuk mengimplementasikan stack.
Contoh deklarasi stack dengan menggunakan array adalah sebagai berikut :
#define MaxElemen 255
typedef struct{
int Isi[MaxElemen];
int Atas;
}Stack;
Setelah mendeklarasikan suatu stack, maka yang harus kita lakukan adalah
melakukan inisialisai dari stack tersebut. Contoh prosedur untuk menginisialisasi
stack adalah
//************************************************
//* Prosedur inisialisasi awalan *
//************************************************
void Awalan (Stack Tumpukan){
Tumpukan.Atas = 0;
}
Operasi Push
Operasi Push digunakan untuk menyisipkan atau menambah data pada stack.
Contoh prosedur untuk operasi Push adalah sebagai berikut :
//************************************************
//* Program 2.2. *
//* Prosedur untuk memasukan elemen ke dalam tumpukan *
//************************************************
void Push(Stack Tumpukan, int penuh, int elemen){
if (Tumpukan.Atas == MaxElemen){
Penuh = 1; }//Penuh=True
else{
penuh = 0;//Penuh=False
Tumpukan.Atas = Tumpukan.Atas + 1;
Tumpukan.Isi[Tumpukan.Atas] = elemen;}
}
Program 2.2. Prosedur Untuk Memasukan Elemen Ke Dalam Tumpukan
Operasi Pop
Operasi Pop digunakan untuk menghapus elemen yang terletak pada posisi paling
atas dari sebuah stack. Contoh prosedur untuk operasi Pop adalah sebagai berikut:
//****************************************************
//* Program 2.3. *
//* Prosedur untuk menghapus elemen pada stack *
//****************************************************
void Pop (Stack Tumpukan , int elemen){
if (Tumpukan.Atas == 0){
printf(‘Stack kosong\n’);}
else {
Elemen = Tumpukan.Isi[Tumpukan.Atas];
Tumpukan.Atas = Tumpukan.Atas –1;}
}
e
c d d d
b b b b b b b
a a a a c c c c c
Suatu antrian dapat diimplementasikan dalam bentuk array Q[0..N]. Dalam hal ini
diperlukan dua buah indeks khusus (atau pointer dalam implementasi list berkait)
yaitu depan dan belakang. Depan selalu menunjuk pada unsur sebelum unsur yang
pertama dalam antrian sedangkan belakang, selalu menunjuk pada unsur yang
paling belakang yang ada dalam antrian. Jadi data yang dimasukkan dalam antrian
akan masuk dibagian belakang dan data yang akan dihapus dari antrian akan
dihapus dari depan. Dalam array Q[0..N] tadi hanya dapat disimpan dalam N
data. Satu tempat khusus digunakan untuk menunjukkan unsur yang paling depan.
Depan selalu menunjuk pada unsur yang seolah-olah ada di depan unsur yang
pertama.
Keadaan awal dari antrian adalah Depan = Belakang = 0. Bila ada pemasukkan
elemen baru, nilai belakang akan bertambah satu; sedangkan bila ada elemen yang
dikeluarkan, nilai Depan akan bertambah satu. Suatu antrian Q yang kosong dapat
dilihat dengan membandingkan Depan dan Belakang. Bila Depan = Belakang
antrian tersebut adalah kosong. Berikut adalah algoritma untuk Tambah dan
Hapus antrian
Procedure ADDQ (data, q,n,belakang);
Begin
Bila belakang = n maka antrian_penuh;
Belakang belakang + 1;
Q [belakang]data;
End;
Procedure DELETEQ(data,q,muka, belakang);
Begin
Bila muka = belakang maka antrian_kosong;
Muka muka +1;
Data q[muka];
End;
Kesulitan utama dari prosedur di atas adalah adanya kemungkinan nilai Depan
atau Belakang yang melewati harga N. hal ini mungkin saja terjadi dimana banyak
sekali data yang dimasukkan ke dalam antrian dan selain itu juga banyak data
yang dikeluarkan dari dalam antrian. Setiap data dimasukkan, nilai belakang
bertambah satu, sedangkan setiap data dikeluarkan nilai Depan bertambah satu,
lambat laun kedua nilai variabel tadi akan melewati nilai N (indeks maksimum
dari array Q). Untuk menanggulangi hal tersebut maka harus dilakukan suatu
mekanisme sehingga nilai Depan dan Belakang dapat berputar kembali menjadi 0
bila telah melewati nilai N (wrap around). Untuk ini digunakan operator modulo
N dalam perhitungan Depan := Depan + 1 dan Belakang := Belakang + 1
sehingga bentuknya berubah menjadi :
Depan (Depan + 1) MOD N
Belakang (Belakang + 1) MOD N
Dengan demikian nilai Depan atau Belakang yang lebih dari N akan kembali lagi
ke nilai 0. Implementasi dari queue dengan demikian sama dengan implementasi
dari sirkular.