Upload
loarki-as-sunny
View
235
Download
0
Embed Size (px)
Citation preview
8/18/2019 Laporan Praktikum ASD 4 Stack
1/26
LAPORAN PRAKTIKUM IV
STACK
Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data
Dibimbing oleh Ibu Triyanna Widyaningtyas
Oleh:MUHAMMAD BAKHRUR RIZKI
150533604505
S1 PTI-C /2015
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
Maret 2016
8/18/2019 Laporan Praktikum ASD 4 Stack
2/26
A. TUJUAN
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.
Latihan Praktikum I
Pemrograman C++
Nama Program : Single Stack
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include
#include
#include
#include
#define maxstack 4 //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?
{
if(stackbaru.top == maxstack)
return true;
else
return false;
}
bool isempty() //menanyakan : kosongkah?
{
if(stackbaru.top == -1)return true;
8/18/2019 Laporan Praktikum ASD 4 Stack
3/26
else return false;
}
void push(float dta) //mengisi stack (menyimpan data di stack)
{
if(isfull() == true) //jika stack belum penuh
{
puts("Maaf, stack penuh");
getch();
}
else
{
stackbaru.top++;
stackbaru.data[stackbaru.top] = dta;
}
}
void pop() //mengambil isi stack
{
if(isempty() == true)
{
cout
8/18/2019 Laporan Praktikum ASD 4 Stack
4/26
char menu;
char uulang;
do
{
system("cls");
printf("\t-----------------------------------\n");
printf("\t| Stack |\n");
printf("\t-----------------------------------\n");
printf("Menu stack:\n\n");
puts("1. Push stack");
puts("2. Pop stack");
puts("3. Cetak");
puts("4. Bersihkan stack");
puts("5. Exit");
coutmenu;
if(menu == '2')
{
pop();
uulang = 'y';
}
else if(menu == '1')
{
coutdta; push(dta);
uulang = 'y';
}
else if(menu == '3')
{
print();
coutuulang;
}
else if(menu == '4')
{
clear();
coutuulang;
}
else if(menu == '5')
{
exit(0);
}
}
while(uulang == 'Y' || uulang == 'y');
}
8/18/2019 Laporan Praktikum ASD 4 Stack
5/26
Output Program :
Algoritma :
1. Mulai
2.
Deklarasi Stack
3. Deklarasi Fungsi dta
4. Deklarasi Fungsi inisialisasi
5. Deklarasi Fungsi isfull
6. Deklarasi Fungsi isempty
7. Deklarasi Fungsi push
8. Deklarasi Fungsi pop
9.
Deklarasi Fungsi print
10. Deklarasi Fungsi clear
8/18/2019 Laporan Praktikum ASD 4 Stack
6/26
11. Masuk menu utama
12. Masuk menu Do While
Masuk menu kondisi
13. selesai
Penjelasan Program :
Program di atas digunakan untuk membuat suatu program Single Stack dimana pada
dimana pada program tersebut terdapat operasi penambahan data (push), pengeluaran data
(pop), pencetakan isi dari stack, pembersihan isi stack dan keluar.
Pada program ini menggunakan program boolean yang diharuskan pada program tersebut
harus benar apabila salah maka pada progam strack tersebut erorr atau berjalan tetapi tidak
sesuai dengan kriteria program yang di inginkan. Pada push pop berguna untuk menyimpan
data yang ingin di masukkan. Seperti contoh kita memasukkan angka 6 maka data tersebut
menyimpan angka 6 tersebut. Pop stack yaitu berguna untuk menampilkan data yang
dimasukkan pada data yang telah dideklarasikan sebelumnya, maka pada pop stack akan
menampilkan angka 6 tersebut. Cetak berguna untuk mencetak dari hasil masukkan pada
program pertama. Bersikan stack adalah untuk menghilangkan data yang dimasukkan
sebelumnya dengan maksud menghapusnya. Dan menu terakhir yaitu exit yaitu digunakan
untuk keluar dari proram.
Latihan Praktikum II
Pemrograman C++
Nama Program : Double Stack
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include
#include
#include
#define max 10
#define true 1
#define fale 0
char stack[max];
int top1,top2;
void init(void);
void push(char data, int nomorstack);
char pop(int nomorstack);
void clear(int nomorstack);int full(void);
8/18/2019 Laporan Praktikum ASD 4 Stack
7/26
int empty(int nomorstack);
void baca();
main()
{
char data;
int pilih, nomorstack;
init();
do
{
system("cls");
printf("Contoh program double stack");
printf("\n1. push");
printf("\n2. pop");
printf("\n3. clear");
printf("\n4. cetak data"); printf("\n5. selesai");
printf("\npilihan anda : ");scanf("%i",&pilih);
switch(pilih)
{
case 1:
printf("push\n");
printf("masukkan datanya : ");scanf("%s",&data);
printf("mau dimasukkan ke stack berapa ? 1 atau 2 ? : ");
scanf("%i",&nomorstack);
push(data,nomorstack); break;
case 2:
printf("pop\n");
printf("masukkan nomor stack : ");
scanf("%i",&nomorstack);
data=pop(nomorstack);
printf("\ndata yang dikeluarkan adalah %s",&data);
break;
case 3:
printf("clear\n");
printf("nomor stack yang akan dikosongkan : ");
scanf("%i",&nomorstack);
clear(nomorstack);
break;
case 4:
printf("cetak data : \n\n");
baca();
break;
case 5:
printf("exit");
break;
default:
8/18/2019 Laporan Praktikum ASD 4 Stack
8/26
printf("pilihan yang anda masukkan tidak ada");
break;
}
}while(pilih!=5);
getch();
}
//init
void init()
{
top1=0;
top2=max+1;
}
//push
void push(char data, int nomorstack)
{
if(full()!=true){
switch(nomorstack)
{
case 1:
top1++;
stack[top1]=data;
break;
case 2:
top2--;
stack[top2]=data; break;
default:
printf("\nnomor stack salah");
break;
}
}
else
printf("\nstack penuh");
getch();
}
char pop(int nomorstack)
{
char data;
if(empty(nomorstack)!=true)
{
switch(nomorstack)
{
case 1:
data=stack[top1];
top1--;
return data;
break;
8/18/2019 Laporan Praktikum ASD 4 Stack
9/26
case 2:
data=stack[top2];
top2++;
return data;
break;
default :
printf("\nnomor stack salah");
break;
}
}
else
printf("\stack masih kosong");
getch();
return 0;
}
//cek fullint full(void)
{
if(top1+1>=top2)
{
return true;
}
else
return false;
}
//cek emptyint empty(int nomorstack)
{
switch(nomorstack)
{
case 1:
if(top1==0)return true;
else return false;
break;
case 2:
if(top2==max+1)return true;
else return false;
break;
default:
printf("nomor stack salah\n");
break;
}
}
//clearning
void clear(int nomorstack)
{
switch(nomorstack)
{
8/18/2019 Laporan Praktikum ASD 4 Stack
10/26
case 1:
top1=0;
break;
case 2:
top2=max+1;
break;
default:
printf("nomor stack salah");
break;
}
}
//baca
void baca()
{
int i;
printf("cetak isi stack pertama : \n");for(i=0;i=top2;i--)
{
printf(" %c",stack[i]);
printf("\n");}
getch();
}
Output Program :
8/18/2019 Laporan Praktikum ASD 4 Stack
11/26
Algoritma :
1. Mulai
2. Deklarasi Stack dengan jumlah data max
3.
Deklarasi variabel global
4.
Deklarasi fungsi init
5. Deklarasi fungsi push
6.
Deklarasi fungsi pop
7. Deklarasi fungsi full
8. Deklarasi fungsi empty
9.
Deklarasi fungsi baca
10. Deklarasi fungsi clear
11.
Masuk menu utama
12. Deklarasi variabel
13. Pemanggilan fungsi init
14. Masuk operasi do while
15. Masuk operasi switch case
Jika pilihan 1 maka jalankan fungsi Push
Jika pilihan 2 maka jalankan fungsi Pop
Jika pilihan 3 maka jalankan fungsi Clear
Jika pilihan 4 maka jalankan fungsi Cetak data
8/18/2019 Laporan Praktikum ASD 4 Stack
12/26
Jika pilihan 5 maka jalankan fungsi Exit
16. Selesai
Penjelasan Program :
Program di atas digunakan untuk membuat suatu program Double Stack dimana pada
dimana pada program tersebut terdapat operasi penambahan data (push), pengeluaran data
(pop), pembersihan isi stack, pencetakan isi dari stack, dan keluar.
Pada awal program kita menggunakan 3 file header yang meliputi stdio.h, conio.h dan
stdlib.h. dan program ini menjelaskan penggunaan dari data stack. Menu pertama yaitu push
pada double stack, kita memasukkan data dahulu kemudian kita disajikan pilihan baru yaitu
ditelakkan pada stack 1 atau stack 2. Kita harus memasukkan data tersebut. Pada menu yang
kedua yaitu pop itu berguna untuk menampilkan data sesudah memasukkan data masukkan
seperti contoh kita memasukkan angka 1 maka data keluaran yaitu angka 4. Pada menu ke 3
yaitu Clear fungsinya hanya membersikan dari data sebelumnya (bekas data), yang ke 4 cetak
data mencetak isi stack yang dimasukkan pertama dan kedua. Dan terakhir yaitu selesai,
fungsinya yaitu hampir sama dengan exit. Digunakan untuk mengakhiri program.
Latihan Praktikum III
Pemrograman C++
Nama Program : Sequential Search Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include
#include
#include
#include
#include
#define MAX 75#define true 1
#define false 0
char stack[MAX];
int top;
void init(void);
int full(void);
int empty(void);
char pop(void);
void clear(void);
void push(char info);main(){
8/18/2019 Laporan Praktikum ASD 4 Stack
13/26
char pilih;
char kal[75];
int k,p;
printf("\n ~*~ PROGRAM PEMBALIK KATA DENGAN STACK ~*~\n\n");
init();
do{
fflush(stdin);
system("cls");
printf(" =================\n");
printf(" || MENU PILIHAN ||\n");
printf(" =================\n");
printf(" ||[1] Masukkan kata ||\n");
printf(" ||[2] Balik kata ||\n");
printf(" ||[3] Selesai ||\n");
printf(" =================\n");
printf(" Pilihan : ");scanf("%c",&pilih);
system("cls");
switch(pilih){
case '1':
printf("\n Masukkan kata : ");
scanf("%s",&kal);
p=strlen(kal);
for(k=0;k
8/18/2019 Laporan Praktikum ASD 4 Stack
14/26
}while(pilih!=3);
}
void init(void){
top=0;
}
void push(char info){
if(full()!=true){
stack[top]=info;
top++;
}
else
printf("\n Stack Overflow . . .\n");
}
char pop(void){
char info;
if(empty()!=true){
top--;
info=stack[top];
return info;
}
else
printf("\n Stack Underflow . . .\n");
}
int full(void){
if(top==MAX)
return true;
else
return false;
}
int empty(void){
if(top==0)
return true;
else
return false;
}
Output Program :
8/18/2019 Laporan Praktikum ASD 4 Stack
15/26
Algoritma :
1. Mulai
2.
Deklarasi stack
3. Deklarasi variable global
4. Deklarasi fungsi init
5.
Deklarasi fungsi full
6. Deklarasi fungsi empty
7. Deklarasi fungsi pop
8.
Deklarasi fungsi clear
9. Deklarasi fungsi push
10.
Masuk menu utama
11. Deklarasi variable
12. Masuk operasi do while
13. Masuk operasi switch case
Jika pilihan 1 maka jalankan proses masukkan kata
Jika pilihan 2 maka jalankan proses balik kata
Jika pilihan 3 maka jalankan proses selesai
14.
selesai
8/18/2019 Laporan Praktikum ASD 4 Stack
16/26
Penjelasan Program :
Program di atas digunakan untuk membuat suatu program Pembalik Kata dengan
menggunakan Stack dimana pada program tersebut terdapat operasi memasukkan kata (push),
pembalikan kata (pop), dan seleai. Pada program ini kata yang dimasukkan kedalam stack maka
secara otomatis apabila isi stack dikeluarkan maka kata akan langsung terbalik, karena data
yang pertama dimasukkan pada stack maka akan keluar terakhir.
Tugas Rumah I
Pemrograman C++
Nama Program : Program Implementasi Stack
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program :
#include
#include
#include
#include
#define MAX 10
#define true 1
#define false 0
struct dtm{
char nim[13];
char nama[40];
int nilai;
}mhs[MAX];
int top;
void init();
void SortByNim();
void SortByNama();
void SortByNilai();
void push(struct dtm mhsin);
bool check_nim(char nim[13]);
void clear();
bool full(int pus);
8/18/2019 Laporan Praktikum ASD 4 Stack
17/26
bool empty(int popp);
void pop();
void baca();
int main(){
int pilih;
struct dtm mhsin;
bool flag=0;
init();
do{
system("cls");
printf("Pilihan Operasi : ");
printf("\n1. Push");
printf("\n2. Pop");
printf("\n3. MultiPush");
printf("\n4. MultiPop");
printf("\n5. Clear");
printf("\n6. Pengurutan Data");
printf("\n7. Cetak Data");
printf("\n8. Selesai");
printf("\n\n Pilihan anda : ");
scanf("%i",&pilih);
switch(pilih){
case 1:
printf("\nPush");
if(full(1)){ printf("\nPenyimpanan Tidak Mencukupi !!!");
break;
}
fflush(stdin);
printf("\nData Mahasiswa yang Ditambahkan : ");
do{
printf("\nNim : ");
8/18/2019 Laporan Praktikum ASD 4 Stack
18/26
gets(mhsin.nim);
if(check_nim(mhsin.nim)){
printf("\nNIM sudah terdaftar\n\n");
flag=1;
}
} while(flag);
printf("\nNama : ");
gets(mhsin.nama);
printf("\nNilai : ");
scanf("%d",&mhsin.nilai);
push(mhsin);
printf("\nData berhasil ditambahkan\n");
system("pause");
break;
case 2:
printf("\nPop");
if(empty(1)){
printf("\nPenyimpanan Tidak Mencukupi !!!");
system("pause");
break;
}
printf("\nData Mahasiswa yang Dihapus : ");
pop();system("pause");
break;
case 3:
printf("\nMultiPush");
int puss;
printf("\nBanyak Data yang ditambahkan : ");
scanf("%d",&puss);
8/18/2019 Laporan Praktikum ASD 4 Stack
19/26
if(full(puss)){
printf("\nPenyimpanan Tidak Mencukupi !!!");
break;
}
for(int a=0;a
8/18/2019 Laporan Praktikum ASD 4 Stack
20/26
break;
}
for(int a=0;a
8/18/2019 Laporan Praktikum ASD 4 Stack
21/26
case 8:
printf("\nDatang Kembali ya\n\n\n");
system("pause");
break;
default:
printf("\nPilihan yang anda masukkan tidak ada\n\n ");
system("pause");
break;
}
} while(pilih!=8);
return 0;
}
void push(struct dtm mhsin){
mhs[top]=mhsin;
top++;
}
void init(){
top=0;
}
void SortByNim(){
int i,j,small;
struct dtm temp;
for(i=0;i
8/18/2019 Laporan Praktikum ASD 4 Stack
22/26
small=i;
for(j=i+1;j
8/18/2019 Laporan Praktikum ASD 4 Stack
23/26
if(top==0)
return 0;
for(int a=0;a
8/18/2019 Laporan Praktikum ASD 4 Stack
24/26
8/18/2019 Laporan Praktikum ASD 4 Stack
25/26
Algoritma :
1. Mulai
2.
Deklarasi struck
3. Deklarasi variable global
4. Deklarasi fungi init
5.
Deklarasi fungi SortByNim
6. Deklarasi fungi SortBYNilai
7. Deklarasi fungi push
8. Deklarasi fungi check_nim
9. Deklarasi fungi clear
10. Deklarasi fungi full
11.
Deklarasi fungi empty
12. Deklarasi fungi pop
13. Deklarasi fungi baca
14.
Masuk menu utama
15. Deklarasi variable
16. Masuk operasi do while
17.
Masuk operasi switch case
18.
selesai
Penjelasan Program :
Program di atas digunakan untuk membuat suatu program pengimpelmentasian dari
Stack yang berfungsi untuk menyimpan data nilai mahasiswa. Dari beberapa program tersebut
terdiri dari 8 kategori atau menu yang pertama yaitu push,pop, multipush, multipop, clear,
pengurutan data, cetak data dan yang terakhir yaitu selesai. Dari program tersebut hanya
bertambah beberapa program saja seperti contoh terdapat Multipush ini berfungsi untuk
memasukkan dengan menambahkkan data yang lebih, dengan maksud kita bisa memasukkan
data dengan beberapa data yang kita mau, seperti contoh kita bisa memasukkan data dari
mahasiswa lebih dari 5 sekaligus, apabila kita menggunakan push maka data tersebut akan
mengaksesnya dengan bertahap, yaitu satu demi satu. Dan Multipop yaitu berfungsi untuk
menghapus dari data yang diinginkan secara langsung, fungsinya hampir sama dengan mutlti
push hanya saja multipop berguna untuk menghapus data. Yang terakhir yaitu pengurutan data
, berfungsi untuk mengurutkan data secara urut dengan mengutamakan dari kategori. Seperti
NIM, nama dan nilai.
8/18/2019 Laporan Praktikum ASD 4 Stack
26/26
KESIMPULAN
Stack merupakan sebuah kumpulan data yang diletakkan di atas data lainya, seperti
sebuah tumpukan. Dengan demikian, stack merupakan salah satu struktur data yang
menerapkan prinsip LIFO (Last In First Out). Dimana elemen yang terakhir disimpan dalam
stack, menjadi elemen yang pertama diambil. Untuk meletakkan sebuah elemen pada bagian
atas dari stack, maka dilakukan operasi push. Sedangkan untuk memindahkan sebuah elemen
dari tempat atas tersebut dalam sebuah stack, maka dilakukan operasi pop.
Terdapat operasi-operasi dasar Stack yaitu :
1. Create
2. IsEmpty
3.
Isfull
4. Push
5. Pop
6.
Clear
7. Retrieve
DAFTAR RUJUKAN
1.
Tim Asisten Dosen. 2016. Modul 1 Struct, Array, Pointer. Malang: Universitas Negeri
Malang.
2. Tim Asisten Dosen. 2016. Modul 2 Sorting (pengurutan). Malang: Universitas Negeri
Malang.
3. Tim Asisten Dosen. 2016. Modul 3 Searching. Malang: Universitas Negeri Malang.
4. Tim Asisten Dosen. 2016. Modul 4 Strack (Tumpukan). Malang: Unversitas Negeri
Malang.