Pertemuan 6 STACK atau TUMPUKAN STACK TUMPUKAN Merupakan

  • Slides: 24
Download presentation
Pertemuan 6 STACK atau TUMPUKAN

Pertemuan 6 STACK atau TUMPUKAN

STACK (TUMPUKAN) Merupakan bentuk khusus dari Linier List yang pemasukan dan penghapusan elemennya hanya

STACK (TUMPUKAN) Merupakan bentuk khusus dari Linier List yang pemasukan dan penghapusan elemennya hanya dapat dilakukan pada satu posisi, yaitu posisi akhir dari List (Top) Prinsip Stack adalah LAST-IN-FIRST-OUT (LIFO). Klik untuk Ilustrasi Stack

OPERASI STACK • • • ISEMPTY Untuk memeriksa apakah stack kosong ISFULL Untuk memeriksa

OPERASI STACK • • • ISEMPTY Untuk memeriksa apakah stack kosong ISFULL Untuk memeriksa apakah stack sudah penuh PUSH Untuk menambahkan item pada posisi paling atas (TOP) POP Untuk menghapus item paling atas (TOP) CLEAR Untuk mengosongkan stack

STACK PADA ARRAY Deklarasi MAX_STACK #define MAX_STACK 5 Deklarasi STACK dengan struct dan array

STACK PADA ARRAY Deklarasi MAX_STACK #define MAX_STACK 5 Deklarasi STACK dengan struct dan array data typedef struct STACK{ int top; int data[5]; }; Deklarasi variabel stack dari struct STACK tumpuk;

Inisialisasi • Pada mulanya isi top dengan -1, karena array dalam C/C++ dimulai dari

Inisialisasi • Pada mulanya isi top dengan -1, karena array dalam C/C++ dimulai dari 0, berarti stack adalah KOSONG void inisialisasi () { tumpuk. top = -1 } • TOP adalah variabel penanda dalam STACK yang menunjukkan elemen teratas Stack. 4 MAX_STACK 3 • TOP of STACK akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH 2 1 0 TOP = -1

Fungsi Is. Empty • Digunakan untuk memeriksa apakah stack masih dalam kondisi kosong •

