P. 1
Struktur Data Stack

Struktur Data Stack

|Views: 211|Likes:
Dipublikasikan oleh Tjokorda Agung Budi W
Materi Stack PI1043 Struktur Data
Materi Stack PI1043 Struktur Data

More info:

Published by: Tjokorda Agung Budi W on May 25, 2011
Hak Cipta:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

04/24/2015

pdf

text

original

Stack (Tumpukan

)
PI1043 Struktur Data
IT Telkom Bandung

2

Definisi Stack (Tumpukan)
Stack adalah list linier yang: • Dikenali elemen puncaknya (TOP) • Aturan penyisipan dan penghapusan elemennya tertentu
▫ Penyisipan selalu dilakukan di “atas” (TOP) ▫ Penghapusan selalu dilakukan pada TOP

 Stack tersusun secara LIFO (Last In First Out)

3

Definisi Stack

TOP

BOTTOM

4

• Representasi Stack secara lojik digambarkan sebagai list linier yang setiap tipe elemennya adalah
Type ElmtS : <Info : Infotype, Next : address>

• Alamat elemen terbaru (TOP) dan alamat elemen terlama (BOTTOM) juga dicatat. Namun dalam implementasi belum tentu BOTTOM digunakan.

5

Sehingga jika S adalah sebuah stack, dan P adalah sebuah address maka: • Top(S) adalah alamat elemen TOP, dimana operasi penyisipan dan penghapusan dilakukan • Info(P) adalah informasi yang disimpan pada alamat P • Next(P) adalah alamat suksesor P

6

Traversal Pada Stack
• Pada stack jarang sekali dilakukan operasi traversal, karena keunikan stack justru pada operasi yang hanya menyangkut elemen TOP. • Namun jika memang dibutuhkan traversal, misalnya untuk mencetak isi stack, maka skema traversal suatu stack persis sama dengan skema traversal list linier biasa, dengan mengganti First(L) menjadi TOP(S).

7

Operasi dan adalah Stack dengan elemenS, maka definisi Fungsi dasar (Primitif) Pada Diberikan S fungsional stack adalah : Stack

• StackEmpty :S  boolean {Test stack kosong, true jika kosong, false jika tidak} • CreateStack:  S {Membuat sebuah stack kosong} • Push : Elmt x S  S {Menambahkan sebuah ElmtS sebagai TOP. TOP berubah nilainya} • Pop : S  S x ElmtS {Mengambil nilai elemen TOP, sehingga Top yang baru adalah elemen yang datang sebelum elemen TOP, mungkin Stack menjad i kosong}

Test stack Kosong
Function StackEmpty (S: STACK)  boolean {Test stack kosong : mengirim true jika tumpukan kosong, false jika tumpukan tidak kosong} Kamus : Algoritma  (TOP(S) = Nil)
8

Pembuatan Stack Kosong
Procedure CreateEmptyS (Output S : Stack) {Membuat sebuah stack kosong} {I.S : sembarang} {F.S : sebuah stack S kosong siap dipakai terdefinisi} Kamus Algoritma : TOP(S)  Nil
9

Penambahan sebuah elemen pada Stack (Push)
Procedure Push@(Input/Output S : Stack Input P : address) {Menambahkan sebuah elemen baru pada TOP, dengan elemen yang telah diketahui alamatnya} Kamus Algoritma {insert sebagai elemen pertama} Next (P)  TOP(S) TOP(S)  P
10

Penambahan sebuah elemen pada Stack (Push)
Procedure Push (Input/Output S : Stack Input E : Infotype) {Menambahkan sebuah elemen baru pada TOP, dengan elemen yang diketahui informasinya} Kamus P: address Algoritma Alokasi (P) {alokasi selalu berhasil} Info(P)  E Next (P)  TOP(S) TOP(S)  P
11

Penghapusan sebuah elemen pada Stack
Procedure PopStack@ (Input/Output S : Stack; Output P : address) {I.S : stack tidak kosong} {F.S : alamt elemen TOP disimpan pada P, sehingga informasinya dapat diakses melaui P} {Menghapus elemen stack, stack tidak boleh kosong dan mungkin seteleh penghapusan stack menjadi kosong} Kamus P :address Algoritma P  TOP(S) TOP(S)  Next (TOP(S))
12

