• Tidak ada hasil yang ditemukan

Laporan Algoritma dan Struktur Data Modu (1)

N/A
N/A
Protected

Academic year: 2018

Membagikan "Laporan Algoritma dan Struktur Data Modu (1)"

Copied!
18
0
0

Teks penuh

(1)

STACK

Tujuan Umum

1. Memahami terminologi yang terkait dengan struktur data stack

2. Memahami operasi-operasi yang ada dalam stack

3. Dapat mengidentifikasi permasalahan-permasalahan pemrograman yang harus

diselesaikan dengan menggunakan stack, sekaligus menyelesaikannya

DASAR TEORI

STACK

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.

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. 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.

Ada 2 operasi paling dasar yang penting dari stack yang dapat dilakukan, yaitu :

a.

Operasi push yaitu operasi menambahkan elemen data pada urutan terakhir (paling

atas).

b.

Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dari

stack.

(2)

maksimumnya tidak dibatasi, maka linked list lebih tepat digunakan. 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.

Operasi Pada Stack

Operasi-operasi Dasar pada stack adalah sebagai berikut:

1.

Operasi data abstrak STACK

2.

Fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong

3.

Fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh

4.

Fungsi untuk menghapus seluruh stack

5.

Fungsi untuk mencetak isi stack

Percobaan 1

Algoritma dan Struktur Data

Nama Program

: Program STACK

(3)

Compiler

: Code Blocks

Script program

:

-

Script salah

#include <iostream> #define maxstack 5 using namespace std;

struct STACK //membuat jenis data abstrak 'STRACK' {

int top;

float data [4]; };

float dta;

struct STACK stackbaru;

bool isfull() //menanyakan : penuhkah? {

if(stackbaru.top == maxstack) return true;

else

return false; }

bool isempty() //menanyakan : kosongkah? {

if(stackbaru.top == -1) return true; else

return false; }

void push(float dta) //mengisi stack (menyimpan data di stack) {

if(isfull() == false) //jika stack belum penuh {

stackbaru.top++;

stackbaru.data[stackbaru.top] = dta; }

else {

puts("Maaf, stack penuh"); getch();

} }

void pop() //mengambil isi stack {

if(isempty() == false) {

cout<<"Data yang terambil : "<<stackbaru.data[stackbaru.top]<<endl;

stackbaru.top--; }

else {

cout<<"Data telah kosong!"; }

}

void print() //mencetak stack {

for(int i=0; i<= top; i++) {

cout<<stackbaru.data[i]<<" "; }

}

void clear() //menghapus semua stack {

top = -1; }

(4)

{

inisialisasi(); //pemanggilan fungsi inisialisasi char menu; char uulang; do { system("cls"); printf("Menu:\n"); puts("1. Pop stack"); puts("2. Push stack"); puts("3. Cetak");

puts("4. Bersihkan stack"); puts("5. Exit");

cout<<"Menu pilihan Anda: "; cin>>menu; if(menu == '1')

{

pop(); getch(); uulang = 'y'; }

else if(menu == '2') {

cout<<"Data yang akan disimpan di stack : "; cin>>dta; push(dta);

uulang = 'y'; }

else if(menu == '3') {

print();

cout<<"Ulang? (y/t) "; cin>>uulang; }

else if(menu == '4') {

clear();

cout<<"Ulang? (y/t) "; cin>>uulang; }

else if(menu == '5') {

exit(0); }

}

while(uulang == 'Y' || uulang == 'y'); }

-

Script Benar

#include <conio.h> #include <iostream> #include <stdio.h> #include <windows.h>

#define maxstack 5 //maxstack terdefinisi 5

using namespace std; //untuk pembacaan karakter spasi

struct STACK //membuat jenis data abstrak 'STRACK' {

int top;

float data [4]; };

float dta;

struct STACK stackbaru;

void inisialisasi() //menginisialisasi top = -1 {

stackbaru.top = -1; }

bool isfull() //menanyakan : penuhkah? {

(5)

return true; else

return false; }

bool isempty() //menanyakan : kosongkah? {

if(stackbaru.top == -1) return true; else

return false; }

void push(float dta) //mengisi stack (menyimpan data di stack) {

if(isfull() == false) //jika stack belum penuh {

stackbaru.top++;

stackbaru.data[stackbaru.top] = dta; }

else {

puts("Maaf, stack penuh"); getch();

} }

void pop() //mengambil isi stack {

