TEAM 1 Cut Hayatul Wardani (1405020045) Saputri Phonna (1405020054) Azhary (140502)
STACK (TUMPUKAN)
PENGERTIAN STACK Pengertian Stack pada Struktur Data adalah sebagai tumpukan dari benda, sekumpulan data yang seolah-olah diletakkan di atas data yang lain, koleksi dari objek-objek homogen, atau Suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Stack pada Struktur Data dapat diilustrasikan dengan dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri dari N kotak. Suatu struktur data yang penting dalam pemrograman yang mempunyai sifat LIFO (Last In First Out), Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack. Stack (Tumpukan) adalah list linier yang dikenali elemen puncaknya (TOP) dan Aturan penyisipan dan penghapusan elemennya tertentu. Penyisipan selalu dilakukan “di atas“ TOP dan Penghapusan selalu dilakukan pada TOP.
DEKLARASI STACK Stack dapat dideklarasikan sebuah record yang mempunyai sebuah array data untuk menyimpan elemen stack dan sebuah vafriabel top untuk menunjuk stack elemen atas (top element). Deklarasi selengkapnya sebagai berikut: Tipestack = record Data : array[1..maks_stack] of tipe data Top : 0..maks_stack; End. Var S : tipestack; Tipestack adalah nama pengenal tipe untuk stack Maks_stack merupakan jumlah meksimum elemen stack.
Cara mendefenisikan Stack dengan Array of Struct yaitu: 1. Definisikan Stack dengan menggunakan struct 2. Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack 3. Buatlah variabel array data sebagai implementasi stack 4. Deklarasikan operasi-operasi/function di atas dan buat implemetasinya. contoh : //Deklarasi MAX_STACK #define MAX_STACK 10 //Deklarasi STACK dengan struct dan array data typedef struct STACK{ int top; char data[10][10]; }; //Deklarasi/buat variabel dari struct STACK tumpuk;
OPERASI PADA STACK Instalasi . instalasi adalah proses untuk membuat stack dalam keadaan kosong. Proses ini dilakukan dengan mengisi variabel top dengan nilai yang tidak menunjuk salah satu elemen array. Pada model deklarasi di atas, maka top diisi dengan 0. Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack penuh.
Push. Push adalah proses memasukkan elemen baru kedalam stack Push. Push adalah proses memasukkan elemen baru kedalam stack. Prosesnya meliputi mengalokasikan ruang dengan mengubah nilai top untuk menunjuk ruang di sebelahnya, kemudian memasukan data ke dalam lokasi tersebut. Asalkan stack masih belum penuh, isikan data baru ke stack berdasarkan indeks top of stack setelah diincrement sebelumnya.
Pop adalah proses untuk mengambil elemen teratas dari stack Pop adalah proses untuk mengambil elemen teratas dari stack. Prosesnya meliputi mengambil data dari elemen paling atas, kemudian menghapus elemen tersebut dengan cara mengubah nilai top untuk elemen dibawahnya sehingga jumlah elemen stack berkurang.
Empty/Kosong. Empty adalah operasi untuk mengetahui status stack, kosong atau tidak. Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong.
Full/Penuh. Full adalah operasi untuk mengetahui status stack, penuh atau tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full.
Printberfungsi untuk menampilkan semua elemen-elemen stack dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil.
Bila stack diimplementasikan dengan array yang diakses dari arah indeks terkecil ke arah indeks terbesar, maka operasi-operasi di atas dapat dituliskan dengan prosedur-prosedur berikut. procedure inisialisasi ( var S : tipestack) ; begin S. top := 0 End ; Funcition penuh (S : tipestack) : boolean ; Begin Penuh := ( S. top = 0) Function size (S : tipestack) : integer ; Size := S. top = 0 Procedure push (X ; tipedata; var S : Tipestack);
If penuh (S) then Error {procedure untuk memberitahukan Stack penuh} else begin top := top + 1; S. data [top] := X; end; endprocedure pop (var X ; tipedata; var S : tipestack) ; begin if kosong (S) then Error {procedure untuk memberitahukan Stack kosong} Begin X := S.data [top] ; End.
Macam – macam Stack 1. Stack dengan Array Sesuai dengan sifat stack, pengambilan atau penghapusan elemen dalam stack harus dimulai dari elemen teratas. 2. Double Stack dengan Array Metode ini adalah teknik khusus yang dikembangkan untuk menghemat pemakaian memori dalam pembuatan dua stack dengan array. Intinya adalah penggunaan hanya sebuah array untuk menampung dua stack.
Abstract Data Type (ADT) ADT adalah definisi TYPE dan sekumpulan PRIMITIF (operasi dasar) terhadap TYPE tersebut. Selain itu, dalam sebuah ADT yang lengkap, disertakan pula definisi invarian dari TYPE dan aksioma yang berlaku. ADT merupakan definisi statik. Definisi type dari sebuah ADT dapat mengandung sebuah definisi ADT lain. Misalnya : Ø ADT Waktu yang terdiri dari ADT JAM dan ADT DATE Ø GARIS yang terdiri dari dua buah POINT Ø SEGI4 yang terdiri dari pasangan dua buah POINT (Top, Left) dan (Bottom, Right) Pentingnya sebuah ADT (Abstract Data Type) : Ø Struktur yang besar memungkinkan sistem menjadi komponen berlapis. Ø Memungkinkan kode program menjadi lebih generik / reusable. Ø Biarkan fokus apa (spesifikasi) untuk dipisahkan dari bagaimana (implementasi) Ø Digunakan modularitas untuk perubahan lokal
CONTOH PROGRAM STACK DALAM PASCAL uses winCrt; const max = 100; var L : array [1..max] of char; sisa, i, j, top : integer; jawab : char; kondisi : string; procedure inisiasi; begin top :=0; end;
procedure CEK; begin sisa := max - top; if top = max then kondisi := 'penuh' else if ((top < max) and (top > 0)) then kondisi := 'belum penuh' kondisi := 'kosong' end; procedure PUSH; write('Masukan data : '); readln(L[top+1]); top := top + 1;
procedure TAMPIL; begin writeln('Stack Yang Dihasilkan : '); for i := top downto 1 do writeln(L[i]); end; procedure POP; top := top - 1
BEGIN clrscr; inisiasi; jawab := 'Y'; while ((jawab = 'Y') or (jawab = 'y')) do begin writeln('PROGRAM STACK'); writeln('1. PUSH'); writeln('2. POP'); write('PILIH 1 ATAu 2 ? '); readln(j); case j of 1 : begin CEK; if kondisi = 'penuh' then writeln('STACK PENUH, ANDA TIDAK BISA MENAMBAH TUMPUKAN') else
if kondisi <> 'penuh' then begin CEK; writeln ('Stack ', kondisi, ', Masih Bisa Menampung : ', sisa, ' data'); write ('Apakah Anda mau Menambah Data ? (Y/T) '); readln (jawab); while (((jawab = 'Y') or (jawab = 'y')) and (kondisi <> 'penuh')) do PUSH; writeln; TAMPIL;
writeln ('Stack ', kondisi, 'Masih Bisa Menampung : ', sisa, ' data'); write ('Apakah Anda mau Menambah Data ? (Y/T) '); readln (jawab); end; end else writeln ('STACK PENUH'); 2 : begin write ('Apakah Anda Yakin Mau Menghapus Data ? (Y/T) '); while (((jawab = 'Y') or (jawab = 'y')) and (kondisi <> 'kosong')) do begin POP; writeln;
CEK; writeln; TAMPIL; writeln ('Stack Masih Bisa Dihapus : ', top, ' data'); write ('Apakah Anda Mau Menghapus Data ? (Y/T) '); readln (jawab); end; if kondisi = 'kosong' then writeln ('STACK KOSONG') write ('Apakah Mau Kembali Ke Menu Utama ? (Y/T) '); END.
Atas Perhatian Teman-teman Terima Kasih Atas Perhatian Teman-teman
TUGAS Jelaskan konsep dari Stack yang anda ketahui? Berikan masing-masing contoh konsep dari push dan pop? Buatlah program dari Stack ! Apa yang anda ketahui tentang ADT Jelaskan konsep Array dalam Stack