E3024015 -‐ STRUKTUR DATA & E3024016 – PRAKTIK STRUKTUR DATA Stack using Array Alfa Faridh Suni, S.T., M.T. PTIK -‐ 2014
Stack = tumpukan • Suatu susunan koleksi data dimana data dapat ditambahkan dan dihapus selalu dilakukan pada bagian akhir data, yang disebut dengan top of stack • Stack bersifat LIFO (Last In First Out) • “Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack
Compo
Compo Compo
VCD
TV
TV
VCD
VCD
TV
TV
Operasi Stack 4
1
O U
I N 3
2
2
3
T
• • • • •
4 Push : digunakan untuk menambah item pada stack1 pada tumpukan paling atas Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas Clear : digunakan untuk mengosongkan stack IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
Stack with Array (1) • Definisikan konstanta MAX untuk menyimpan maksimum isi stack • Definisikan Stack dengan menggunakan suatu array dengan elemen array sesuai dengan konstanta MAX • Buat variable top untuk menandakan posisi data teratas • Deklarasikan operasi-operasi/function di atas dan buat implemetasinya
Stack with Array (2) • Contoh deklarasi MAX_STACK #define MAX_STACK 10 !! • Contoh deklarasi STACK dengan Array !int stack[MAX]!
• Inisialisasi
– Pada mulanya isi top dengan -1, karena array dalam bahasa C dimulai dari 0, yang berarti bahwa data stack adalah KOSONG! – Top adalah suatu variabel penanda dalam Stack yang menunjukkan elemen teratas data Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK yang menyebabkan stack PENUH! !! !
Stack with array (3)
TOP= -1
Ilustrasi Stack pada saat inisialisasi!
Stack with array (4) Fungsi IsFull • Untuk memeriksa apakah stack sudah penuh? • 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
Stack with array (5) • Ilustrasi Stack pada kondisi Full
int isFull(){ if(TOP==MAX_STACK-1) return 1; else return 0; }
Stack with array (6) Fungsi IsEmpty • Untuk memeriksa apakah data Stack masih kosong? • Dengan cara memeriksa top of stack, jika masih -1 maka berarti data Stack masih kosong! int isEmpty(){ if(TOP==-1) return 1; else return 0; }
Stack with array (7) Fungsi Push • Untuk memasukkan elemen ke data Stack. Data yang diinputkan selalu menjadi elemen teratas Stack (yang ditunjuk oleh ToS) • Jika data belum penuh, – Tambah satu (increment) nilai top of stack lebih dahulu setiap kali ada penambahan ke dalam array data Stack. – Isikan data baru ke stack berdasarkan indeks top of stack yang telah di-increment sebelumnya.
• Jika tidak, outputkan “Penuh”
Stack with array (8)
void push(int item){ TOP=TOP+1; stack[TOP]=item; }
Stack with array (9) Fungsi Pop • Untuk mengambil data Stack yang terletak paling atas (data yang ditunjuk oleh TOS). • Tampilkan terlebih dahulu nilai elemen teratas stack dengan mengakses indeksnya sesuai dengan top of stacknya, baru dilakukan di-decrement nilai top of stacknya sehingga jumlah elemen stack berkurang.
Stack with array (10)
void pop(){ printf(“data terambil = %d”, stack[TOP]); TOP=TOP-1; }
Stack with array (11) • Fungsi Print • Untuk menampilkan semua elemen-elemen data Stack • Dengan cara me-loop semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang lebih kecil!
Stack using Array(12)
void display(){ for(i=TOP; i>=0; i--){ printf(“data :”, stack[i]); }
stack using array(1) #include <stdio.h> #include <stdlib.h> #define MAX 6 void push(); void pop(); void isFull(); void isEmpty(); void display(); int stack[MAX], TOP= -1; int main() { int stack[MAX], TOP= -1, choice; printf("\nENter the choice\n"); printf("1. PUSH\n"); printf("2. POP\n"); printf("3. DISPLAY\n"); scanf("%d",&choice);
do{ switch(choice){ case 1: push(); break; case 2: pop(); break; case 3: display(); default : printf("invalid choice"); } printf("\nEnter the choice\n"); printf("1. PUSH\n"); printf("2. POP\n"); printf("3. DISPLAY\n"); scanf("%d",&choice); }while(choice>0||(choice<4)); return 0; }
void pop(){ stack using array(2) int temp;
void isFull(){ if(TOP==MAX) return 1; else return 0; } void isEmpty(){ if(TOP==-1) return 1; else return 0; } void push(){ if(isFull()==1) printf("Overflow"); else { int item; printf("Enter the item :"); scanf("%d", &item); TOP=TOP+1; stack[TOP]=item; } }
if(isEmpty()==1) printf("under flow"); else{ temp=stack[TOP]; TOP=TOP-1; } } void display(){ int i, temp=TOP; if(isEmpty()==1)printf("\nNo data"); else{ printf("\nStack contens are\n"); printf("\n\tLocation data\n"); printf("\n-------------\nTOP->"); for(i=TOP;i>=0;i--){ printf("\t%d\t->%d",temp--,stack[i]); printf("\n\t------------\n"); } } }
Latihan • Buat program stack dengan menggunakan array of struct untuk mendata identitas mahasiswa yang meliputi NIM, nama, umur