if(isempty() == false) {

cout<<"Data yang terambil : "<<stackbaru.data[stackbaru.top]<<endl; stackbaru.top--;

} else {

cout<<"Data telah kosong!"; }

}

void print() //mencetak stack {

cout<<"Data pada stack : ";

for(int i=0; i<=stackbaru.top; i++) {

cout<<stackbaru.data[i]<<" "; }

}

void clear() //menghapus semua stack {

stackbaru.top = -1; }

int main() {

inisialisasi(); //pemanggilan fungsi inisialisasi

char menu; char uulang;

do {

system("cls");

printf("Menu:\n"); puts("1. Pop stack"); puts("2. Push stack"); puts("3. Cetak");

(6)

cout<<"Menu pilihan Anda: "; cin>>menu;

if(menu == '1') {

pop(); getch(); uulang = 'y'; }

else if(menu == '2') {

cout<<"Data yang akan disimpan di stack : "; cin>>dta; push(dta);

uulang = 'y'; }

else if(menu == '3') {

print();

cout<<"Ulang? (y/t) "; cin>>uulang; }

else if(menu == '4') {

clear();

cout<<"Ulang? (y/t) "; cin>>uulang; }

else if(menu == '5') {

exit(0); }

}

while(uulang == 'Y' || uulang == 'y'); }

(7)

Algoritma :

1. Mulai.

2. Membaca header file

3. Mendeklarasikan fungsi stack

a. Struct Stack (membuat jenis data abstrak 'STRACK')

b. Void inisialisasi (menginisialisasi top = -1)

c. Bool isfuul (menanyakan : penuhkah?)

d. Bool isempety (menanyakan : kosongkah?)

e. Void push (mengisi stack, menyiman data di stack)

f. Void pop (mengambil isi stack)

g. Void print (mencetak stack)

h. Void clear (menghapus semua stack)

4. Pilihan Menu Stack

a). Menu 1 adalah Pop stack, jika pilih satu maka akan memanggil fungsi pop :

void pop() //mengambil isi stack

{

if(isempty() == false) {

cout<<"Data yang terambil : "<<stackbaru.data[stackbaru.top]<<endl;

stackbaru.top--; }

else {

cout<<"Data telah kosong!"; }

}

b). Menu 2 adalah Push stack, jika pilih 2 maka akan memanggil fungsi push :

void push(float dta) //mengisi stack (menyimpan data di stack) {

if(isfull() == false) //jika stack belum penuh {

stackbaru.top++;

stackbaru.data[stackbaru.top] = dta; }

else {

puts("Maaf, stack penuh"); getch();

} }

c). Menu 3 adalah Cetak, jika pilih 3 maka akan memanggil fungsi print :

void print() //mencetak stack

{

cout<<"Data pada stack : ";

for(int i=0; i<=stackbaru.top; i++) {

(8)

}

d). Menu 4 adalah Bersihkan stack, jika pilih 4 maka akan memanggil fungsi

clear :

void clear() //menghapus semua stack {

stackbaru.top = -1; }

e). Menu 5 adalah exit, jika pilih 5 maka program akan diakhiri

5. Selesai

Deskripsi:

Pada script awal program ini header file pada program kurang, header file ditambah

dengan

#include <conio.h>

#include <stdio.h> #include <windows.h>

Program diatas juga akan menghasilkan sebuah program yang menampilkan 5 pilihan menu

stack, diantara nya adalah pop stack yaitu untuk mengambil isi stack, push stack yaitu

mengisi dan menyimpan data di stack, selanjutnya ada, cetak yaitu akan menampilkan data

stack yang telah disimpan, menu selanjutnya bersihkan stack yaitu data stack akan

dibersihkan kembali, dan yang terakhir adalah exit.

Tugas Praktikum

Algoritma dan Struktur Data

Nama Program

: Program pembalikan kalimat dengan menggunakan

stack

Bahasa Pemrogramam

: C++

Compiler

: Code Blocks

Script program

:

//program yang dapat membalikkan kalimat dengan menggunakan stack #include <iostream>

#include <windows.h> #include <stdio.h> #include <conio.h> #define maxstack 200 using namespace std;

struct STACK //membuat jenis data abstrak stack {

int top;

char data[maxstack]; // pendeklarasian untuk menginputkan suatu kalimat dengan maks 200

};

char dta[maxstack]; struct STACK stackbaru;

bool isfull() // fungsi untuk mengetahui apakah stack dalam kondisi penuh (menggunakan boolean)

