Praktikum 4. Tumpukan (Stack)

dokumen-dokumen yang mirip
A. TUJUAN PEMBELAJARAN

Tumpukan(Stack)!! " # $ %&' $ %& ( ) ( * +, / ( (

ARNA FARIZA YULIANA SETIOWATI

STACK (Tumpukan) Tumpukan Koin. Tumpukan Kotak

S TA C K Sunu Wibirama

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

Gambar 1. Ilustrasi Stack

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 4 & 5

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

Algoritma dan Struktur Data. Ramos Somya

ALGORITMA DAN STRUKTUR DATA ARRAY STACK DAN QUEUE

STACK dan QUEUE MODUL PRAKTIKUM STRUKTUR DATA 09 UNIVERSITAS KRISTEN DUTA WACANA. Daftar Isi: Stack dan Queue. Latihan soal. Guided.

PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 Stack (Tumpukan)

Struktur Data Array. Rijal Fadilah S.Si

STACK DAN QUEUE (Muhammad Fachrie, STMIK Amikom Yogyakarta)

BAB III METODE PENELITIAN / PERANCANGAN SISTEM. perancangan dan pembuatan program ini meliputi : dengan konversi notasi infix, prefix, dan postfix.

Modul Praktikum Algoritma dan Struktur Data

MODUL IV STACK A. TUJUAN

Struktur Data. Stack STMIK AMIKOM YOGYAKARTA. Bayu Setiaji, S.Kom

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

BAB II STACK Atau TUMPUKAN

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan

Praktikum 6. Konsep Rekursi Perbandingan Perulangan biasa dan Rekursi Implementasi Rekursi dalam Bahasa C

Tumpukan (Stack) Stack bersifat LIFO (Last In First Out) LIFO Data yang terakhir masuk ke dalam stack menjadi data yang pertama keluar dari stack

Algoritma Dan Struktur Data II

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Stack using Array. Alfa Faridh Suni, S.T., M.T. PTIK

Algoritma Pemrograman & Struktur Data

STACK/TUMPUKAN. R. Denny Ari Wibowo, S.Kom STMIK BINA NUSANTARA JAYA LUBUKLINGGAU

ARNA FARIZA YULIANA SETIOWATI

Stack. Pointer ke node pertama dari stack. Bagian deklarasi di atas kita asumsikan disimpan menjadi sebuah header file dengan nama stack.

STACK. Sistem penyimpanan data dengan mekanisme Last In First Out( LIFO).

BAB III. Stack. ( Tumpukan )

BAB 3 STACK (TUMPUKAN)

Materi 8 : STACK (TUMPUKAN) Dosen:

Tipe Data dan Operator

STRUKTUR DATA Pertemuan 1 s.d 8

S T A C K ( T U M P U K A N )

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE

STACK DAN QUEUE. Pengertian Stack Dan Queue. stack & queue. Last saved by KENKEINA Created by KENKEINA

ALGORITMA DAN STRUKTUR DATA

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

04. Single Linked List

Praktikum Stack. A. Stack Collection di java.util.collection. Percobaan 1. Percobaan 2. import java.util.iterator; import java.util.

BAB II STACK (TUMPUKAN)

LAPORAN PRAKTIKUM RESMI QUEUE

Pertemuan 10. Tumpukan (Stack) Dipersiapkan oleh : Boldson Herdianto. S., S.Kom., MMSI.

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS

A. TUJUAN PEMBELAJARAN

STRUKTUR DATA POKOK BAHASAN - 8 QUEUE ( ANTRIAN)

Praktikum 9. Pengurutan (Sorting) Quick Sort, Merge Sort

Pengambilan Keputusan. Konsep Pemrograman Oleh Tita Karlita

PRAKTIKUM 6 PENGULANGAN PROSES 2

A. TUJUAN PEMBELAJARAN 1. Memahami konsep dan operasi pada Stack. 2. Mampu mengimplementasikan struktur data Stack pada array dan List.

Pencarian (Searching)

Perulangan, Percabangan, dan Studi Kasus

Latihan & Kisi-kisi UTS DASAR PEMROGRAMAN

4. STACK / TUMPUKAN TEORI PENUNJANG

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

Implementasi Struktur Data Stack (Tumpukan) dalam Tower of Hanoi Game

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

