• Tidak ada hasil yang ditemukan

STACK (TUMPUKAN)

Dalam dokumen Modul Struktur Data IF (Halaman 78-85)

STRUKTUR DATA 66

STRUKTUR DATA 67

6.3 Operasi-Operasi dalam Stack

Dalam stack ada dua operasi utama, yaitu operasi penyisipan (Push) dan operasi pengambilan (Pop).

6.3.1 Push

Adalah operasi menyisipkan elemen pada tumpukan data. Fungsi ini sama dengan fungsi insert first pada list biasa. Langkah – langkah dalam proses Push:

Gambar 6-2 Stack Push 1

Gambar 6-3 Stack Push 2

Gambar 6-4 Stack Push 3 /* buat dahulu elemen yang akan disisipkan */

address createElm(int x){

address p = alokasi(x);

next(p) = null;

return p;

}

/* contoh sintak push */

void push(address p){

next(p) = top(s);

top(s) = p;

}

P = alokasi(X);

next(P) = Nil

next(P) = Top(S);

Top(S) = P;

STRUKTUR DATA 68

6.3.2 Pop

Adalah operasi pengambilan data dalam list. Operasi ini mirip dengan operasi delete first dalam list linear, karena elemen yang paling pertama kali diakses adalah elemen paling atas atau elemen paling awal saja. Langkah-langkah dalam proses Pop:

Elemen 2 Elemen 1

TOP

Nil Elemen 3

Gambar 6-5 Stack Pop 1

Gambar 6-6 Stack Pop 2

Gambar 6-7 Stack Pop 3 /* contoh sintak pop */

address pop(address p){

p = top(s);

top(s) = next(top(s));

return p;

}

6.4 Primitif-Primitif dalam Stack

Primitif-primitif dalam stack pada dasarnya sama dengan primitif-primitif pada list lainnya. Malahan primitif dalam stack lebih sedikit, karena dalam stack hanya melakukan operasi-operasi terhadap elemen paling atas.

Primitif -primitif dalam stack : 1. createStack().

2. isEmpty().

3. alokasi().

4. dealokasi().

5. Fungsi – fungsi pencarian.

6. Dan fungsi – fungsi primitif lainnya.

P = Top(S);

Top(S) = next(Top(S));

return P;

STRUKTUR DATA 69

Seperti halnya pada model list yang lain, primitif-primitifnya tersimpan pada file *.c dan file *.h.

6.5 Stack (Representasi Tabel)

Pada prinsipnya representasi menggunakan tabel sama halnya dengan menggunakan pointer.

Perbedaannya terletak pada pendeklarasian struktur datanya, menggunakan array berindeks dan jumlah tumpukan yang terbatas.

Top Imax

0 1 2 3 4 5 6 7 8 9 10

Gambar 6-8 Stack Kosong dengan Representasi Table

Gambar di atas menunjukan stack maksimum terdapat pada indeks Imax=10, sedangkan Stack masih kosong karena Top = 0.

6.5.1 Operasi-operasi Dalam Stack

Operasi-operasi dalam stack representasi tabel pada dasarnya sama dengan representasi pointer, yaitu PUSH dan POP.

A. Push

Push merupakan operasi penyisipan data ke dalam stack, penyisipan dilakukan dengan menggeser indeks dari TOP ke indeks berikutnya. Perhatikan contoh dibawah ini:

Top Imax

0 1 2 3 4 5 6 7 8 9 10

Top = Top+1

Top Imax

X

0 1 2 3 4 5 6 7 8 9 10

Gambar 6-9 Push Elemen dengan Representasi Tabel B. Pop

Pop merupakan operasi pengambilan data di posisi indeks TOP berada dalam sebuah stack. Setelah data diambil, indeks TOP akan bergeser ke indeks sebelum TOP tanpa menghilangkan info dari indeks TOP sebelumnya. Perhatikan contoh dibawah ini:

Top Imax

X X X X

STRUKTUR DATA 70

0 1 2 3 4 5 6 7 8 9 10

Temp = S.Info[TOP]

TOP = TOP-1

Top Imax

X X X X

0 1 2 3 4 5 6 7 8 9 10

Gambar 6-10 Pop Elemen dengan Representasi Tabel

6.5.2 Primitif-primitif Dalam Stack

