Sabtu, 08 November 2014

Struktur Data (Pertemuan 3)

STACK (TUMPUKAN)

Secara sederhana diartikan dengan :
·                     Sebagai tumpukan dari benda 
·                     Sekumpulan data yang seolah-olah diletakkan di atas data yang lain 
·                     Koleksi dari objek-objek
Dengan melihat definisi tersebut maka jelas bahwa pada stack berlaku aturan LIFO (First In Firs Out) yaitu elemen yang terakhir masuk akan pertama kali diambil atau dilayani.

ILUSTRASI STACK

          Salah satu analogi yang dapat dikemukakan di sini adalah tumpukan piring atau barang lain. Pada saat kita hendak menumpuk piring-piring tersebut tentulah yang kita lakukan adalah meletakkan piring pertama pada tempatnya, selanjutnya meletakkan piring kedua di atas piring pertama dan demikian seterusnya. Pada saat kita akan mengambil satu piring maka yang diambil piring yang paling atas.
             
ILUSTRASI STACK-CONT


OPERASI PADA STACK

2 operasi dasar yang dapat dilaksanakan pada sebuah stack, yaitu :
ü  Operasi Push (menyisipkan data) memasukkan data ke dalam stack.
ü  Opersi Pop (menghapus data) menghapus elemen yang terletak pada posisi paling atas dari sebuah stack.

Contoh pemakaian operasi pust dan pop dan isi stack untuk setiap selesai eksekusi satu operasi.

Operasi yang dilakukan
Isi stack
Keterangan
Kondisi awal
Kosong
-
PUSH (‘A’,S)
A
-
PUSH (‘B’,S)
AB
-
PUSH (‘C’,S)
ABC
-
POP (Data,S)
AB
Data Berisi ‘C’
PUSH (‘D’,S)
ABD
-
POP (Data,S)
AB
Data Berisi ‘D’
POP (Data,S)
A
Data Berisi ‘B’

IMPLEMENTASI STACK DALAM BAHASA PEMOGRAMAN
·                     Implementasi dalam bahasa Pascal dapat dilakukan denagnmemanfaatkan struktur data record dan array. Arraydipergunakan untuk menyimpan elemen-elemen yang dimasukkan. Selain itu diperlukan pula suatu variabel untuk mencatat banyaknya elemen yang ada di dalam array yang sekaligus menggunakan IOS.
Pada Implementasi di bawah Ini :
·                     Konstanta maxelm menyatakan banyaknya elemen maksimum yang dapat ditampung oleh stack.
·                     Typeelemen adalah tipe data yang akan disimpan di dalam stack (bisa integer, word, real, boolean, char, string, atau lainnya). Banyak field yang menyatakan elemen dalam stack saat itu, yang sekaligus menyatakan TOS (Top of the stack)

DEKLARASI TIPE UNTUK TUMPUKAN (STACK)
            Type tumpukan = record
                        Banyak : 0..maxelm;
                        Elemen : array[1..maxelm] of typeelemen;
            End;

CONT
·                     Selain prosedur untuk POP dan PUSH, kita dapat pula menambahkan sejumlah fungsi untuk membantu penanganan kesalahan diantaranya adalah fungsi PENUHS (untuk mengecek apakah stack penuh) fungsi KOSONGS (untuk mengecek apakah stack kosong) fungsi SIZES (untuk mengetahui banyaknya elemen di dalam stack). Masing-masing sub program di atas dapat disajikan pseudocode-nya sebagai berikut :

Ø  PSEUDOCODE
o   Procedure Inisialisasi(var S : tumpukan);
begin
S. banyak-0
end;
o   Function PENUHS(S : tumpukan): boolean;
begin
Jika S.banyak = maxelm maka PENUHS - true
else PENUHS - false
end;

Ø  PSEUDOCODE CONT
o   Function KOSONGS(S : tumpukan):boolean;
begin
If S.banyak = 0 then KOSONGS - true
else KOSONGS - false
end;
o    Procedure PUSH(data : tipelemen; var S : tumpukan);
begin
If not KOSONGS(S) then
begin
            S.banyak - S.banyak + 1
            S.elemen[S.banyak]- data
end
else
Tampilan pesan kesalahan “Stack Penuh”
end;
o    Procedure POP(var S : tumpukan; var data : typeelemen);
begin
if not KOSONGS(S) then
begin
            data  S.elemen[S.banyak]
            S.banyak  S.banyak -1
end
else
Tampilan pesan kesalahan “Stack Kosong”
End:

PENJELASAN OPERASI PADA STACK 
v  Buat stack (stack) – create
           Membuat sebuah stack baru yang masih kosong.
#Spesifikasi
§   Tujuan           : mendefinisikan stack yang kosong
§    Input              : stack
§    Syarat awal   : tidak ada
§    Output stack  : - (kosong)
§    Syarat aktif    : stack dalam keadaan kosong
v  Stack kosong (stack) – empty
            Fungsi untuk menentukan apakah stack dalam keadaan kosong atau tidak.
