Algoritma dan Struktur Data Praktikum 2 SKS Dosen




















- Slides: 20
Algoritma dan Struktur Data Praktikum 2 SKS Dosen: Muhammad Fachrie, M. Cs. Praktikum Alstrukdat - Pertemuan 2 1
STACK • Stack (tumpukan) adalah satu metode pengorganisasian data di dalam sebuah program yang menggunakan pola LIFO (Last In, First Out) • Artinya, data yang terakhir kali dimasukkan ke dalam program, akan dikeluarkan pertama kali. • Ibarat sebuah tumpukan buku di dalam kardus, buku yang pertama kali bisa diambil adalah buku yang paling atas (yang paling pertama masuk), sedangkan buku yang terakhir kali bisa diambil adalah buku yang paling bawah (yang terakhir kali masuk) Praktikum Alstrukdat - Pertemuan 2 2
Ilustasi Stack – Input Data N = batas maksimum tumpukan Buku N Terakhir kali masuk, Pertama kali keluar . . . Buku 4 Buku 3 Buku 2 Buku 1 Praktikum Alstrukdat - Pertemuan 2 Pertama kali masuk, Terakhir kali keluar 3
Ilustasi Stack – Output Data N = batas maksimum tumpukan Buku N Terakhir kali masuk, Pertama kali keluar . . . Buku 4 Buku 3 Buku 2 Buku 1 Praktikum Alstrukdat - Pertemuan 2 Pertama kali masuk, Terakhir kali keluar 4
Ilustasi Stack dalam Array Indeks array Buku N Elemen ke-N N-1 . . Elemen ke-4 3 Buku 3 Elemen ke-3 2 Buku 2 Elemen ke-2 1 Buku 1 Elemen ke-1 0 Buku 4 Praktikum Alstrukdat - Pertemuan 2 5
Stack – Proses Push • Push di dalam stack adalah proses memasukkan sebuah data ke dalam stack. Data yang baru saja diinputkan akan berada pada bagian atas (top) stack. • Setiap kali terjadi proses push (penambahan data ke dalam stack), maka nilai top akan bertambah 1 (top = top + 1). • Variabel top berfungsi menunjukkan indeks dari elemen teratas, yakni elemen/nilai yang terakhir kali dimasukkan ke dalam stack. Praktikum Alstrukdat - Pertemuan 2 6
Stack – Ilustrasi Proses Push(80) Push(100) 4 4 4 3 3 3 2 2 2 1 1 0 Top 80 0 Top 100 1 80 0 Top Stack kosong Top = -1 Stack berisi 1 data Top = 0 Praktikum Alstrukdat - Pertemuan 2 Stack berisi 2 data Top = 1 7
Stack – Ilustrasi Proses Push • Inisialisasi stack Max Tumpukan = 5 • Push(80) • Push(100) • Push(75) • Push(92) • Push(85) • Push(100) STACK PENUH! top = 4 NULL 85 4 top = 3 NULL 92 3 top = 2 NULL 75 2 top = 1 NULL 100 1 top = 0 NULL 80 0 top = -1 NULL = kondisi dimana memori pada elemen array masih kosong Praktikum Alstrukdat - Pertemuan 2 8
Stack – Proses Push • Stack hanya bisa membaca data yang berada posisi paling atas (top). • Contoh: Element[top] = 75 Element[top] = 85 4 Top 85 4 3 92 3 75 2 100 1 80 0 Top Praktikum Alstrukdat - Pertemuan 2 9
Stack – Proses Pop • Pop di dalam stack merupakan sebuah proses untuk mengeluarkan sebuah data dari dalam stack. • Satu kali proses pop hanya mengeluarkan satu buah data, yakni data yang berada posisi paling atas (top). • Setiap terjadi proses pop (pengeluaran satu data dari dalam stack), maka nilai top berkurang 1 (top = top - 1). Praktikum Alstrukdat - Pertemuan 2 10
Stack – Ilustrasi Proses Pop() Top Pop() 4 4 92 3 3 2 75 2 100 1 100 80 85 4 92 3 75 Stack yang penuh Top = 4 Top 75 2 1 100 1 0 80 0 Stack berisi 3 data Top = 3 Praktikum Alstrukdat - Pertemuan 2 Stack 2 data Top = 2 11
Stack – Ilustrasi Proses Pop • • Stack tidak kosong Pop() Pop() STACK KOSONG! top = 4 NULL 85 4 top = 3 NULL 92 3 top = 2 NULL 75 2 top = 1 NULL 100 1 top = 0 NULL 80 0 top = -1 NULL = kondisi dimana memori pada elemen array masih kosong Praktikum Alstrukdat - Pertemuan 2 12
Kode Program – Inisialisasi Stack • Inisialiasi stack sebaiknya menggunakan record agar memudahkan programmer jika akan membuat lebih dari satu stack dalam satu program. • Inisialisasi stack sebaiknya diletakkan di luar int main() (sebagai variabel global) agar dapat diakses oleh semua fungsi. //membuat record Stack. Record struct Stack. Record{ int top; int Element[MAX]; }; Stack. Record stack 1; stack 1. top = -1; //membuat variabel stack 1 //nilai top di awal program diset = -1 Praktikum Alstrukdat - Pertemuan 2 13
Kode Program – Push • Proses push diawali dengan mengecek apakah stack dalam keadaan penuh atau tidak. • Jika stack tidak penuh, maka nilai yang akan di-push diletakkan pada bagian paling atas (top). Nilai top bertambah 1. void push(int input, Stack. Record &s){ //cek apakah stack PENUH atau tidak if (s. top == (MAX-1)){ //MAX = jumlah maksimum tumpukan cout<<"Stack penuh!"<<endl; } else { s. top = s. top + 1; //nilai top bertambah 1 s. Element[s. top] = input; //isi stack pd posisi top } } Praktikum Alstrukdat - Pertemuan 2 14
Kode Program – Pop • Proses pop diawali dengan mengecek apakah stack dalam keadaan kosong atau tidak. • Jika stack tidak kosong, maka nilai yang akan di-pop ditampung dalam variabel sementara (temp). Nilai top berkurang 1. void pop(Stack. Record &s){ int temp; //variabel untuk menampung nilai yang di-pop //cek apakah stack KOSONG atau tidak if (s. top == -1){ cout<<"Stack kosong!"<<endl; } else { temp = s. Element[s. top]; //simpan nilai ke temp s. Element[s. top] = 0; //array pada posisi top = 0 s. top = s. top - 1; //top berkurang 1 cout<<"Nilai "<<temp<<" dikeluarkan. "<<endl; } } Praktikum Alstrukdat - Pertemuan 2 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <iostream> #include <conio. h> using namespace std; int const MAX = 5; //nilai maksimum tumpukan struct Stack. Record{ int top; int Element[MAX]; }; void push(int input, Stack. Record &s){ //cek apakah stack PENUH atau tidak if (s. top == (MAX-1)){ cout<<"Stack penuh!"<<endl; } else { s. top = s. top + 1; s. Element[s. top] = input; } } //bersambung ke halaman berikutnya Praktikum Alstrukdat - Pertemuan 2 16
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 int pop(Stack. Record &s){ int temp; //cek apakah stack KOSONG atau tidak if (s. top == -1){ cout<<"Stack kosong!"<<endl; return 0; //kembalikan nilai 0 } else { temp = s. Element[s. top]; s. Element[s. top] = 0; s. top = s. top - 1; cout<<"Nilai "<<temp<<" dikeluarkan. "<<endl; return temp; //mengembalikan nilai temp } } int main(){ Stack. Record stack 1; stack 1. top = -1; char lanjut = 'y'; int nilai; //bersambung ke halaman berikutnya Praktikum Alstrukdat - Pertemuan 2 17
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 //memasukkan nilai ke dalam stack (PUSH) while (lanjut != 'n'){ cout<<"======================="<<endl; cout<<"Masukkan sebuah nilai ke dalam stack = "; cin>>nilai; push(nilai, stack 1); //tanya apakah ingin input nilai lagi atau tidak cout<<"Input nilai lagi (Y/N)? "; cin>>lanjut; } //mengeluarkan isi stack (POP) dan menampilkan nilainya lanjut = 'y'; int temp; //untuk menyimpan nilai yang di-pop cout<<endl<<"Mengeluarkan isi stack"<<endl; while (lanjut != 'n'){ temp = pop(stack 1); //tanya apakah ingin mengeluarkan isi stack lagi atau tidak cout<<"Keluarkan isi stack lagi (Y/N)? "; cin>>lanjut; } getch(); return 0; } Praktikum Alstrukdat - Pertemuan 2 18
Tugas • Buatlah program yang dapat menyimpan nilai-nilai di bawah ini ke dalam sebuah stack: Nilai = 80, 54, 24, 100, 70, 67, 89, 90, 88 • Nilai-nilai di atas dimasukkan satu per satu oleh user (input keyboard) menggunakan proses push. • Kemudian, nilai tersebut dikeluarkan satu per satu dari dalam stack menggunakan proses pop. • Saat proses pengeluaran tersebut, hitunglah juga berapa jumlah nilai yang sudah dikeluarkan. • Lebih lanjut, lihat contoh program “contohtugas. cpp” Praktikum Alstrukdat - Pertemuan 2 19
Tugas • Aturan pengumpulan tugas: – Kode program dicetak di kertas A 4 – Screenshot program yang berhasil jalan ditampilkan juga (dicetak). • Tugas dikumpul pada Hari Senin 17 Oktober 2016, bersamaan dengan tugas array pekan lalu. Praktikum Alstrukdat - Pertemuan 2 20