Fungsi Is. Empty • Digunakan untuk memeriksa apakah stack masih dalam kondisi kosong • Dengan cara memeriksa TOP of STACK. Jika TOP masih = -1 maka berarti stack masih kosong int Is. Empty () { if (tumpuk. top == -1 return 1; else return 0; } 4 MAX_STACK 3 2 1 0 TOP = -1

Fungsi Is. Full • Digunakan untuk memeriksa apakah kondisi stack sudah penuh • Dengan

Fungsi Is. Full • Digunakan untuk memeriksa apakah kondisi stack sudah penuh • Dengan cara memeriksa TOP of Stack. Jika TOP of STACK = MAX_STACK-1 maka FULL (Penuh). Jika TOP of STACK < MAX_STACK-1 maka belum penuh

Fungsi is. Full int Is. Full () { if (tumpuk. top == MAX_STACK 1

Fungsi is. Full int Is. Full () { if (tumpuk. top == MAX_STACK 1 return 1; else return 0; } E D C B A 4 3 2 1 0 MAX_STACK TOP = 4

Fungsi PUSH Digunakan untuk memasukkan elemen ke dalam stack dan selalu menjadi elemen teratas

Fungsi PUSH Digunakan untuk memasukkan elemen ke dalam stack dan selalu menjadi elemen teratas stack Dengan cara : 1. Menambah satu (increment) nilai TOP of STACK setiap ada penambahan elemen stack selama stack masih belum penuh 2. Isikan nilai baru ke stack berdasarkan STACK setelah indeks of. TOP ditambah satu (diincrement) 4 3 2 1 0 D C B A MAX_STACK TOP = 2 3

Fungsi Push void push (char d[5]) { tumpuk. top++ strcpy(tumpuk. data[tumpuk. top], d); }

Fungsi Push void push (char d[5]) { tumpuk. top++ strcpy(tumpuk. data[tumpuk. top], d); } 4 4 MAX_STACK 3 3 PUSH ELEMEN A 2 2 1 1 0 0 MAX_STACK TOP = -1 A TOP = TOP + 1 = -1 + 1 = 0

Fungsi POP Digunakan untuk menghapus elemen yang berada posisi paling atas dari stack. Dengan

Fungsi POP Digunakan untuk menghapus elemen yang berada posisi paling atas dari stack. Dengan cara : 1. Ambil dahulu nilai elemen teratas stack dengan mengakses TOP of STACK. 2. Tampilkan nilai yang akan diambil. 3. Lakukan decrement nilai TOP of STACK sehingga jumlah elemen stack berkurang 1 4 3 2 1 0 D C B A MAX_STACK TOP = 3 2

Fungsi POP void pop () { printf(“Data yg di POP = %sn”, tumpuk. data[tumpuk.

Fungsi POP void pop () { printf(“Data yg di POP = %sn”, tumpuk. data[tumpuk. top]); tumpuk. top--; } 4 MAX_STACK 3 2 1 0 Data yg di POP = C 4 3 C B A TOP = 2 2 1 0 B A TOP = TOP - 1 =2 -1 = 1

Fungsi CLEAR Digunakan untuk mengosongkan stack / membuat stack hampa sehingga Top pada Stack

Fungsi CLEAR Digunakan untuk mengosongkan stack / membuat stack hampa sehingga Top pada Stack berada kembali di posisi Top = -1 void clear () { tumpuk. data=tumpuk. top=-1 printf(“Data clear”); } 4 3 2 1 0 D C B A MAX_STACK TOP = -1

Contoh Listing Program Stack #include <stdio. h> #include <string. h> #include<conio. h> //-----------struct nilai.

Contoh Listing Program Stack #include <stdio. h> #include <string. h> #include<conio. h> //-----------struct nilai. Mat. Kul{ char nim[10]; char nama[50]; float nilai; }; struct stack{ int top; nilai. Mat. Kul data[10]; }; //-----------void create. Empty(stack *S){ (*S). top = -1; } //-----------bool is. Empty(stack S){ bool hasil = false; if(S. top == -1){ hasil = true; } return hasil; } bool is. Full(stack S){ bool hasil = false; if(S. top == 9){ hasil = true; } return hasil; } //-----------void push(char nim[], char nama[], float nilai, stack *S ){ if(is. Full(*S) == true){ /*jika stack penuh*/ printf("stack penuhn"); } else{ if(is. Empty(*S) == true){ /* jika stack kosong */ (*S). top = 0; strcpy((*S). data[0]. nim, nim); strcpy((*S). data[0]. nama, nama); (*S). data[0]. nilai = nilai; } else{ /* jika stack tidak kosong */ (*S). top = (*S). top + 1; strcpy((*S). data[(*S). top]. nim, nim); strcpy((*S). data[(*S). top]. nama, nama); (*S). data[(*S). top]. nilai = nilai; }}}

void pop(stack *S){ if((*S). top == 0){ /*jika stack berisi satu elemen*/ (*S). top

void pop(stack *S){ if((*S). top == 0){ /*jika stack berisi satu elemen*/ (*S). top = -1; } else{ if((*S). top != -1){/*jika stack tidak kosong*/ (*S). top = (*S). top - 1; } }} //-----------void print. Stack(stack S){ if(S. top != -1){ printf("------isi stack------n"); int i; for(i=S. top; i>=0; i--){ printf("==========n"); printf("elemen ke : %dn", i); printf("nim : %sn", S. data[i]. nim); printf("nama : %sn", S. data[i]. nama); printf("nilai : %fn", S. data[i]. nilai); } printf("-----------n"); } else{ /* proses jika stack kosong */ printf("stack kosongn"); }} main(){ struct stack S; create. Empty(&S); print. Stack(S); printf("=========n"); push("13507701", "Nana", 64. 75, &S); push("13507702", "Rudi", 75. 11, &S); push("13507703", "Dea", 84. 63, &S); print. Stack(S); printf("=========n"); pop(&S); print. Stack(S); printf("=========n"); getch(); } ISI 3 DATA HAPUS 2 DATA

OUTPUT PROGRAM AWAL STACK create. Empty(&S); print. Stack(S); ISI 3 DATA DI STACK push("13507701",

OUTPUT PROGRAM AWAL STACK create. Empty(&S); print. Stack(S); ISI 3 DATA DI STACK push("13507701", "Nana", 64. 75, &S); push("13507702", "Rudi", 75. 11, &S); push("13507703", "Dea", 84. 63, &S); print. Stack(S); HAPUS 2 DATA DI STACK pop(&S); print. Stack(S);

Contoh Program Stack #include <iostream. h> #include <conio. h> #include <stdio. h> void main()

Contoh Program Stack #include <iostream. h> #include <conio. h> #include <stdio. h> void main() { int stack[10]; int top=-1; int pilih, i; do { gotoxy(25, 2); cout<<"====MENU PILIHAN===="<<endl; gotoxy(25, 4); cout<<"=============="<<endl; gotoxy(30, 6); cout<<" 1. PUSH "<<endl; gotoxy(30, 7); cout<<" 2. POP "<<endl; gotoxy(30, 8); cout<<" 3. VIEW "<<endl; gotoxy(30, 9); cout<<" 4. EXIT "<<endl; gotoxy(25, 11); cout<<"=============="<<endl; gotoxy(25, 12); printf("Pilih = "); scanf("%d", &pilih);

switch(pilih) { case 1: //push clrscr(); if (top > 10) printf("Stack penuh!n"); else {

switch(pilih) { case 1: //push clrscr(); if (top > 10) printf("Stack penuh!n"); else { printf("Data = "); scanf("%d", &stack[top+1]); top++; } break; case 2: //pop clrscr(); if (top < 0) printf("Stack kosong!n"); else { printf("Data keluar = %dn", stack[top]); top--; } break; case 3: //view cout<<"nndata yang ada pada STACK : n"; { for(i=top; i>=0; i--) printf("%d ", stack[i]); printf("n"); } break; case 4: printf("Exit…n"); break; } }while (pilih!=4); }

Latihan I Struktur Data (Pertemuan 6) Diketahui suatu stack dgn max_stack = 6 1.

Latihan I Struktur Data (Pertemuan 6) Diketahui suatu stack dgn max_stack = 6 1. Bila dilakukan PUSH 3 elemen kedalam stack, kemudian di PUSH lagi 2 elemen dan di POP 3 elemen. Maka dimana posisi Top of Stack ? 2. Is. Empty pada kondisi terakhir adalah ? 3. Dari kondisi diatas, Berapa elemen yg hrs di PUSH unt mencapai kondisi penuh Top of Stack = max_stack ? 4. Berapa elemen yg hrs di POP unt mencapai kondisi Is. Empty = True Jawaban dibahas dgn menggunakan contoh program

Latihan Soal II Struktur Data (Pertemuan 6) 1. Operasi Stack yang digunakan untuk memeriksa

Latihan Soal II Struktur Data (Pertemuan 6) 1. Operasi Stack yang digunakan untuk memeriksa apakah stack sudah penuh, adalah …. . d. ISEMPTY a. PUSH b. POP e. ISFULL c. CLEAR 2. Void push (char d[5]) { Tumpuk. top++ Strcpy (tumpuk. data [tumpuk. top], d) } Merupakan fungsi. . . a. Is Full d. POP b. TOP c. PUSH e. CLEAR

2. Void push (char d[5]) { Tumpuk. top++ Strcpy (tumpuk. data [tumpuk. top], d)

2. Void push (char d[5]) { Tumpuk. top++ Strcpy (tumpuk. data [tumpuk. top], d) } Merupakan fungsi. . . a. Is Full d. POP b. TOP c. PUSH 3. e. CLEAR Jika pada stack terdapat kondisi TOP of STACK = MAX_STACK - 1 maka stack berada dalam keadaan. . . a. ISEMPTY d. RETREIVE b. CLEAR e. FULL c. TOP

3. Jika pada stack terdapat kondisi TOP of STACK = MAX_STACK - 1 maka

3. Jika pada stack terdapat kondisi TOP of STACK = MAX_STACK - 1 maka stack berada dalam keadaan. . . a. ISEMPTY d. RETREIVE b. CLEAR e. FULL c. TOP 4. Prinsip dari stack adalah a. First in First Out (FIFO) b. ISFULL c. PUSH d. Last in First Out (LIFO) e. CLEAR

4. Prinsip dari stack adalah a. First in First Out (FIFO) b. ISFULL c.

4. Prinsip dari stack adalah a. First in First Out (FIFO) b. ISFULL c. PUSH d. Last in First Out (LIFO) e. CLEAR 5. Diberikan perintah/instruksi pada program C++, yaitu tumpuk. top++; Maksud dari perintah/instruksi tersebut adalah …. a. Top = Top + 1 d. Top = - 1 b. Top = Top - 1 e. Top = 1 c. Top = 0

5. Diberikan perintah/instruksi pada program C++, yaitu tumpuk. top++; Maksud dari perintah/instruksi tersebut adalah

5. Diberikan perintah/instruksi pada program C++, yaitu tumpuk. top++; Maksud dari perintah/instruksi tersebut adalah …. a. Top = Top + 1 d. Top = - 1 b. Top = Top - 1 e. Top = 1 c. Top = 0 1. Operasi Stack yang digunakan untuk memeriksa apakah stack sudah penuh, adalah …. . a. PUSH d. ISEMPTY b. POP e. ISFULL c. CLEAR