Penghapusan sebuah elemen pada Stack
Procedure PopStack (Input/Output S : Stack; Output E : Infotype) {I.S : stack tidak kosong} {F.S : info elemen TOP disimpan pada E, alamat Top yang lama didealokasi} {Menghapus elemen stack, stack tidak boleh kosong dan mungkin setelah penghapusan stack menjadi kosong} Kamus P : address Algoritma P  TOP(S); E  Info(P) TOP(S)  Next (TOP(S)) Dealokasi (P)

13

Representasi Berkait dengan Pointer
KAMUS {Definisi sebuah stack S dgn representasi berkait dgn pointer} type infotype : ...{Type terdefinisi, menyimpan informasi elemen stack} type address : ^ElmtStack type Elmtstack : <Info : infotype, Next : address> type Stack : <Top : address> S : Stack {Cara penulisan Top(S) ditulis S.Top Info(P) ditulis P^.Info Next(P) ditulis P^.Next }
14

Test stack Kosong
Function StackEmpty (S: STACK)  boolean {Test stack kosong : mengirim true jika tumpukan kosong, false jika tumpukan tidak kosong} Kamus : Algoritma  (S.TOP = Nil)
15

Pembuatan Stack Kosong
Procedure CreateEmptyS (Output S : Stack) {Membuat sebuah stack kosong} {I.S : sembarang} {F.S : sebuah stack S kosong siap dipakai terdefinisi} Kamus Algoritma : S.TOP  Nil

16

Penambahan sebuah elemen pada Stack (Push)
Procedure Push@(Input/Output S : Stack Input P : address) {Menambahkan sebuah elemen baru pada TOP, dengan elemen yang telah diketahui alamatnya} Kamus Algoritma {insert sebagai elemen pertama} P^.Next  S.TOP S.TOP  P
17

Penghapusan sebuah elemen pada Stack
Procedure PopStack@ (Input/Output S : Stack; Output P : address) {I.S : stack tidak kosong} {F.S : alamt elemen TOP disimpan pada P, sehingga informasinya dapat diakses melaui P} {Menghapus elemen stack, stack tidak boleh kosong dan mungkin seteleh penghapusan stack menjadi kosong} Kamus P :address Algoritma P  S.TOP S.TOP  S.TOP^.Next
18

Representasi berkait dengan tabel
Kamus {Definisi sebuah stack S dengan representasi berkait} constant Nil : integer = 0 Nmin : integer = 1 Nmax : integer = 100 type address : integer [Nmin..Nmax, Nil] type infotype : ...{terdefinisi} type ElmtS : <Info:infotype, next : address> type Stack : <TOP : address, TabElmt: array[Nmin..Nmax] of ElmtS> S:Stack {cara penulisan : Top(S) dituliskan S.Top Info(P) dituliskan S.TabElmt[P].Info Next(P) dituliskan S.TabElmt[P].Next Primitif Alokasi : AllocTab(P) Dealokasi : DeallocTab(p) } 19

Test stack Kosong
Function StackEmptyT (S: STACK)  boolean {Test stack kosong : mengirim true jika tumpukan kosong, false jika tumpukan tidak kosong} Kamus : Algoritma → S.Top = Nil

20

Pembuatan Stack Kosong
Procedure CreateEmptyT (Output S : Stack) {Membuat sebuah stack kosong} {I.S : sembarang} {F.S : sebuah stack S kosong siap dipakai terdefinisi} Kamus Algoritma : S.Top ← Nil
21

Penambahan sebuah elemen pada Stack (Push)
Procedure Push@(Input/Output S : Stack Input P : address) {Menambahkan sebuah elemen baru pada TOP, dengan elemen yang telah diketahui alamatnya} Kamus Algoritma {insert sebagai elemen pertama} S.TabElmt[P].Next←S.TOP S.TOP ← P

22

Penghapusan sebuah elemen pada Stack
Procedure PopStack@ (Input/Output S : Stack; Output P : address) {I.S : stack tidak kosong} {F.S : alamat elemen TOP disimpan pada P, sehingga informasinya dapat diakses melaui P} {Menghapus elemen stack, stack tidak boleh kosong dan mungkin seteleh penghapusan stack menjadi kosong} Kamus P :address Algoritma P ← S.TOP S.TOP ← S.TabElmt[S.TOP].Next {Jika menjadi kosong, S.TOP = Nil}

23

24

• Karena kemudahan Representasi kontigu

operasinya, biasanya stack lebih banyak direpresentasikan sebagai tabel kontigu, dengan TOP adalah salah satu nilai ekstrem indeks terdefinisi. TOP • Stack direpresentasikan oleh sebuah tabel {1..Nmax} dengan NMax adalah kostanta yang diperkirakan sebagai jumlah maksimum elemen yang ditampung stack.

