Stack
Stack
TUJUAN BELAJAR: Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mampu: 1. Memahami konsep stack dan mengerti kegunaannya 2. Mengimplementasikan struktur stack dalam pemrograman 3. Mengidentifikasi permasalahan-permasalahan pemrograman yang menggunakan stack dan menyelesaikannya.
PENDAHULUAN STACK
harus
diselesaikan
dengan
TUGAS PENDAHULUAN: 1. Buatlah algoritma/flowchart untuk melakukan konversi dari bilangan desimal ke bilangan biner, octal, heksa dengan menggunakan stack 2. Buatlah algoritma/flowchart untuk melakukan pembalikan terhadap kalimat dengan menggunakan stack Contoh: Kalimat : Struktur Data Hasil setelah dibalik : ataD rutkurtS 3. Dari soal no 2, buatlah algoritma/flowchart untuk menentukan 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 JAWABAN TUGAS PENDAHULUAN 1. Konversi Bilangan Desimal ke Bilangan Biner Algoritmanya adalah : Ambil sisa pembagian variable bilangan dengan angka 2, kemudian simpan dalam variable sisa. Kemudian simpan isi variable sisa ke dalam stack. Bagi variable bilangan dengan angka 2. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai 0 maka lanjutkan ke langkah 4, Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi (tidak kosong). ambil (pop) nilai yang ada di stack simpan di variable data. Tulis isi variable data ke layar . Selesai. Konversi Bilangan Desimal ke Bilangan Oktal Algoritmanya adalah : Ambil sisa pembagian variable bilangan dengan angka 8, kemudian simpan dalam variable sisa. Kemudian simpan isi variable sisa ke dalam stack. Bagi variable bilangan dengan angka 8. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai 0 maka lanjutkan ke langkah 4, Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi (tidak kosong). ambil (pop) nilai yang ada di stack simpan di variable data. Tulis isi variable data ke layar . Selesai. 1
Konversi Bilangan Desimal ke Bilangan Hexa Algoritmanya adalah : Ambil sisa pembagian variable bilangan dengan angka 16, kemudian simpan dalam variable sisa. Kemudian simpan isi variable sisa ke dalam stack. Bagi variable bilangan dengan angka 16. Ulangi langkah 1 dan 2 selama bilangan tidak 0. Jika variable bilangan telah bernilai 0 maka lanjutkan ke langkah 4, Jika sisa = 10,tambahi output A, sisa = 11, tambahi output B, sisa = 12, tambahi output C, sisa = 13, tambahi output D, sisa = 14, tambahi output E, sisa = 15, tambahi output F. Lakukan perulangan untuk langkah 5 dan 6 selama stack masih mempunyai isi (tidak kosong). ambil (pop) nilai yang ada di stack simpan di variable data. Tulis isi variable data ke layar . Selesai.
total=0, j=1
While (bil)
While (bil)
for(i=0;i<=bil;i++)
mod=bil%16
Copy 0
For(i=0;i<=bil;i++) Oktaf Pop bil While (bil) Biner mod=bil%8; bil/=8; total+=(mod*j); j*=10;
Mod=10
Copy A
Mod=11
Copy B
Oktaf
Mod=12
Copy C
Mod=14
Copy E
Mod=15
Copy F
Copy bil
bil/=16
Balik bil
Cetak Hexa
2. Buatlah algoritma/flowchart untuk melakukan pembalikan terhadap kalimat dengan menggunakan stack Contoh: Kalimat : Struktur Data Hasil setelah dibalik : ataD rutkurtS
For(i=0;i<=char;i++)
Push Char
For(i=char;i>=0;i++)
Pop Char
Cetak Char
Stop
3.
Dari soal no 2, buatlah algoritma/flowchart untuk menentukan 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 palindrome
Start 1
For(i=char;i>=0;i++)
Pop Char
Push Char
String 1= String2
Cetak Palindrom
Stop
SOAL SOAL TUGAS PEMROGRAMAN: 1. Untuk latihan program no 1 dan 2 buatlah bagan proses dari stack, untuk setiap operasi push dan pop pada representasi array dan linked list. Jangan lupa memasukkan juga perubahan nilai indeks array dan perubahan nilai pointernya 1. BAGAN PROGRAM 1 4
strnilai
push(atoi(strnilai)); Jika t.atas = 10, maka tumpukan sudah penuh
atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
push(atoi(strnilai)); Jika t.atas belum 10. t.atas=top+1; t.isi[t.atas]=x top=t.atas;
t.atas = 10
top=1 x
t.atas = 3
top=6 top=5 top=4 x x atas isi atas isi atas isi atas isi
t.atas = 4
x atas isi atas isi atas isi atas isi atas isi
t.atas = 5
atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 6
x atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 6
atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 7
top=10 top=9 top=8 x x atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 8
x atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 9
atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas = 10
top=0
atas isi
t.atas
atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
t.atas=top-1; top=t.atas;
atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
atas isi atas isi atas isi atas isi atas isi atas isi atas isi atas isi
top=7 x
atas isi atas isi atas isi atas isi atas isi atas isi atas isi
top=6 x
top=5 atas isi atas isi atas isi atas isi atas isi atas isi x
atas isi atas isi atas isi atas isi atas isi
top=4 x
top=3 atas isi atas isi atas isi atas isi top=0 x
top=1 x
atas isi
PROGRAM 2
isi
next
isi
next
bantu
baru
nilai
j==1
isi
next
atas
nilai
isi
next
isi
next
nilai
isi
next
isi
next
baru
atas
atas = baru
nilai
isi
next
isi
next
isi
next
isi
next
isi
next
bantu atas
nilai
isi
next
isi
next
isi
next
isi
next
isi
next
bantu
atas
atas=atas->next
nilai
isi
next
isi
next
isi
next
isi
next
isi
next
bantu
atas
atas=atas->next
2. Buatlah program konversi system bilangan dengan stack, dapat menggunakan array atau linked list - Decimal ke biner - Decimal ke octal - Decimal ke hexa Source Code : #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 10 int top; struct tumpukan {
t.atas=0; top=0;
void push(int x) {
if (t.atas==MAX) printf("Stack is full\n"); else { t.atas=top+1; t.isi[t.atas][0]=x; top=t.atas; printf(" push %d : %d \n", t.atas, t.isi[t.atas][0]); //konversi bin(t.isi[t.atas][0]); oct(t.isi[t.atas][0]); hexa(t.isi[t.atas][0]); }
} void pop() {
if(top==0) printf("Stack is already/have been empty\n"); else { printf (" %d %d %d t.isi[top][0], t.isi[t.atas][1],t.isi[t.atas][2],t.isi2[t.atas]); t.atas=top-1; top=t.atas; } } bin (int x) {
%d
%s\n", top,
} oct (int x) {
} hexa (int x) {
j*=10; } t.isi[t.atas][2]=total;
int mod; char hex[5],kata[5]; t.isi2[t.atas][0]=NULL; while(x) { mod=x%16; if(mod==0) strcpy(hex,"0"); else if(mod==10) strcpy(hex,"A"); else if(mod==11) strcpy(hex,"B"); else if(mod==12) strcpy(hex,"C"); else if(mod==13) strcpy(hex,"D"); else if(mod==14) strcpy(hex,"E"); else if(mod==15) strcpy(hex,"F"); else { itoa(mod,kata,10); strcpy(hex,kata); } strcat(t.isi2[t.atas],hex); x/=16; } strrev(t.isi2[t.atas]);
main() {
int i, jml; char strnilai[5], strjum[5]; inisialisasi(t); printf("Conversion Dec-Bin-Oct-Hexa\n\n"); printf("Insert a number of data ="); gets (strjum); jml=atoi(strjum); //push 10
for(i=1;i<=jml;i++) { printf(" Number %d : ",i); gets(strnilai); push(atoi(strnilai)); } printf("\n Data already pushed:\n"); printf(" Push Number\n"); for(i=1;i<=top;i++) printf(" %d %d\n",i,t.isi[i][0]); //pop printf("\n Data already pop + conversion result:\n"); printf(" Pop Number(dec) Bin Oct for(i=1;i<=jml;i++) pop();
Hex\n");
Preview :
11