LAPORAN PRAKTIKUM IV
STACK
Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data Dibimbing oleh Ibu Triyanna Widiyaningtyas
Oleh:
Nama : Musfiratus Solehah
Nim : 150533602144
S1 PTI OFF-C 2015
UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
STACK
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 Nama Program : Program Single Stack.
Compiler : MinGW Developer Studio
Script program : #include <iostream> #include <stdio.h> #include <conio.h> #include <windows.h> #define maxstack 4
using namespace std;
struct STACK //membuat jenis data abstrak 'STRACK' {
int top; float data [4]; };
float dta;
struct STACK stackbaru;
void inisialisasi() {
stackbaru.top = -1; }
bool isfull() //mengecek apakah stack kondisi penuh? {
if(stackbaru.top == maxstack-1) return true; else return false;
}
bool isempty() //mengecek apakah stack kondisi kosong? {
if(stackbaru.top == -1) return true; else return false;
}
void push(float dta) //mengisi stack(menyimpan data di stack) {
puts("Maaf, stack penuh");
stackbaru.data[stackbaru.top] = dta; }
}
void pop() //mengambil isi stack {
if(isempty() == true) {
cout<<"Data telah kosong!"; }
else {
cout<<"Data yang terambil adalah data ke : "<<stackbaru.data[stackbaru.top]<<endl;
stackbaru.top--; }
}
void print() //mencetak stack {
cout<<"Data pada stack : "; for(int i=0; i<=stackbaru.top; i++) {
cout<<stackbaru.data[i]<<" "; }
}
void clear() //mengosongkan stack {
stackbaru.top = -1; }
int main() {
inisialisasi(); char menu; char uulang; do
{
system("cls");
puts("1. Push stack"); puts("2. Pop stack"); puts("3. Cetak");
puts("4. Bersihkan stack"); puts("5. Exit");
cout<<"Menu pilihan Anda: "; cin>>menu;
if(menu == '2') {
pop(); getch(); uulang = 'y'; }
else if(menu == '1') {
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); }
}
Output Program :
Algoritma : 1. Start.
2. Membaca fungsi header. 3. Membaca fungsi stack.
4. Membaca fungsi-fungsi dan tipe data. 5. Menginputkan pilihan user 1-5.
6. Apabila memilih 1 ditampilkan push stack. 7. Apabila memilih 2 ditampillkan pop stack. 8. Apabila memilih 3 ditampillkan cetak.
Penjelasan Program :
Program diatas dibuat menggunakan single stuck. Didalam program tersebut terdapat beberapa menu dasar seperti : push, pop, cetak, membersihkan stack, dan exit. Program tersebut juga menggunakan boolen yang nilai dari prosesnya harus true karena apabila false maka program akan terjadi error. Apabila kita memilih 1 push stack, maka user akan diminta untuk menginputkan data stack yang akan disimpan. Ketika user memilih 2, maka program akan menampilkan inputan dari user pada bagian push stack tadi. Apabila user memilih 3, maka program akan mencetak/menampilkan data yang telah diinputkan, sedangkan apabila user memilih 4, maka data stuck sebelumnya akan terhapus seluruhnya. Kemudian pilihan 5 untuk menghentikan program.
Latihan Praktikum II Nama Program : Program Double Stack.
Compiler : MinGW Developer Studio
Script program : #include <stdio.h> #include <conio.h> #include <stdlib.h> #define MAX 10 #define true 1 #define false 0 char stack[MAX]; int top1,top2;
void init(void);
void push(char data, int nomorstack); char pop(int nomorstack);
void clear(int nomorstack); bool full(void);
bool empty(int nomorstack); void baca();
main() {
char data;
int pilih,nomorstack; init();
do {
system("cls");
printf("Contoh program double stack"); printf("\n1. Push");
printf("\n3. Clear"); printf("\n4. Cetak Data"); printf("\n5. Selesai"); printf("\n\n Pilihan anda :"); scanf("%i",&pilih);
switch(pilih) {
case 1:
printf("\n\tPush");
printf("\nMasukkan datanya : "); scanf("%s",&data);
printf("\nMau 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 %c",data); getch();
break; case 3:
printf("Clear\n");
printf("Nomor Stack yang dikosongkan : "); scanf("%i",&nomorstack);
clear(nomorstack); break;
case 4:
printf("Cetak Data :\n\n"); baca();
printf("Pilihan yang anda masukkan tidak ada"); break;
}
} while(pilih!=5); getch();
}
//init void init(){
//PUSH
void push(char data, int nomorstack) {
printf("\nNomor Stack Salah"); break;
} }
else
printf("\nStack Penuh"); getch();
}
//POP
char pop(int nomorstack){ char data;
if(empty(nomorstack)!=true)
return data; break; case 2:
data=stack[top2]; top2++;
return data; break; default:
printf("Nomor stack salah"); break;
} }
else
}
//cek full bool full(void) {
if((top1==0) && (top2==MAX+1)) return true;
else
return false; }
//cek empty
bool 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"); break;
} }
//clearing
void clear(int nomorstack) {
switch(nomorstack) {
case 1:
top1=0; //salah awalnya top1=1 break;
case 2:
top2=MAX; break; default:
printf("Nomor stack salah"); break;
void baca() {
int i;
printf("Cetak isi stack pertama : \n"); for(i=0;i<=top1;i++) //awalnya salah i=1 {
printf(" %c \n",stack[i]); printf("\n");
}
printf("Cetak isi stack ke dua : \n"); for(i=MAX;i>=top2;i--)
{
printf(" %c \n",stack[i]); printf("\n");
} getch(); }
Output Program :
Algoritma : 1. Start.
2. Membaca tipe data. 3. Membaca fungsi-fungsi. 4. Tampilan menu.
5. Case 1 : proses menampilkan push. 6. Case 2 : proses menampilkan pop. 7. Case 3 : proses clear stack.
8. Case 4 : proses mencetak data. 9. Case 5 : proses keluar dari program.
10.Jika memilih selain itu maka akan ditampilkan “ pilihan yang anda masukkan tidak ada”.
11.Finish.
Penjelasan Program :
Latihan Praktikum III
Permasalahan : lengkapi sintaks program berikut ini agar bisa berjalan menjadi program pembalik kata dengan stack.
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program : #include <stdio.h> #include <conio.h> #include <iostream> #include <string.h> #include <stdlib.h> #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 ()
{
char pilih; char kal[75]; int k,p;
printf("-*- PROGRAM MEMBALIK 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");
p=strlen(kal); for(k=0;k<p; k++)
push(kal[k]);
printf("\n Kata yang masuk :"); for(k=0;k<top; k++)
printf("%c \n",stack[k]); getch ();
case '2' : if(empty()!=true) {
printf("\n Kata setelah dibalik:"); for(k=top-1;k>=0; k--)
printf("%c",stack[k]); }
else printf("\n Stack kosong!!\n"); getch ();
break; case '3' : break;
default : printf("Pilihan anda salah !!"); }
printf("\n"); }
while (pilih!='3'); }
void init(void) {
top=0; }
void push(char info) {
if (full()!=true) {
top++;
stack[top]=info; }
else
printf("\n Stack oberlow...\n"); }
char pop(void) {
char info;
if(empty()!=true) {
info=stack[top]; top--;
return info; }
else
printf("\n Stack underlow...\n"); }
{
if(top==MAX) return true; else
return false; }
int empty(void) {
if(top==0)
return true; else
return false; }
Output Program :
Algoritma : 1. Start.
2. Membaca tipe data. 3. Membaca fungsi-fungsi. 4. Tampilan menu utama. 5. Case 1 memasukkan kata.
6. Case 2 menampilkan hasil dari membalik kata. 7. Case 3 menghentikan program (selesai).
8. Jika memilih selain 1,2,3 maka akan ditampilkan “pilihan anda salah” 9. Finish.
Penjelasan Program :
Program diatas dibuat untuk membalik kata menggunakan stack. Pertama akan ditampilkan menu utama. Apabila user memilih menu 1 maka user diminta untuk menginputkan kata yang ingin dibalik. Ketika user memilih menu 2 maka program akan menampilkan hasil membalik kata dari kata yang telah user input sebelumnya. Apabila user memilih menu 3makan program akan berhenti.
Tugas Rumah Permasalah :
Bahasa Pemrogramam : C++
Compiler : MinGW Developer Studio
Script program : #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <iostream.h> #define MAX 10 #define true 1 #define false 0 struct dtm{
char nim[13]; char nama[40]; int nilai; }mhs[MAX];
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); bool empty(int popp); void pop();
void baca();
int main(){ int pilih;
struct dtm mhsin; bool flag=0;
init(); do{
system("cls");
printf("\n\n Pilihan Operasi : "); printf("\n\n\t 1. Push");
printf("\n\n\t 2. Pop"); printf("\n\n\t 3. MultiPush"); printf("\n\n\t 4. MultiPop"); printf("\n\n\t 5. Clear");
printf("\n\n\t 6. Pengurutan Data"); printf("\n\n\t 7. Cetak Data"); printf("\n\n\t 8. Selesai"); printf("\n\n Pilihan anda : "); scanf("%i",&pilih);
switch(pilih){ case 1:
printf("\n\t\tPush");
if(full(1)){
printf("\n\n Penyimpanan Tidak Mencukupi !!!"); break;
}
fflush(stdin);
printf("\n\n Data Mahasiswa yang Ditambahkan : ");
do{
printf("\n\n Nim : "); gets(mhsin.nim);
if(check_nim(mhsin.nim)){
flag=1; }
} while(flag);
printf("\n\n Nama : "); gets(mhsin.nama); printf("\n\n Nilai : "); scanf("%d",&mhsin.nilai);
push(mhsin);
printf("\n\n\t Data berhasil ditambahkan\n"); system("pause");
break; case 2:
printf("\n\t\tPop");
if(empty(1)){
printf("\n\n Penyimpanan Tidak Mencukupi !!!"); system("pause");
break; }
printf("\n\n Data Mahasiswa yang Dihapus : "); pop();
system("pause"); break;
case 3:
printf("\n\t\tMultiPush"); int puss;
printf("\n\n Banyak Data yang ditambahkan : "); scanf("%d",&puss);
if(full(puss)){
printf("\n\n Penyimpanan Tidak Mencukupi !!!"); break;
}
for(int a=0;a<puss;a++){ fflush(stdin);
printf("\n\n Data Mahasiswa ke - %d yang Ditambahkan : ",a+1);
do{
printf("\n\n Nim : "); gets(mhsin.nim);
if(check_nim(mhsin.nim)){
printf("\n\n\t NIM sudah terdaftar\n\n"); flag=1;
} while(flag);
printf("\n\n Nama : "); gets(mhsin.nama); printf("\n\n Nilai : "); scanf("%d",&mhsin.nilai);
push(mhsin);
printf("\n\n\t Data berhasil ditambahkan\n"); system("pause");
} break; case 4:
int popp;
printf("\n\t\tMultiPop");
printf("\n\n Banyak Data yang dihapus : "); scanf("%d",&popp);
if(empty(popp)){
printf("\n\n Penyimpanan Tidak Mencukupi !!!"); break;
}
for(int a=0;a<popp;a++){
printf("\n\n Data Mahasiswa ke - %d yang Dihapus : ",a+1);
int urut;
printf("\n\t\tPengurutan data");
printf("\n\n 1. Urut Berdasarkan NIM"); printf("\n\n 2. Urut Berdasarkan Nama"); printf("\n\n 3. Urut Berdasarkan Nilai"); printf("\n\n Pilihan anda : ");
}
printf("\n\n Data Berhasil Diurutkan\n\n "); system("pause");
printf("\n\n\t\t finish\n\n\n"); system("pause");
break; default:
printf("\n\n\n Pilihan 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<top;i++){ mhs[i] = mhs[small]; mhs[small] = temp; }
}
void SortByNama(){ int i,j,small; struct dtm temp; for(i=0;i<top;i++){
small=i;
for(j=i+1;j<top;j++)
temp = mhs[i]; mhs[i] = mhs[small]; mhs[small] = temp; }
}
void SortByNilai(){ int i,j,small; struct dtm temp; for(i=0;i<top;i++){ mhs[i] = mhs[small]; mhs[small] = temp; }
}
bool full(int pus){
if(top>=MAX-pus+1) return 1; else
return 0; }
bool empty(int popp){ if(top<popp)
return 1; else
return 0; }
bool check_nim(char nim[13]){ if(top==0)
return 0; for(int a=0;a<top;a++)
if(strcmp(mhs[a].nim,nim)==0){ return 1;
} return 0; }
void clear(){ top=0;
printf("\n\t\tClear");
printf("\n\n\t Data berhasil dibersihkan\n"); system("pause");
}
void pop(){ top--;
printf("\n\n Nilai : %d\n\n",mhs[top].nilai); }
void baca(){
printf("\n\t\tData Mahasiswa"); for(int a=0;a<top; a++){
printf("\n\n NIM : %s",mhs[a].nim); printf("\n\n Nama : %s",mhs[a].nama); printf("\n\n Nilai : %d\n\n",mhs[a].nilai); }
}
Algoritma : 1. Start.
2. Membaca struct.
3. Membaca fungsi-fungsi. 4. Deklarasi variable. 5. Tampilan menu utama.
6. Case 1 proses menampilkan push. 7. Case 2 proses menampilkan pop. 8. Case 3 proses menampilkan multipush. 9. Case 4 proses mnampilkan multipop. 10. Case 5 proses membersihkan stack. 11. Case 6 proses pengurutan data. 12. Case 7 proses mencetak data. 13. Case 8 keluar dari program. 14. Finish.
Penjelasan Program :
KESIMPULAN
1. Stack merupakan sebuah kumpula data yang diletakkan di atas data lainnya, seperti sebuah tumpukan.
2. Stack merupakan salah satu struktur data yang menerapkan prinsip LIFO (Last In First Out).
3. Operasi dasar pada stack terdiri atas : Create, IsEmpty, IsFull, Push, Pop, Clear, dan Retrieve.
4. Create merupakan operator yang berfungsi untuk membuat sebuah stack kosong.
5. IsEmpty merupakan operator yang berfungsi untuk menentukan apakah suatu stack merupkan stack kosong.
6. IsFull merupakan operator yang digunakan untuk mmeriksa apakah stack yang ada sudah penuh.
7. Push merupakan operator yang berfungsi untuk menambahkan satu elemen ke dalam stack dan tidak dapat dilakukan jika stack dalam keaadaan penuh.
8. Pop merupakan operator yang befungsi untuk mengeluarkan satu lemen teratas dari dalam stack dengan syarat stack tidak dalam kondisi kosong.
9. Clear, fungsi yang digunakan untuk mengosongkan stack dengan cara mengeset Top. 10. Retrieve, fungsi yang digunakan untuk melihat nilai yang berada pada posisi tumpukan
teratas.
11. Selain menggunakan indeks, untuk menunjukkan sebuah Top atau posisi teratas dari stack, dapat juga digunakan pointer.
12. Double Stack atau Stack Ganda adalah dua stack yang berada dalam satu array.
13. Operasi dasar pada Double Stack adalah sebagai berikut : Inisialisasi, IsEmpty, IsFull, Push (Stack 1 dan Stack 2), Pop (Stack 1 dan Stack 2).
DAFTAR RUJUKAN
1. Tim Asisten Dosen. 2016. Modul 1 array, pointer, dan struct. Algoritma dan struktur komputer. Malang: Universitas Negeri Malang.
2. Tim Asisten Dosen. 2016. Modul 2 sorting. Algoritma dan struktur komputer. Malang: Universitas Negeri Malang.
3. Tim Asisten Dosen. 2016. Modul 3 searching. Algoritma dan struktur komputer. Malang: Universitas Negeri Malang.