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

dokumen-dokumen yang mirip
Kode : IF2121 NIM :... Matakuliah : Algoritma dan Struktur Data Nama :... Hari, Tanggal : Senin, 13 November 2017 Waktu : 150 Menit

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Stack (Tumpukan)

Variasi List Linier (Bagian 2)

Algoritma Pemrograman & Struktur Data

STACK DAN QUEUE (Muhammad Fachrie, STMIK Amikom Yogyakarta)

QUEUE Antrian 1. DEFINISI

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

MODUL 6 SINGLE & DOUBLE LINKED LIST

Algoritma dan Struktur Data. Ramos Somya

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 Stack (Tumpukan)

Modul Praktikum Algoritma dan Struktur Data BAB 6 LINKED LIST

Bahasa C melengkapi fasilitas modular dengan menggunakan fungsi pada setiap SubProgram. Contoh pembagian program menjadi beberapa subprogram.

Praktikum 4. Tumpukan (Stack)

Games and Quiz PT II. Dr. Putu Harry Gunawan, MSi.,MSc. phg-simulation-laboratory.com

LAPORAN PRAKTIKUM IV. Oleh:

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

Seharusnya. if (antrian.tail==max-1) return 0;

A. TUJUAN PEMBELAJARAN

Struct Lanjutan: Studi Kasus

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

SENARAI BERANTAI (LINK LIST)

STACK Tumpukan TOP TOP BOTTOM BOTTOM

Praktikum Algoritma dan Struktur Data

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

Struktur Data. Queue (Antrian)

BAB 3 STACK (TUMPUKAN)

Algoritma Shell Sort Ascending Dan Binary Sequential Search Menggunakan C

04. Single Linked List

BAB III. Stack. ( Tumpukan )

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

Bagian I. Studi Kasus [82] Tanda tangan:

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

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

BAB II STACK Atau TUMPUKAN

Algoritma dan Struktur Data. Pertemuan 5 Pointer

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

Algoritma dan Struktur Data. Linked List

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

Tipe Data dan Operator

Pengantar Bahasa C. Tim Pengajar ASD Semester I 2017/ /7/2017 FN/ASD/Sem /2018 1

Penambahan Simpul (Node)

IKG2A3/ Pemrograman Terstruktur 2

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

QUEUE (ANTREAN) Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu

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

05. Double Linked List

Modul Praktikum Algoritma dan Struktur Data

Tipe Data, Variabel, Input/Output

Single Linked List (1)

Algoritma dan Struktur Data. Ramos Somya

KONSEP POINTER DAN LINKED LIST

PERTEMUAN KE 11. Linked List. Apa Itu Linked List?

Dinamik Linked List. hari bulan tahun

Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String)

MODUL IV STACK A. TUJUAN

List Linier. IF2030/Algoritma dan Struktur Data. 11/6/2009 FNA+WDS/IF2030/Sem

MODUL PEMROGRAMAN 2. Queue (Antrian)

DIG1G3 Implementasi Struktur Data

A. TUJUAN PEMBELAJARAN

Apakah Anda sering kesulitan untuk

Mesin Karakter dan Mesin Kata

Algoritme dan Pemrograman

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

Perulangan, Percabangan, dan Studi Kasus

Modul 1 Dasar Dasar Bahasa Pemrograman C

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Variasi List Linier

BAB II STACK (TUMPUKAN)

KONSEP POINTER DAN LINKED LIST

Struktur Program Bahasa C

Bahasa C-M6 By Jamilah, Skom 1

PENGENALAN BAHASA C. A. Struktur Kode Program dalam Bahasa C Secara garis besar, suatu kode program dalam bahasa C memiliki struktur umum seperti ini:

STRUKTUR DATA Pertemuan 1 s.d 8

Lab. Teknik Informatika Struktur Data 1

// Created by Andri Andriyan // Linked List. #include <stdlib.h> #include <conio2.h> #include <stdio.h>

A. TUJUAN PEMBELAJARAN

TUGAS PENDAHULUAN MODUL 12 PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA STACK