Praktikum 1. Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa : tipe_data nama_var[ukuran];

Konsep Pohon (Tree) Binary Tree Penyajian Tree dengan Array Penyajian Tree dengan Linked List Metode Traversal (Kunjungan Node pada Tree)

BAB IV Antrian(Queue)

PRAKTIKUM 2. perubah (variabel), konstanta, fungsi, atau obyek lain yang didefinisikan oleh

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK

Single Linked List (1)

Algoritma dan Struktur Data STACK

Bab 3. Decision 1 (Pengambilan Keputusan)

A. TUJUAN PEMBELAJARAN

MODUL PRAKTIKUM. MODUL I - VIII Modul penuntun dan bahan praktikum matakuliah algoritma dan pemograman

OPERATOR, PERULANGAN DAN SELEKSI KONDISI

BAB 5 PERULANGAN DAN ARRAY

Proses Perulangan (Looping) DASAR PROGRAMMING 1

Chapter 1 KONSEP DASAR C

BAB VII STACK ( TUMPUKAN)

Praktikum 5. Antrian (Queue)

Pertemuan 7. Tipe Data Sederhana

05. Double Linked List

STACK ATAU TUMPUKAN 3.1 DAFTAR LINEAR

# FOUR LOOPING. JAWABAN 1. #include <stdio.h> #include <conio.h> #define pi void main(){

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

BAB II LANDASAN TEORI

Algoritma Dan Struktur Data II

# NINE Queue dengan Array

BAB V Tujuan 5.1 Rekursi Dasar

INFIX, POSTFIX, dan PREFIX Bambang Wahyudi

Struktur Data. Tumpukan : Definisi & Operasi. Pertemuan 4 PROBLEM ALGORITHM DATA IMPLEMENTATION. Pert. 4b Struktur Data - FMIPA USD

Array dan Matriks. IF2121 / Algoritma dan Struktur Data Sem / /7/2017 IF2121/sem /2018 1

Achmad Solichin.

Selection / Pemilihan PEMILIHAN

UJIAN TENGAH SEMESTER GANJIL TAHUN STMIK AMIKOM YOGYAKARTA

MODUL PEMROGRAMAN 2. Queue (Antrian)

PRAKTIKUM 4 PENGAMBILAN KEPUTUSAN

Turbo C adalah tool yang dipakai untuk membuat code program dalam bahasa C ataupun C++. Berikut adalah jendela utama Turbo C

Kondisional/Pencabangan/Pemilihan. Konsep Pencabangan Sintaks Konsep if (kasus tunggal) Konsep if-else (2-3 kasus) Konsep switch (lebih dari 3 kasus)

Pemrograman Dasar C. Minggu 6

Bahasa C-M6 By Jamilah, Skom 1

A. TUJUAN PEMBELAJARAN

Stack. Gambar 1.1 Stack

Transkripsi:

Praktikum 4 Tumpukan (Stack) POKOK BAHASAN: Konsep Tumpukan (Stack) Struktur data untuk Tumpukan Algoritma merubah Infix menjadi Postfix Implementasi Tumpukan dalam Bahasa C TUJUAN BELAJAR: Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: Memahami terminologi yang terkait dengan struktur data stack. Memahami operasi-operasi yang ada dalam stack. Mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan menggunakan stack, sekaligus menyelesaikannya DASAR TEORI: Salah satu konsep yang efektif untuk menyimpan dan mengambil data adalah "terakhir masuk sebagai yang pertama keluar" (Last In First Out / LIFO). Dengan konsep ini, pengambilan data akan berkebalikan urutannya dengan penyimpanan data. Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data yang lain. Dengan demikian stack adalah struktur data yang menggunakan konsep LIFO. Dengan demikian, elemen terakhir yang disimpan dalam stack menjadi elemen pertama yang diambil. Dalam proses komputasi, untuk meletakkan sebuah elemen pada bagian atas dari stack, maka kita melakukan push. Dan untuk memindahkan dari tempat yang atas tersebut, kita melakukan pop. 42