{

if (stackbaru.top == maxstack-1)

return true; // jika pengkondisian stack dalam keadaan penuh maka benar else

(9)

bool isempty() // fungsi untuk mengetahui apakah stack dalam kondisi kosong

{

if (stackbaru.top == -1) return true;

else return false; }

void push(char dta) // fungsi untuk proses push {

if (isfull() == false) // jika kondisi stack tidak penuh {

stackbaru.top++;// user menginputkan data dengan menggunakan variabel dta dimana dta tersebut akan disimpan di stackbaru yang paling atas

stackbaru.data[stackbaru.top]=dta; // increment, yang bermksud jika penginputan dta lagi maka akan tersimpan diatas dta sebelumnnya }

else // jika stack dalam kondisi penuh {

cout << "\nMaaf Stack penuh"; }

}

void pop() //mengambil isi stack {

while (isempty() == false) // jika kondisi stack tidak kosong {

cout<<stackbaru.data[stackbaru.top]; // akan menampilkan data di stack dimana data tersebut berada yang paling atas

stackbaru.top--; // decrement, maksudnya jika user memilih menu pop lagi maka rogam akan menampilkan data dibawah data yang telah terambiil sebelumnya

} }

void print() //mencetak stack {

system ("cls");

cout<<"\nKalimat awal : ";

for (int i=0; i<=stackbaru.top; i++) // diulang sebanyaknya data yang tersimpan didta

{

cout<<stackbaru.data[i]; }

}

void clear() {

stackbaru.top = -1; }

int main() {

char kata[200]; //menampung inputan

cout<< "Masukkan kalimat : "; gets(kata);

cout << endl;

for(int i=0; kata[i]; i++) {

push(kata[i]); }

print(); cout << endl;

(10)

pop(); cout<<"\n";

}

Output Program:

Algoritma :

1. Mulai.

2. Membaca header file

3. Deklarasi fungsi stack

a.

Struct Stack (membuat jenis data abstrak 'STRACK')

b.

Bool isfuul (fungsi untuk mengetahui apakah stack dalam kondisi penuh

(menggunakan boolean)

c.

Bool isempety (fungsi untuk mengetahui apakah stack dalam kondisi kosong)

d.

Void push (mengisi stack, menyiman data di stack)

e.

Void pop (mengambil isi stack)

f.

Void print (mencetak stack)

g.

Void clear (menghapus semua stack)

4. Masukkan sebuah kalimat. Pada proses ini akan menggunakan fungsi push

dan disimpan pada fungsi push :

void push(char dta) // fungsi untuk proses push {

if (isfull() == false) // jika kondisi stack tidak penuh {

stackbaru.top++;// user menginputkan data dengan menggunakan variabel dta dimana dta tersebut akan disimpan di stackbaru yang paling atas

stackbaru.data[stackbaru.top]=dta; // increment, yang bermksud jika penginputan dta lagi maka akan tersimpan diatas dta sebelumnnya

}

else // jika stack dalam kondisi penuh {

cout << "\nMaaf Stack penuh"; }

(11)

5. Hasil akan menampilkan kalimat awal dan setelah kalimat dibalik, untuk

membalik kalimat akan memanggil fungsi pop :

void pop() //mengambil isi stack {

while (isempty() == false) // jika kondisi stack tidak kosong {

cout<<stackbaru.data[stackbaru.top]; // akan menampilkan data di stack dimana data tersebut berada yang paling atas

stackbaru.top--; // decrement, maksudnya jika user memilih menu pop lagi maka rogam akan menampilkan data dibawah data yang telah terambiil sebelumnya

} }

6. Selesai

Deskripsi :

Program diatas adalah program untuk membalikan sebuah kalimat

menggunakan fungsi-fungsi stack. Fungsi-fungsi stack yang digunakan adalah

struct STACK yaitu untuk membuat jenis data abstrak stack, bool isfull() yaitu

fungsi untuk mengetahui apakah stack dalam kondisi penuh (menggunakan

boolean), bool isempty() yaitu fungsi untuk mengetahui apakah stack dalam

kondisi kosong, void push(char dta) yaitu fungsi untuk proses push atau mengisi

data, void pop() yaitu untuk mengambil isi stack, void print() yaitu untuk

mencetak stack, void clear() yaitu untuk membersihkan stack.

Tugas Rumah

Algoritma dan Struktur Data

Nama Program

: Program Kata

Bahasa Pemrogramam