Primitif-primitif pada stack representasi tabel pada dasarnya sama dengan representasi pointer.

Perbedaanya hanya pada manajemen memori, pada representasi tabel tidak diperlukan manajemen memori. antara lain sebagai berikut,

1. createStack().

2. isEmpty().

3. Fungsi – fungsi pencarian.

4. Dan fungsi – fungsi primitif lainnya.

Seperti halnya pada model list yang lain, primitif-primitifnya tersimpan pada file *.c dan file *.h.

Untuk lebih memahami struktur data dari stack representasi tabel, berikut ini contoh ADT stack representasi tabel dalam file *.h:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

/* file : stack.h

contoh ADT stack dengan representasi tabel */

#ifndef STACK_H_INCLUDED

#define STACK_H_INCLUDED

#include <stdio.h>

#include <conio.h>

struct infotype { char nim[20];

char nama[20];

};

struct Stack {

infotype info[10];

int Top;

};

/* prototype */

/******** pengecekan apakah Stack kosong *********/

int isEmpty(Stack S);

/* mengembalikan nilai 0 jika stack kosong */

/******** pembuatan Stack ********/

void createStack(Stack &S);

/* I.S. sembarang

F.S. terbentuk stack dengan Top=0 */

/******** penambahan elemen pada Stack ********/

void push(Stack &S, infotype X);

/* I.S. Stack mungkin kosong

F.S. menambahkan elemen pada stack dengan nilai X, TOP=TOP+1 */

/******** penghapusan elemen pada list ********/

void pop(Stack &S, infotype &X);

/* I.S. stack tidak kosong

F.S. nilai info pada indeks TOP disimpan pada X, kemudian TOP=TOP-1 */

/******** proses semua elemen list *********/

void viewStack(Stack S);

/* I.S. stack mungkin kosong

STRUKTUR DATA 71 36

37

F.S. jika stack tidak kosong menampilkan semua info yang ada pada stack

*/

#endif // STACK_H_INCLUDED

6.6 Latihan

3. Buatlah ADT Stack menggunakan ARRAY sebagai berikut di dalam file “stack.h”:

Type infotype : integer Type Stack <

info : array [20] of integer top : integer

>

prosedur CreateStack( in/out S : Stack )

prosedur push( in/out S : Stack, in x : infotype) fungsi pop( in/out S : Stack ) : infotype

prosedur printInfo( in S : Stack ) prosedur balikStack( in/out S : Stack )

Program 2 Stack.h

Buatlah implementasi ADT Stack menggunakan Array pada filestack.cpp” dan “main.cpp

int main() {

cout << "Hello world!" <<

endl;

Stack S;

createStack(S);

Push(S,3);

Push(S,4);

Push(S,8);

pop(S) Push(S,2);

Push(S,3);

pop(S);

Push(S,9);

printInfo(S);

cout<<"balik stack"<<endl;

balikStack(S);

printInfo(S);

return 0;

}

Gambar 6-12 Main stack

2. Tambahkan prosedur pushAscending( in/out S : Stack, in x : integer)

int main() {

cout << "Hello world!" << endl;

Stack S;

createStack(S);

pushAscending(S,3);

pushAscending(S,4);

pushAscending(S,8);

pushAscending(S,2);

pushAscending(S,3);

pushAscending(S,9);

printInfo(S);

cout<<"balik stack"<<endl;

balikStack(S);

printInfo(S);

return 0;

}

Gambar 6-14 Main stack dengan push ascending

Gambar 6-11 Output stack

Gambar 6-13 Output stack push ascending

STRUKTUR DATA 72

3. Tambahkan prosedur getInputStream( in/out S : Stack ). Prosedur akan terus membaca dan menerima input user dan memasukkan setiap input ke dalam stack hingga user menekan tombol enter. Contoh: gunakan cin.get() untuk mendapatkan inputan user.

int main() {

cout << "Hello world!" << endl;

Stack S;

createStack(S);

getInputStream(S);

printInfo(S);

cout<<"balik stack"<<endl;

balikStack(S);

printInfo(S);

return 0;

}

Gambar 6-16 Main stack dengan input stream Gambar 6-15 Output stack

STRUKTUR DATA 73

Dalam dokumen Modul Struktur Data IF (Halaman 78-85)

Dokumen terkait