160 likes | 561 Views
STRUKTUR DATA. TUMPukAN (STACK). Tumpukan adalah suatu kumpulan data yang seolah-olah ada data yang diletakkan di atas data lain.
E N D
STRUKTUR DATA TUMPukAN (STACK)
Tumpukanadalahsuatukumpulan data yang seolah-olahada data yang diletakkandiatas data lain. • Misalnyakitamempunyaiduabuahkotak yang kitatumpuk, sehinggakotakkitaletakkandiatasskotak yang lain. Jikakemudiantumpukanduakotakitukitatambahdengankotakketiga, keempatdanseterusnyamakaakankitaperolehsebuahtumpukankotak, yang terdiridari N kotak. Pengertiantumpukan
IlustrasiTumpukan Tumpukan bisa diilustrasikan seperti gambar disamping. dari gambar kita bisa mengatakan bahwa kotak B ada diatas kotak A dan ada di bawah kotak C. menambahkan menghapus Dari gambar ini kita hanya bisa menambah atau mengambil sebuah kotak lewat satu ujung, yaitu ujung bagian atas. atas F E Dapat dilihat pula bahwa tumpukan merupakan kumpulan data yang sifatnya dinamis, artinya kita bisa menambah dan mengambil data darinya. D C B Dengan memperhatikan ilustrasi ini maka kita bisa melihat bahwa tumpukan merupakan suatu senarai (list) yang mem- punyai watak “masuk terakhir keluar pertama” atau disebut LIFO (Last In First Out). A
Tumpukan = Kumpulan Data Array bisa digunakan untuk menyajikan tumpukan. Namun pada kumpulan data biasanya terdiri dari elemen-elemen yang bervariasi(dinamis), sedangkan untuk array elemennya statis. Untuk elemen yang dinamis bisa digunakan record. Penyajiantumpukanpadapascal
Const MaxElemen = 255; Type Tumpukan = record isi : array[1 .. MaxElemen] of Integer; atas : 0 .. MaxElemen end; Var T : Tumpukan; Deklarasitumpukan JikaT.Atas = 5, berartidalamtumpukanada 5 elemen, yaitu T.isi[1],T.isi[2],….., T.isi[5]. Jika data yang diambil, makanilai Medan T.Atasdikurangi 1 menjadi 4, yang berarti T.isi[4] adalahelementeratas. Jika data ditambahmakanilaiT.atasditambahdengan 1 menjadi 6, sehingga T.isi[6] adalahelementeratas. Dengandeklarasidiataskitamenganggapbahwaelementumpukan T, yang tersimpandalamlarikT.Isiadalahbertipe integer danbanyaknyaelementumpukanmaksimumadalahsebesarMaxElemen, yang dalamhalini 255 elemen. PadamedanAtas, nilainyamenunjukkanbanyaknyaelemen yang adadalamsuatutumpukan, yang sekaligusmenunjukkanposisielementeratasdalamtumpukan yang dimaksud.
Ada dua operasi dasar yang bisa kita laksanakan pada sebuah tumpukan, yaitu • Operasi menyisipkan data, atau mem-push data. • Operasi menghapus data atau mem-plop data. • Karena dalam tumpukan kita bisa mempush data, maka tumpukan juga sering disebut pusdown list. OperasiPadaTumpukan
Procedure PUSH(var T : Tumpukan; X : integer); Begin T.Atas := T.Atas + 1; T.Isi[T.Atas] := X; End; Operasi PUSH Procedure iniakanmenyisipkantempatuntuk x yang akandipushkedalamtumpukan, yaitudenganmenambahnilaimedanT.Atasdengan 1 dankemudianmenyisipkan x kedalamlarik T.isi. Dari procedure ini, masalahakantimbulsaatT.Atassamadengan Max Elemendanjikakitamempushlagimakaakanterjadioverflowpada array T.Isi, disebabkankarenadeklarasibanyaknyaelemen array tersebuttidakmencukupi. Sehingga procedure diatasberpudirubahmenjadi : Procedure PUSH (var T : Tumpukan; X : Integer); Begin If T.Atas = MaxElemen then writeLn (‘TumpukanSudahPenuh’) else begin T.Atas := T.Atas + 1; T.Isi[T.Atas] := x end End;
Procedure POP (var T : Tumpukan); Begin if T.Atas = 0 then writeLn (‘Tumpukan Sudah Kosong’); else T.Atas := T.Atas -1 End; OPERASI POP
Contoh Program Untuk Membalikkan Kalimat. Dalam hal ini yang dibalik adalah seluruh kalimat bukan per kata. Input : BELAJAR PASCAL ADALAH MUDAH DAN MENYENANGKAN Output : NAKGNANEYNEM NAD HADUM HALADA LACSAP RAJALBE ContohPemakaianTUmpukan
Uses wincrt; Const Elemen = 255; Type S255 = String[Elemen]; Tumpukan = record isi : s255; atas : 0..elemen end; Var T : Tumpukan; I : Integer; Kalimat : S255; Procedure Awalan(Var T : Tumpukan); Begin T.Atas := 0 End; Procedure PUSH (Var T : Tumpukan; X : char); Begin T.Atas := T.Atas + 1; T.Isi[T.Atas] := X End; Function POP (Var T : Tumpukan) : char; Begin POP := T.Isi[T.Atas]; T.Atas := T.Atas - 1; End; {Program Utama} Begin clrscr; Awalan(T); write ('Masukan sembarang kalimat : '); ReadLn (Kalimat); WriteLn; { mempush kalimat ke dalam tumpukan} For I := 1 to length(Kalimat) do PUSH(T, Kalimat[I]); {mempop isi tumpukan sehingga diperoleh kalimat yang dibaca terbalik} For I := 1 to length(Kalimat) do write(POP(T)); WriteLn; End.