Pertemuan 3. Perubah Dinamis (Dinamic variable) Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

A. Bagian I. Studi Kasus

PERTEMUAN 7 REVIEW (QUIZ)

a[0] a[1] a[2] a[3] a[4] a[5] x

Pencarian (Searching)

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

BAGIAN A. PILIHAN GANDA Silanglah Jawaban yang Benar Pada Lembar Jawaban. Jawaban benar bernilai 3, salah atau kosong bernilai 0.

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

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

ALGORITMA & PEMROGRAMAN

LAPORAN PRAKTIKUM IV. Oleh :

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

LAPORAN PRAKTIKUM RESMI QUEUE

KONSEP POINTER DAN LINKED LIST

Pendahuluan Struktur Data. Nisa ul Hafidhoh

MODUL PRAKTIKUM ALGORITMA DAN STRUKTUR DATA PERTEMUAN 1

Pendahuluan Pemrograman Mikrokontroler

Linked List 6.3 & 7.3 NESTED LOOP

SINGLE LINKED LIST NON CIRCULAR (SENARAI BERANTAI TUNGGAL TIDAK BERPUTAR)

Kisi-Kisi Ujian Tengah Semester Algoritma dan Pemrograman Lanjut

Transkripsi:

Implementasi Struktur Data Stack (Tumpukan) dalam Tower of Hanoi Game Oleh: Adnan w Anadrep Selamat datang di tutorial ini, kali ini saya akan memberikan tutorial tentang pengimplementasian struktur data stack (tumpukan) dalam sebuah game. Game yang saya angkat kali ini adalah game tower of hanoi. Selamat datang di tutorial ini, kali ini saya akan memberikan tutorial tentang pengimplementasian struktur data stack (tumpukan) dalam sebuah game. Game yang saya angkat kali ini adalah game tower of hanoi. The Tower of Hanoi (juga disebut Menara Brahma atau Lucas 'Tower) adalah permainan matematika atau teka-teki. Ini terdiri dari tiga batang, dan sejumlah piringan dengan ukuran yang berbeda yang dapat berpindah ke batang lainnya. Teka-teki dimulai dengan tumpukan piringan dalam urutan ukuran pada satu batang, yang terkecil di bagian atas, sehingga membuat bentuk kerucut. Tujuan dari teka-teki adalah untuk memindahkan seluruh tumpukan ke batang lain, dan harus mematuhi aturan sederhana berikut ini: 1. Hanya satu piringan dapat dipindahkan pada satu kali langkah. 2. Setiap langkah terdiri dari mengambil satu piringan paling atas dari salah satu tumpukan dan meletakkannya di paling atas tumpukan lain yaitu piringan hanya dapat dipindahkan jika piringan ada di paling atas suatu tumpukan. 3. Tidak ada piringan yang dapat ditempatkan di atas piringan yang lebih kecil. Sedangkan algoritma yang kita gunakan dalam membuat game ini adalah algoritma Stack (tumpukan) dalam teori Struktur Data. Stack (tumpukan) adalah salah satu model struktur data yang tersusun secara LIFO (Last In First Out) dimana penyisipan elemen selalu dilakukan di atas (TOP) dan penghapusan elemen selaku dilakukan pada TOP. Stack disini diimplementasikan dengan single link list dinamis. Dalam membuat game ini, saya menggunakan tipe data ADT (Abstract Data Type). Abtract Data Type merupakan suatu konsep pemrograman yang terkait dengan pendefinisian TYPE dan kumpulan PRIMITIF terhadap TYPE tersebut. TYPE dapat dikatakan sebagai hasil proses Abstraksi awal data dari permasalahan (studi kasus) yang sedang dihadapi. Sedangkan PRIMITIF adalah operasi dasar terhadap TYPE tersebut. Oke tidak usah panjang lebar lagi, mari kita buat game ini :D Langkah pertama yang harus kamu

lakukan adalah membuat file header.h untuk membuat spesifikasi yang dibutuhkan dalam game ini. Spesifikasi yang harus kamu buat adalah: Infotype (info suatu elemen, dalam hal ini bertipe integer) Elemen stack Stack #ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED // definisikan properti dari list biar lebih mudah dibaca #define Info(P) (P)->Info #define Next(P) (P)->Next #define Top(S) (S).Top #define Max(S) (S).Max #define Count(S) (S).Count #define Nil NULL #define bool unsigned short int #define False 0 #define True!False #include <stdio.h> #include <stdlib.h> #include <conio.h> // ini adalah infotype yang ada pada elemen typedef int InfoType; // membuat elemen stack untuk single link list typedef struct telmstack *Address; typedef struct telmstack InfoType Info; Address Next; ElmStack; // list typedef struct Address Top; int Count; Stack; void CreateStack(Stack *S); // I.S. Sembarang // F.S. Terbentuk Stack kosong bool IsEmpty(Stack S); // Menghasilkan True jika Stack kosong, dan False jika Stack tidak kosong Address Allocate(InfoType X);

// Menghasilkan Address dari alokasi sebuah elemen dengan InfoType X // Jika alokasi berhasil maka nilai Address tidak Nil dan jika gagal nilai Address Nil void DeAllocate(Address P); // I.S. P terdefinisi // F.S. Memori yang digunakan oleh P dikembalikan ke sistem void Push(Stack *S, Address P); // I.S. Sembarang, P terdefinisi // F.S. Menempatkan P pada Top dari S void Pop(Stack *S, Address *P); // I.S. Stack tidak kosong // F.S. Mengambil P dari Top dari S void ViewStack(Stack S); // I.S. Sembarang // F.S. Menampilkan semua Info dari masing-masing elemen dari Stack void ViewVisual(Stack S[3], int TotalDisk); // I.S. Tiga Stack, Total Disk > 0 // F.S. Menampilkan visualisasi Menara Hanoi dari 3 Stack tersebut #endif // HEADER_H_INCLUDED Setelah selesai membuat spesifikasi program yang dibutuhkan, kini saatnya masuk ke langkah kedua yaitu pembuatan implementasi dari abstract type yang sudah dibuat. Kamu perlu membuat file baru yaitu implementasi.c. Pada file ini kamu harus mengimplementasikan prosedur dan function yang sudah kamu definisikan di file header.h yang sudah dibuat, maka kamu harus meng-include file header.h di file ini. #include "header.h" void CreateStack(Stack *S) Top(*S) = Nil; Count(*S) = 0; bool IsEmpty(Stack S) return Top(S) == Nil; Address Allocate(InfoType X) Address P = (Address)malloc(sizeof(ElmStack));

if (P!= Nil) Info(P) = X; Next(P) = Nil; return P; void DeAllocate(Address P) free(p); void Push(Stack *S, Address P) Next(P) = Top(*S); Top(*S) = P; Count(*S)++; void Pop(Stack *S, Address *P) *P = Top(*S); Top(*S) = Next(*P); Count(*S)--; void ViewStack(Stack S) Address P; InfoType X[Count(S)]; int i = 0; for (P = Top(S); P!= Nil; P = Next(P)) X[i] = Info(P); i++; for (i = Count(S) - 1; i >= 0; i--) printf("%d ", X[i]); void ViewVisual(Stack S[3], int TotalDisk) int i, j, k; Address P; InfoType X[3][TotalDisk]; for (i = 0; i < 3; i++) for (j = 0; j < TotalDisk - Count(S[i]); j++) X[i][j] = 0; for (P = Top(S[i]); P!= Nil; P = Next(P))

X[i][j] = Info(P); j++; for (i = 0; i < TotalDisk; i++) for (j = 0; j < 3; j++) if (X[j][i] == 0) for (k = 0; k < 2 * TotalDisk - 1; k++) else for (k = 0; k < TotalDisk - X[j][i]; k++) for (k = 0; k < 2 * X[j][i] - 1; k++) printf("="); for (k = 0; k < TotalDisk - X[j][i]; k++) printf("\n"); for (i = 1; i <= 3; i++) for (j = 0; j < TotalDisk - 1; j++) printf("%d", i); for (j = 0; j < TotalDisk - 1; j++) printf("\n"); fiuuhh... Setelah selesai membuat implementasi dari abstract data type yang dibuat, kini saatnya kamu masuk ke langkah ketiga yaitu membuat driver atau main program yang kamu akan buat ini, maka kamu perlu membuat file main.c yang didalamnya adalah file utama yang akan dijalankan oleh compiler. Sebelumnya kamu harus include file header.h. Namun, ada beberapa compiler yang meminta include file implementasinya (implementasi.c). Kali ini saya include file headernya (header.h). #include "header.h" int main()

int i; int CMain, TotalDisk, MFrom, MTo, MCount; Address P; // membuat 3 stack (tower) Stack Tower[3]; for (i = 0; i < 3; i++) CreateStack(&Tower[i]); // membuat menu program do system("cls"); printf("================\n"); printf(" TOWER OF HANOI\n"); printf("================\n"); printf(" 1. New Game\n"); printf(" 2. Credits\n"); printf(" 3. Quit\n"); printf("================\n\n"); printf(" Your Input: "); scanf("%d", &CMain); switch (CMain) case 1: do system("cls"); printf("================\n"); printf(" NEW GAME\n"); printf("================\n"); printf(" Total Disk: "); scanf("%d", &TotalDisk); if (TotalDisk <= 0) printf("\n Invalid input. Please input again.\n"); while (TotalDisk <= 0); // menyisipkan piringan yang telah diinput kedalam stack (tower) pertama for (i = 0; i < TotalDisk; i++) Push(&Tower[0], Allocate(TotalDisk - i)); // obey the rule MCount = 0; do

system("cls"); for (i = 0; i < 3; i++) printf("\n Tower %d: ", i + 1); ViewStack(Tower[i]); printf("\n\n"); ViewVisual(Tower, TotalDisk); printf("\n\n Move Count: %d\n\n", MCount); printf("\n Move From : "); scanf("%d", &MFrom); printf("\n To : "); scanf("%d", &MTo); MFrom--; MTo--; if (MFrom >= 0 && MFrom <= 2 && MTo >= 0 && MTo <= 2) if (!IsEmpty(Tower[MFrom])) if (IsEmpty(Tower[MTo])) Pop(&Tower[MFrom], &P); Push(&Tower[MTo], P); MCount++; else if (Info(Top(Tower[MTo])) > Info(Top(Tower[MFrom]))) Pop(&Tower[MFrom], &P); Push(&Tower[MTo], P); MCount++; else printf("\n Invalid move. Please input your move again.\n"); else printf("\n Invalid move. Please input move again.\n"); else printf("\n Invalid move. Please input move again.\n");

TotalDisk); while (Count(Tower[1])!= TotalDisk && Count(Tower[2])!= system("cls"); for (i = 0; i < 3; i++) printf("\n Tower %d: ", i + 1); ViewStack(Tower[i]); printf("\n\n"); ViewVisual(Tower, TotalDisk); printf("\n\n Move Count: %d\n", MCount); printf("\n Congratulation, you win!\n"); while (!IsEmpty(Tower[1])) Pop(&Tower[1], &P); DeAllocate(P); while (!IsEmpty(Tower[2])) Pop(&Tower[2], &P); DeAllocate(P); break; case 2: system("cls"); printf("==================================\n"); printf(" TOWER OF HANOI\n"); printf(" Copyright @ndhaperdana\n"); printf("==================================\n\n"); break; case 3: printf("\n Thanks for playing.\n"); break; default: printf("\n Invalid input. Please input again.\n"); while (CMain!= 3); return 0;

Akhirnya selesai sudah kamu membuat game ini, tinggal di compile kemudian jalankan, dan kamu bisa mencoba mengasah otak kamu dengan bermain game yang sudah kamu buat sendiri :) Jalankan kodenya, maka akan muncul seperti ini, selamat bermain :) Sekian tutorial dari saya :) Tentang Penulis Adnan w Anadrep