#Spesifikasi
§  Tujuan          : mengecek apakah stack dalam keadaan kosong
§  Input             : stack
§  Syarat awlal : tidak ada
§  Output          : boolean
§  Syarat akhir : stack kosong bernilai true jika stack dalam keadaan kosong.

v  Stack penuh (stack) – full
           Fungsi untuk memeriksa apakah stack yang ada sudah penuh.
#Spesifikasi
§  Tujuan          : mengecek apakah stack dalam keadaan penuh
§  Input             : stack
§  Syarat awlal : tidak ada
§  Output          : boolean
§  Syarat akhir : stack kosong bernilai true jika stack dalam keadaan penuh.

v  Push (stack, info baru)
           Menambahkan sebuah elemen ke dalam stack       
#Spesifikasi
§  Tujuan          : menambahkan elemen, info baru pada stack pada posisi paling atas.
§  Input             : stack dan info baru
§  Syarat awlal : stack tidak penuh
§  Output          : stack
§  Syarat akhir : stack bertambah satu elemen.

QUEUE (ANTRIAN)

DEFINISI
o   Queue adlah suatu linear lish dimana operasi DELETE terjadi pada sisi depan (FRONT) dan operasi INSERT terjadi pada sisi belakang(REAR).
Jika diberikan suatu Queue Q dengan elemen-elemennya yang terdiri atas Q1, Q2, ...., Qmaka queue Q dituliskan :
            Q = [ Q1, Q2, ...., Q]
·         FRONT (Q) = Q1
·         REAR (Q) = QT
o   Selanjutnya untuk menyatakan jumlah elemen dalam suatu queue Q digunakan notasi NOEL (Q). 
o   Catatan : Satu pengoperasian berlaku hanya untuk satu elemen.
CONT.
o   Pada queue prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (Firs In Firs Out).
o   Data-data di dalam antrian dapat bertipe integer, real, record
ILUSTRASI QUEUE




OPERASI-OPERASI PADA QUEUE (Q)
o   Terdapat empat operasi dasar yang didefinisikan pada queue, yaitu :

1.  CREATE
Bentuk umum            : CREATE (Queue)
Suatu operasi CREATE (Q) akan menghasilkan suatu queue kosong dengan nama Q, dan didefinisikan bahwa :
            NOEL (CREATE (Q))              = 0
            FRONT (CREATE (Q))           = tidak terdefinisi
            REAR  (CREATE (Q))             = tidak terdefinisi
2.  ISEMPTY
Bentuk umumnya adalah : INEMPTY (queue)
Jika Q adalah Queue, maka ISEMPTY(Q) adalah suatu operasi yang digunakan untuk memeriksa apakah Queue Q adalah queue kosong. Jika hasil dari operasi ini akan berjenis data boolean (true/false),dengan bentuk sebagai berikut :
            ISEMPTY(Q)   = True, jika Q adalah queue kosong
                                       = False, jika Q bukan queue kosong
3.  INSERT
Bentuk Umumnya : INSERT (Elemen, Queue)
INSERT(E,Q), dimana E = elemen dan Q = queue, adalah suatu operasi yang digunakan untuk memasukkan elemen E ke dalam queue Q.
Didefinisikan, bahwa elemen E akan menjadi elemen yang berada pada posisi REAR dan queue Q. Akibat dari operasi ini adalah :
-          REAR(insert(E,Q)) = E
-          NOEL(Q) bertambah satu dan QNOEL adalah E
     Jika Q adalah queue kosong, maka :
            ISEMPTY(INSERT(E,Q)) = False
Dalam bentuk statemen Pascal, biasanya dituliskan :
            IF ISEMPTY(Q) Then front (insert(E,Q)) = E
                        Else front(insert(E,Q = front(Q);
4.  REMOVE
Bentuk umum : REMOVE(elemen, queue)
REMOVE(Q) berarti mengeluarkan elemen Q yang berada pada posisi FRONT. Akibat dari operasi ini, elemen Q akan berkurang satu dan elemen kedua (elemen yang berada disebelahnya) akan menjadi elemen yang berada pada posisi FRONT dari queue Q ini.
Selanjutnya, jika Q adalah queue kosong, maka REMOVE(Q) akanmenghasilkan suatu Error.
            IF NOEL(Q) = 0 Then Remove(Q) = erroe_condition
            Remove(create(Q)) = error_condition

DEKLARASI QUEUE DALAM PASCAL
·                     Dalam bahasa pemrograman biasanya tidak ada fasilitas queue (built in queue). Untuk itu setiap programmer harus mendefinisikan sendiri dengan bantuan fasilitas yang ada. Pada umumnya fasilitas yang digunakan untuk mendeklarasikan queue adalah Array, Bentuk deklarasinya dalam bahasa sebagai berikut :
            TYPE StrukQueue = Record
                        Q : Array[1...100] of integer;
            Front, Rear : Integer;
            End;
VAR Q : StrukQueue;

Tidak ada komentar:

Posting Komentar