: C++

Compiler

: Code Blocks.

Script program :

#include <iostream> #include <string.h> #include <stdlib.h> #define maxstack 10

using namespace std;

char pilih,tampil,ulang; int data_sama;

struct STACK /* deklarasi struktur STACK */ {

int top;

(12)

string nama[maxstack]; }stack_var;

bool isfull() /* fungsi boolean untuk mengecek apakah dalam kondisi penuh ? */

{

if (stack_var.top == maxstack-1) return true; else return false;

}

bool isempty() /* fungsi boolean untuk mengecek apakah dalam kondisi kosong ? */

{

if (stack_var.top == -1) return true; else return false;

}

void push() /* mengisi stack */ {

if (isfull() == true) {

cout << "\nMaaf Stack Penuh"; }

else {

stack_var.top++; do

{

data_sama=0;

cout<<"\n ID : ";

cin>>stack_var.id[stack_var.top]; for (int i=0;i<stack_var.top;i++) {

if (stack_var.id[stack_var.top]==stack_var.id[i]) /* jika ID dalam kondisi sama maka menampilkan sebuah statement */

{

data_sama=1;

cout<<"\nID sudah di gunakan...!!\n\n"; cout<<"Tampilkan Data...?? (y/t)? "; cin>>tampil;

if (tampil=='y'||tampil=='Y') {

cout<<"ID : "<<stack_var.id[i]<<"\nNama : "<<stack_var.nama[i]<<endl; /* menampilan ID yang sama */

}break; }

}

} while (data_sama==1);

cout<<"\n Nama : ";

cin>>stack_var.nama[stack_var.top]; }

}

void pop () { /* mengambil isi stack */ if (isempty()==true) {

cout<<"Maaf, Stack Masih Kosong...!!\n"; } else {

cout<<"Data yang terambil : \nID : "<<stack_var.id[stack_var.top]<<"\nNama : "<<stack_var.nama[stack_var.top]<<endl; cout<<"Telah di Ambil...!!\n\n"; stack_var.top--;

} }

(13)

{

cout<<"\nData :";

cout<<"\n| ID | Nama |"; for (int i=stack_var.top; i>=0; i--) {

cout<<"\n| "<<stack_var.id[i]<<" | "<<stack_var.nama[i]<<" "<<"|"<<endl;

cout<<"+---+"; }

}

void clear (){ /* menghapus isi stack */ stack_var.top = -1;

cout<<"Data Telah Kosong...!!\n\n"; }

void inisialisasi() /* karena dalam array di mulai pada indeks ke 0 */ {

stack_var.top=-1; }

int main() {

inisialisasi(); do

{

system("cls"); cout<<"\n\n";

cout<<" | ^^ MENU STACK ^^ |\n"; cout<<" |==========================|\n"; cout<<" | 1. Masukkan Data |\n"; cout<<" | 2. Keluarkan Data |\n"; cout<<" | 3. Kosongkan Data |\n"; cout<<" | 4. Tampilkan Data |\n"; cout<<" | 5. Keluar |\n\n";

cout<<"Pilih : ";cin>>pilih; switch(pilih)

{

case '1': push();

cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang;

break;

case '2': pop();

cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang;

break;

case '3': clear();

cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang;

break;

case '4': print();

cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang;

break;

case '5':

cout<<"\t\t\tThanks You \n"; exit(0);

cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang;

(14)

default :

cout<<"Maaf yang Anda Input Salah...!!\n\n"; cout<<"Menu Utama (y/t) ?";

cin>>ulang; break; }

} while (ulang=='Y'||ulang=='y');

}

(15)

Algoritma :

1. Mulai

2. Membaca header file

3. Deklarasi Fungsi stack

a.

Struct Stack (membuat jenis data abstrak 'STRACK')

b.