1 2 3 4

23.00 12.5 0.00 34.8

NMax

Kamus : {Definisi sebuah stack S dengan representasi kontigu} constant Nil : integer = 0 Nmax : integer = 100 type address : integer [0..Nmax] type ElmtS : ...{terdefinisi, terdiri dari Info saja} type Stack : <TOP : address, TabElmt: array[1..Nmax] of ElmtS> S:Stack {cara penulisan : Top(S) dituliskan S.Top Info(P) dituliskan S.TabElmt[P] Next(P) dituliskan P←P-1 Primitif Alokasi : AllocTab(P) Dealokasi : DeallocTab(P) } 25

Test stack Kosong
Function StackEmpty (S: STACK)  boolean {Test stack kosong : mengirim true jika tumpukan kosong, false jika tumpukan tidak kosong} Kamus : Algoritma → S.Top = Nil
26

Pembuatan Stack Kosong
Procedure CreateEmpty (Output S : Stack) {Membuat sebuah stack kosong} {I.S : sembarang} {F.S : sebuah stack S kosong siap dipakai terdefinisi} Kamus Algoritma : S.Top ← Nil
27

Penambahan sebuah elemen pada Stack (Push)
Procedure PushTab(input/output S: Stack, input E : ElmtS) {menambah sebuah elemen baru pada TOP sebuah stack, dengan elemen yang diketahui informasinya} {IS : Stack mungkin kosong, E terdefinisi, alokasi alamat selalu berhasil:S.TOP<NMax FS : TOP(S) berisi E} Kamus Algoritma : S.TOP ← S.TOP+1 S.TabElmt[S.TOP]←E
28

Penghapusan sebuah elemen pada Stack
procedure PopStack (input/output S: Stack, output E : ElmtS) {menghapus elemen Stack, Stack tidak boleh kosong dan mungkin menjadi kosong} {IS : Stack tidak kosong FS : elemen TOP disimpan pada E} Kamus Algoritma : E←S.TabElmt[S.TOP] S.TOP ← S.TOP - 1 {tidak perlu dealokasi sebab direpresentasi dengan tabel kontigu}

29

30

Studi Kasus Stack
Ekspresi Matematika dengan notasi postfix (Polish) • Diberikan sebuah ekpresi matematika postfix dengan operator [‘ * ’, ’ / ’, ‘+’,’-’,’^’] • Operan dari ekspresi dapat berupa sebuah karakter abjad [‘A’..’Z’] atau sebuah nilai yang terdiri dari satu angka [‘0’..’9’]

Contoh Ekspresi AB*/ ABC^/DE*+AC*-

Arti (A*B) /C (A / (B^C) + (D*E) – (A*C)

31

Studi Kasus Stack
Catatan • Dalam penulisan ekspresi yang tidak disederhanakan, tiap operan atau operator disebut token. • Didefinisikan token adalah sebuah ‘kata’ (deretan karakter yang tidak mengandung blank), dan diantara dua kata dipisahkan satu atau beberapa operator

Studi Kasus Stack
Program Ekspresi {Menghitung sebuah ekspresi matematika yang ditulis secara posfix, dengan memperhatikan urutan evaluasi berdasarkan operator} Kamus type infotype : character type address : ^ElmtStack type Elmtstack : <Info : infotype, Next : address> type Stack : <Top : address> S : Stack CT,OP1,OP2 : character Type token : ……… {terdefinisi} Procedure first-token {mengirim token yang pertama}

32

Studi Kasus Stack
Procedure Next-token {mengirim token yang berikutnya} Function EndToken  boolean {true jika proses akuisisi mendapatkan Token kosong. Merupakan akhir ekpresi. Model dengan mark} Function operator (CT : token) token Function hitung (OP1,OP2, operator : token) token {menghitung ekspresi, mengkonversi menjadi token}
33

Studi Kasus Stack
Algoritma First-token If (end-token) then Otuput (‘ekspresi kosong’) Else Repeat Depend on (CT) {CT adalah current token} Not operator (CT): push(CT,S) Operator (CT): {CT adalah operator} Pop(S,OP2) Pop(S,OP1) Push(S,hitung(OP1,OP2,CT)) Next-Token(CT) Until (End-token) {tuliskan hasil} 34

You're Reading a Free Preview

Mengunduh
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->