PRAKTIKUM 4 TUMPUKAN (STACK) 43 Untuk menjelaskan pengertian diatas kita mengambil contoh sebagai berikut. Misalnya kita mempunyai dua buah kotak yang kita tumpuk, sehingga kotak kita letakkan di atas kotak yang lain. Jika kemudian stack dua buah kotak tersebut kita tambah dengan kotak ketiga dan seterusnya, maka akan kita peroleh sebuah stack kotak, yang terdiri dari N kotak. Secara sederhana, sebuah stack bisa kita ilustrasikan seperti pada gambar 4.1 di bawah ini. Dari gambar di bawah ini, kita bisa mengatakan bahwa kotak B ada di atas kotak A dan ada di bawah kotak C. Dari gambar tersebut kita dapat melihat bahwa kita hanya bisa menambah atau mengambil sebuah kotak lewat satu ujung, yaitu ujung bagian atas. Nampak pula bahwa stack merupakan kumpulan data yang sifatnya dinamis, artinya kita bisa menambah atau mengambil data darinya. To Gambar 3.1 Ilustrasi Sebuah Stack 4.1 REPRESENTASI STACK dengan ARRAY Ada beberapa cara untuk menyajikan sebuah stack tergantung pada permasalahan yang akan kita selesaikan. Dalam bab ini kita akan menggunakan cara yang paling sederhana, tipe data yang sudah kita kenal, yaitu array. Kita dapat menggunakan array untuk menyajikan sebuah stack, dengan anggapan bahwa banyaknya elemen maksimum dari stack tersebut tidak akan melebihi batas maksimum banyaknya elemen dalam array. Pada saat ukuran stack, kalau kita teruskan menambah data lagi, akan terjadi overflow. Dengan demikian perlu data tambahan untuk mencatat posisi ujung stack.

PRAKTIKUM 4 TUMPUKAN (STACK) 44 Dengan kebutuhan seperti ini, kita dapat menyajikan stack dengan menggunakan tipe data struktur (struct) yang terdiri dari dua field. Field pertama bertipe array untuk menyimpan elemen stack, medan kedua bertipe integer untuk mencatat posisi ujung stack. Dengan demikian kita mendeklarasikan stack sebagai berikut: #define MAXSTACK 100 typedef int ItemType; /* Definisi struktur stack */ typedef struct int Item[MAXSTACK]; /* Array yang berisi data tumpukan */ int Count; /* menunjukkan indeks data paling atas dari stack */ Stack; 4.2 OPERASI PADA STACK Operasi-operasi Dasar pada stack adalah sebagai berikut: 1. Operasi menciptakan T sebagai stack kosong void InitializeStack(Stack *S) S->Count = 0; 2. Fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong int Empty(Stack *S) return (S->Count == 0); 3. Fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh int Full(Stack *S) return (S->Count == MAXSTACK); 4. Operasi menyisipkan elemen x ke stack T dan mengembalikan stack baru void Push(ItemType x, Stack *S) if (S->Count==MAXSTACK) printf("stack penuh! Data tidak dapat masuk!");

PRAKTIKUM 4 TUMPUKAN (STACK) 45 else S->Item[S->Count]=x; ++(S->Count); 5. Operasi mengambil elemen puncak stack T, (pop(t,x)) int Pop(Stack *S, ItemType *x) if (S->Count==0)//stack kosong printf("stack masih kosong!"); else --(S->Count); *x = S->Item[S->Count]; ALGORITMA MERUBAH NOTASI INFIX MENJADI NOTASI POSTFIX 1. Baca ungkapan dalam notasi infix, misalnya S, tentukan panjang ungkapan tersebut, misalnya N karakter, siapkan sebuah stack kosong dan siapkan derajad masing-masing operator, misalnya: ^ berderajad 3, * dan / berderajad 2, + dan berderajad 1 dan ( berderajad 0. 2. Dimulai dari i = 1 sampai N kerjakan langkah-langkah sebagai berikut: a. R = S[I] b. Test nilai R. Jika R adalah: operand : langsung ditulis kurung buka : push ke dalam tumpukan kurung tutup : pop dan tulis semua isi tumpukan sampai ujung tumpukan = (. Pop juga tanda ( ini, tetapi tidak usah ditulis operator : jika tumpukan kosong atau derajad R lebih tinggi dibanding derajad ujung tumpukan, push operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan dan tulis; kemudian ulangi pembandingan R dengan ujung tumpukan. Kenudian R di-push c. Jika akhir notasi infix telah tercapai, dan tumpukan masih belum kosong, pop semua isi tumpukan dan tulis hasilnya