Bool isfuul (fungsi untuk mengetahui apakah stack dalam kondisi penuh

(menggunakan boolean)

c.

Bool isempety (fungsi untuk mengetahui apakah stack dalam kondisi kosong)

d.

Void push (mengisi stack, menyiman data di stack)

e.

Void pop (mengambil isi stack)

f.

Void print (mencetak stack)

g.

Void clear (menghapus semua stack)

h.

Void inisialisasi() (karena dalam array di mulai pada indeks ke 0)

4. Masuk kepilihan menu Stack

1. Masukkan Data :

Jika pilih menu 1 maka akan memanggil fungsi push :

void push() /* mengisi stack */

{

if (isfull() == true) {

cout << "\nMaaf Stack Penuh"; }

else {

stack_var.top++; do

{

data_sama=0;

cout<<"\n ID : ";

cin>>stack_var.id[stack_var.top];

for (int i=0;i<stack_var.top;i++) {

if (stack_var.id[stack_var.top]==stack_var.id[i]) /* jika ID dalam kondisi sama maka menampilkan sebuah statement */

{

data_sama=1;

cout<<"\nID sudah di gunakan...!!\n\n"; cout<<"Tampilkan Data...?? (y/t)? "; cin>>tampil;

if (tampil=='y'||tampil=='Y') {

cout<<"ID : "<<stack_var.id[i]<<"\nNama : "<<stack_var.nama[i]<<endl; /* menampilan ID yang sama */

}break; }

}

(16)

cout<<"\n Nama : ";

cin>>stack_var.nama[stack_var.top]; }

}

2. Keluarkan Data :

Jika pilih menu 2, maka akan memanggil fungsi pop :

void pop () { /* mengambil isi stack */

if (isempty()==true) {

cout<<"Maaf, Stack Masih Kosong...!!\n"; } else {

cout<<"Data yang terambil : \nID : "<<stack_var.id[stack_var.top]<<"\nNama : "<<stack_var.nama[stack_var.top]<<endl; cout<<"Telah di Ambil...!!\n\n"; stack_var.top--;

} }

3. Kosongkan Data :

Jika pilih menu 3, maka akan memanggil fungsi clear :

void clear (){ /* menghapus isi stack */

stack_var.top = -1;

cout<<"Data Telah Kosong...!!\n\n"; }

4. Tampilkan Data :

Jika pilih menu 4, maka akan memanggil fungsi print :

void print() /* mencetak stack */

{

cout<<"\nData :";

cout<<"\n| ID | Nama |"; for (int i=stack_var.top; i>=0; i--) {

cout<<"\n| "<<stack_var.id[i]<<" | "<<stack_var.nama[i]<<" "<<"|"<<endl;

cout<<"+---+"; }

}

5. Keluar

5. Selesai

Deklarasi :

(17)

dimasukkan oleh user dengan terurut secara DESCENDING. Jika pilih menu 5 maka akan

keluar dari program.

KESIMPULAN

1.

Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data yang

lain.

2.

Ada 2 operasi paling dasar yang penting dari stack yang dapat dilakukan, yaitu :

a). Operasi push yaitu operasi menambahkan elemen data pada urutan terakhir (paling

atas).

b). Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dari

stack.

3. Operasi-operasi Dasar pada stack adalah sebagai berikut:

1.

Operasi data abstrak STACK

2.

Fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong

(18)

4.

Fungsi untuk menghapus seluruh stack

5.

Fungsi untuk mencetak isi stack

DAFTAR RUJUKAN

Referensi

Dokumen terkait

Bila kita tanyakan satu persatu kepada para penerima beasiswa studi ke luar negeri, kita akan mendapatkan satu hal yang sama diantara mereka, yaitu mereka sudah membangun

Daya listrik yang disediakan oleh PLTS sebesar 5000 W untuk pemakaian selama 10 jam, menggunakan panel surya sebanyak 40 panel, daya puncak setiap panel surya 250 WP,

Dengan demikian, Anwar Zahid yang secara pribadi adalah seorang kyai, pemegang otoritas agama di masyarakat, dengan media baru yang ia gunakan dalam menyebarkan dakwahnya

Sebagaimana disebutkan dalam butir 13 Pasal 1 Undang-Undang Nomor 10 Tahun 1998 memberikan batasan pengertian prinsip syariah sebagai aturan perjanjian berdasarkan

1. Kesan:- Memberikan Tambahan ilmu yang lebih banyak serta mampu menyupai wawasan untuk mata kuliah teori Mineralogi dan

Berdasarkan pengamatan peneliti, pemerintah kelurahan tidak terlalu memperhatikan keadaan ini, walaupun telah ada program kegiatan bersih-bersih lingkungan,

bangunan gedung Fakultas Kehutanan Universitas Tanjungpura Pontianak saat ini adalah sebesar 55,35 %, dimana dengan nilai tersebut bangunan gedung Fakultas

Duvall dan Miller (1985), menambahkan bahwa salah satu faktor yang mendasari pemilihan pasangan adalah faktor homogamy , yakni kesesuaian dengan pasangan baik secara