PRAKTIKUM 4 TUMPUKAN (STACK) 46 Untuk memahami algoritma di atas, kita coba mengubah ungkapan berikut, yang ditulis menggunakan notasi infix, menjadi notasi postfix ( A + B ) / (( C D ) * E ^ F) Ilustrasi pengubahan notasi infix di atas menjadi notasi postfix secara lengkap tersaji dalam tabel sebagai berikut: Karakter dibaca Isi Tumpukan Karakter tercetak Hasil Notasi Postfix Yang Terbentuk ( ( A ( + A A + ( + B B A B ) + A B + / / ( / ( ( / ( ( C / ( ( C A B + C - / ( ( - D / ( ( - D A B + C D ) / ( - A B + C D - * / ( * E / ( * E A B + C D E ^ / ( * ^ F / ( * ^ F A B + C D E F ) / ( * ^ A B + C D E F ^ / ( * A B + C D E F ^ * / / A B + C D E F ^ * Dari ilustrasi di atas, bisa kita lihat bahwa notasi postfix dari ungkapan: ( A + B ) / (( C D ) * E ^ F)

PRAKTIKUM 4 TUMPUKAN (STACK) 47 adalah A B + C D E F ^ */ TUGAS PENDAHULUAN: 1. Buatlah flowchart untuk masing-masing operasi stack seperti yang sudah dijelaskan di dasar teori 2. Buatlah flowchart untuk latihan no soal 1 & 2. PERCOBAAN: 1. Buatlah workspace untuk praktikum Struktur Data dengan menggunakan Visual C++. 2. Buatlah project untuk praktikum KEEMPAT. 3. Cobalah untuk masing-masing percobaan di bawah ini. 4. Selesaikan soal-soal yang ada dengan mengimplementasikan flowchart yang anda buat pada Tugas Pendahuluan. Percobaan 1 : Penerapan Fungsi-Fungsi Tumpukan, Memasukkan Isi Tumpukan & Menampilkan Isi Tumpukan #include <stdio.h> #define MAXSTACK 5 typedef int ItemType; /* Definisi struktur stack */ typedef struct int Item[MAXSTACK]; /* Array yang berisi data tumpukan */ int Count; /* menunjukkan indeks data paling atas dari stack */ Stack;

PRAKTIKUM 4 TUMPUKAN (STACK) 48 void InitializeStack(Stack *S) S->Count = 0; int Empty(Stack *S) return (S->Count == 0); int Full(Stack *S) return (S->Count == MAXSTACK); void Push(ItemType x, Stack *S) if (S->Count==MAXSTACK) printf("stack penuh! Data tidak dapat masuk!"); else S->Item[S->Count]=x; ++(S->Count); int Pop(Stack *S) if (S->Count==0)//stack kosong printf ("Stack masih kosong!"); else --(S->Count); return (S->Item[S->Count]);

PRAKTIKUM 4 TUMPUKAN (STACK) 49 void main() int i,input; Stack tumpukan; InitializeStack(&tumpukan); for (i=0;i<maxstack;i++) printf ("Masukkan isi stack ke- %d : ",i+1); scanf(&input); Push(input,&tumpukan); for (i=maxstack;i>0;i--) printf("isi stack ke- %d : ",I) ; printf("%d \n",pop(&tumpukan)); Percobaan 2 : Program Merubah Notasi Infix menjadi Postfix /* Implementasi algoritma utk mengubah infix menjadi postfix */ #include <stdio.h> #include <string.h> #define MAXSTACK 100 typedef char ItemType; typedef struct char item[maxstack]; /* Array yg berisi data tumpukan */ int count; /* menunjukkan indeks data paling atas dari stack */ Stack; Stack tumpukan; void InitializeStack(Stack *); int Empty(Stack *); int Full(Stack *);

PRAKTIKUM 4 TUMPUKAN (STACK) 50 void Push(ItemType, Stack *); ItemType Pop(Stack *); int drjt(char); void konversi_cetak(char []); main() char tampung[maxstack], jawab; puts("mengubah NOTASI INFIX MENJADI PSOTFIX"); puts("dengan MEMANFAATKAN STRUKTUR STACK"); do InitializeStack(&tumpukan); fflush(stdin); puts(""); printf("masukan ekspresi dalam notasi infix : "); fgets(tampung, sizeof(tampung), stdin); printf("ungkapan postfixnya = "); konversi_cetak(tampung); puts(""); fflush(stdin); printf("\nmau mencoba lagi (y/t)? "); scanf("%c", &jawab); while((jawab == 'y') (jawab == 'Y')); void InitializeStack(Stack *S) S->count = 0; int Empty(Stack *S) return (S->count == 0);

PRAKTIKUM 4 TUMPUKAN (STACK) 51 int Full(Stack *S) return (S->count == MAXSTACK); void Push(ItemType x, Stack *S) if (Full(S)) //stack penuh printf("stack penuh! Data tidak dapat masuk!"); else ++(S->count); S->item[S->count]=x; ItemType Pop(Stack *S) ItemType x; if (Empty(S)) //stack kosong printf ("STACK KOSONG!"); return 0; else x = (S->item[S->count]); --(S->count); return x;

PRAKTIKUM 4 TUMPUKAN (STACK) 52 int drjt(char x) //menentukan derajat operator if(x == '(') return 0; else if((x == '+') (x == '-')) return 1; else if((x == '*') (x == '/')) return 2; else if(x == '^') return 3; else return -1; //invalid operator void konversi_cetak(char temp[]) int i, pjg, valid = 1; char kar, smtr; pjg = strlen(temp)-1; for (i=0;i<pjg;i++) kar = temp[i]; //membaca input per karakter switch(kar) //if kar = '(' -> push ke dalam tumpukan case '(' : Push(kar, &tumpukan); break; //if kar = operand -> langsung ditulis case '0': case '1': case '2': case '3': case '4': case '5' : case '6': case '7': case '8': case'9': printf("%c", kar); break;

PRAKTIKUM 4 TUMPUKAN (STACK) 53 /* if kar = operator -> jika tumpukan kosong atau derajad kar lbh tinggi dibanding derajad ujung tumpukan, push operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan dan tulis; Ulangi pembandingan kar dengan ujung tumpukan. Kemudian kar di-push */ case '+': case '-': case'*': case '/': case '^' : if((empty(&tumpukan)) ((drjt(kar) > drjt(tumpukan.item[tumpukan.count])))) Push(kar, &tumpukan); else do smtr = Pop(&tumpukan); printf("%c", smtr); while (drjt(kar) < drjt(tumpukan.item[tumpukan.count])); Push(kar, &tumpukan); break; /* if kar = ')' -> pop dan tulis semua isi tumpukan sampai ujung tumpukan = '('. Pop juga tanda '(' ini, tetapi tidak usah ditulis */ case ')' : while(tumpukan.item[tumpukan.count]!= '(') smtr = Pop(&tumpukan); printf("%c", smtr); Pop(&tumpukan); break; default : //selain dari kar yang diijinkan

PRAKTIKUM 4 TUMPUKAN (STACK) 54 valid = 0; puts("invalid STSTEMEN"); break; //end of switch-case //end of looping for /* Jika statemen valid, akhir notasi infix telah tercapai, sedangkan tumpukan masih belum kosong, pop semua isi tumpukan dan tulis hasilnya */ if((valid!= 0) && (!Empty(&tumpukan))) smtr = Pop(&tumpukan); printf("%c", smtr); LATIHAN 1. Buatlah sebuah program yang melakukan konversi dari bilangan desimal ke bilangan biner, octal, heksa dengan menggunakan stack 2. Buatlah sebuah program yang melakukan pembalikan terhadap kalimat dengan menggunakan stack Contoh: Kalimat : Struktur Data Hasil setelah dibalik : atad rutkurts 3. Tentukan apakah sebuah kalimat yang diinputkan dalam program (dengan menggunakan stack) adalah sebuah palindrom atau bukan. Palindrom adalah kalimat yang jika dibaca dari depan dan dari belakang, maka bunyinya sama. Contoh: Kalimat : sugus Kalimat tersebut adalah palindrom

PRAKTIKUM 4 TUMPUKAN (STACK) 55 4. Tambahkan implementasi Percobaan2 hingga mendapatkan hasil penghitungannya. Contoh: infix : 5 * ( 4 2 ) postfix : 542-* hasil : 10