Tugas Algoritma & Structure Data
Assalamu'alaikum Warahmatullahi Wabarakatuh
Hay sobat vandedjoel. pada postingan kali ini saya akan membagikan sebuah makalah tentang Stack dan juga programnya. saya menggunakan header iomanip didalam programnya. ok langsung saja kita ke Makalahnya.
KATA PENGANTAR
Segala Puji bagi Allah Subhanahu wa
Ta’ala, Tuhan semesta alam. Shalawat dan salam
semoga tetap terlantun bagi
kekasih-Nya, Muhammad Shalallahu ‘alaihi wa sallam, beserta
keluarganya yang mulia, sahabatnya
yang tercinta, dan pengikutnya yang setia hingga akhir
zaman. Berawal dari rasa
keingintahuan yang mendalam akan suatu ilmu, dan rasa tanggung
jawab serta kesadaran akan tugas
pembuatan makalah yang diberikan Ibu dosen mata kuliah
Struktur Data, kami selaku penyusun
berusaha mengerjakan dan menyelesaikannya dengan
semaksimal mungkin. Walaupun sangat
jauh dari kesempurnaan dan bahkan mungkin tidak
sesuai dengan yang diharapkan, namun
penyusun harap Ibu dosen dapat menerimanya Makalah yang penyusun buat berjudul
“STACK ( TUMPUKAN )”. Makalah ini terbagi kedalam tiga bagian atau bab. Bab
pertama pendahuluan yang membahas sepintas
tentang latar belakang, tujuan dan ruang
lingkup. Bab kedua Isi makalah, membahas tentang
STACK (TUMPUKAN). Bab ketiga
penutup, berisi kesimpulan, saran, dan daftar pustaka. Saran dari pembaca terutama
Ibu dosen sangat penyusun harapkan demi perbaikan selanjutnya.
Akhirnya hanya kepada Allah SWT.
penyusun bersyukur atas terselesaikannya makalah ini serta menyerahkan diri
kepada-Nya, atas segala kekurangan dan kekhilafan atas apa yang penyusun tulis
dalam makalah ini. Semoga makalah ini bermanfaat untuk pembinaan akhlak umat,
demi kebaikan hidup dunia akhirat. Semoga Allah SWT mencatatnya sebagai amal
baik terhadap apa yang telah kita lakukan. Amiin
BAB 1PENDAHULUAN
Latar Belakang
Sebagaimana yang telah dijelaskan
sepintas dalam kata pengantar bahwa penyusun makalah berusaha menyajikan
tulisannya kedalam tiga bab. Bab pertama pendahuluan berisi tentang latar belakang,
tujuan, dan ruang lingkup. Bab kedua pembahasan materi, Stack (Tumpukan) secara
umum. Bab ketiga penutup berisi kesimpulan,saran, dan daftar pustaka.
Tujuan
Tujuan utama pembuatan makalah ini adalah
sebagai wujud rasa tanggung jawab penyusun selaku mahasiswa atas kewajibannya,
dalam hal ini penyusun berusaha menyelesaikan tugas yang diberikan dosen mata
kuliah Struktur Data untuk membuat makalah yang membahas tentang Stack secara umum
serta pengaplikasiannya . Selain itu penyusun pun berusaha mendalami suatu
bidang ilmu yang masih asing dan belum penyusun pahami mudah – mudahan dengan
ini penyusun menjadi lebih memahami tentang pembahasan materi ini. Pemicu demi perbaikan
diri dari hari keharipun menjadi tujuan dari pembuatan makalah ini. Terakhir
mudah - mudahan usaha penyusun dicatat sebagai amal baik yang di-ridhai Allah Subhanahu
wa Ta’ala dan dapat berguna. Amiin.
BAB IIPEMBAHASAN MATERI
DEFINISI STACK (TUMPUKAN)
Pengertian stack pada struktur
data adalah sebagai
tumpukan dari benda, sekumpulan data yang seolah-olah diletakkan di atas data
yang lain, koleksi dari objek-objek homogen,
atau Suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada
posisi akhir (top) saja.
Stack
merupakan bentuk khusus dari suatu struktur data, dimana node yang
ditambahkan ke dalam list dan diambil dari list hanya pada kepalanya, atau
dengan prinsip pengolahannya adalah last-in first-out (LIFO). Pada struktur ini
hanya ada dua fungsi utama, yaitu push (memasukkan node ke dalam stack),
dan pop (mengambil node dari stack).
PENGERTIAN TUMPUKAN
Secara sederhana tumpukan bisa diartikan sebagai kumpulan data yang seolaholah
diletakkan di atas data yang lain. Dalam suatu tumpukan akan dapat
dilakukan operasi penambahan (penyisipan) dan pengambilan (penghapusan)
data melalui ujung yang sama, ujung ini merupakan ujung atas tumpukan.
Contoh Kasus :
Terdapat dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas
kotak yang lainnya. Jika kemudian tumpukan 2 kotak tadi, ditambah kotak
ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah
tumpukan kotak yang terdiri dari N kotak.
F ATAS
E
D
C
B
A BAWAH
Dapat dilihat bahwa kotak B terletak diatas kotak A dan ada dibawah kotak C.
Berdasarkan pada tumpukan tersebut dapat disimpulkan bahwa penambahan
dan pengambilan sebuah kotak hanya dapat dilakukan dengan melewati satu
ujung saja, yaitu bagian atas.
Kotak F adalah kotak paling atas sehingga jika ada kotak lain yang akan
disisipkan maka kotak tersebut akan diletakkan pada posisi paling atas (diatas
kotak F). Demikian juga pada saat pengambilan kotak, kotak F akan diambil
pertama kali.
ditambahkan ke dalam list dan diambil dari list hanya pada kepalanya, atau
dengan prinsip pengolahannya adalah last-in first-out (LIFO). Pada struktur ini
hanya ada dua fungsi utama, yaitu push (memasukkan node ke dalam stack),
dan pop (mengambil node dari stack).
PENGERTIAN TUMPUKAN
Secara sederhana tumpukan bisa diartikan sebagai kumpulan data yang seolaholah
diletakkan di atas data yang lain. Dalam suatu tumpukan akan dapat
dilakukan operasi penambahan (penyisipan) dan pengambilan (penghapusan)
data melalui ujung yang sama, ujung ini merupakan ujung atas tumpukan.
Contoh Kasus :
Terdapat dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas
kotak yang lainnya. Jika kemudian tumpukan 2 kotak tadi, ditambah kotak
ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah
tumpukan kotak yang terdiri dari N kotak.
F ATAS
E
D
C
B
A BAWAH
Dapat dilihat bahwa kotak B terletak diatas kotak A dan ada dibawah kotak C.
Berdasarkan pada tumpukan tersebut dapat disimpulkan bahwa penambahan
dan pengambilan sebuah kotak hanya dapat dilakukan dengan melewati satu
ujung saja, yaitu bagian atas.
Kotak F adalah kotak paling atas sehingga jika ada kotak lain yang akan
disisipkan maka kotak tersebut akan diletakkan pada posisi paling atas (diatas
kotak F). Demikian juga pada saat pengambilan kotak, kotak F akan diambil
pertama kali.
Ilustrasi Stack
Terdapat dua
buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang
lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat,
kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri
dari N kotak
Stack bersifat LIFO
(Last In First Out) artinya Benda yang terakhir masuk ke dalam stack
akan menjadi yang pertama keluar dari stack
Const MaxElemen = 255;
Type Tumpukan = record
isi
: array[1 .. MaxElemen] of Integer;
atas
: 0 .. MaxElemen
end;
Var T : Tumpukan
Dengan
deklarasi di atas kita menganggap bahwa elemen tumpukan T, yang tersimpan dalam
larik T.Isi adalah bertipe integer dan banyaknya elemen tumpukan maksimum
adalah sebesar MaxElemen, yang dalam hal ini 255 elemen.
Pada
medan Atas, nilainya menunjukkan banyaknya elemen yang ada dalam suatu
tumpukan, yang sekaligus menunjukkan posisi elemen teratas dalam tumpukan yang
dimaksud.
Jika
T.Atas = 5, berarti dalam tumpukan ada 5 elemen, yaitu T.isi[1],T.isi[2],…..,
T.isi[5]. Jika data yang diambil, maka nilai Medan T.Atas dikurangi 1 menjadi
4, yang berarti T.isi[4] adalah elemen teratas. Jika data ditambah maka nilai
T.atas ditambah dengan 1 menjadi 6, sehingga T.isi[6] adalah elemen teratas
KELEBIHAN DAN KEKURANGAN STACK
- Kelebihan :penambahan dan
penghapusan data dapat dilakukan dengan cepat, yaitu O (1),Selama memori masih
tersedia, penambahan data bias terus dilakukan. Dengan demikian tidak ada
kekhawatiran terjadinya stack overflow.
-
Kekurangan
:Setiap sel tidak hanya menyimpan value saja, melainkan juga pointer ke sel
berikutnya. Hal ini menyebabkan implementasi stack memakai linked list akan
memerlukan memori yang lebih banyak dari pada kalau di implementasikan dengan
Array.Tiap elemen pada linked list hanya bisa diakses dengan cara sekuensial,
sehingga lambat, yaitu O (n).
OPERASI PADA STACK
2 operasi dasar yang bisa dilaksanakan
pada sebuah stack, yaitu:
Operasi Push (menyisipkan data)
memasukkan data ke dalam stack
Operasi Pop (menghapus data)
menghapus
elemen yang terletak pada posisi paling atas dari sebuah stack
langkah-lngkah :
1. buat stack (stack) - create
membuat sebuah stack baru yang masih
kosong
spesifikasi:
-
tujuan :
mendefinisikan stack yang kosong
-
input :
stack
-
syarat awal
: tidak ada
-
output stack
: - (kosong)
-
syarat akhir
: stack dalam keadaan kosong
2. stack kosong (stack) - empty
fungsi untuk menentukan apakah stack
dalam keadaan kosong atau tidak
spesifikasi:
-
tujuan :
mengecek apakah stack dalam keadaan kosong
-
input :
stack
-
syarat awal
: tidak ada
-
output :
boolean
-
syarat akhir
: stack kosong bernilai true jika stack dalam keadaan kosong
3. stack penuh (stack) - full
fungsi untuk memeriksa apakah stack
yang ada sudah penuh
spesifikasi:
-
tujuan :
mengecek apakah stack dalam keadaan penuh
-
input :
stack
- syarat awal
: tidak ada
- output : boolean
-
syarat akhir
: stack penuh bernilai true jika stack dalam keadaan penuh
4. push (stack, info baru)
menambahkan sebuah elemen kedalam
stack.
spesifikasi:
- tujuan : menambahkan elemen, info baru pada stack pada
posisi paling atas
- input : stack dan Info baru
-
syarat awal
: stack tidak penuh
-
output :
stack
-
syarat akhir
: stack bertambah satu elemen
5. pop (stack, info pop)
mengambil elemen teratas dari stack
spesifikasi:
- tujuan :
mengeluarkan elemen dari stack yang berada pada posisi paling atas
- input :
stack
- syarat awal
: stack tidak kosong
- output :
stack dalam info pop
-
syarat akhir : stack berkurang satu elemen
Cara
mendefenisikan Stack dengan Array of
Struct yaitu:
1. Definisikan
Stack dengan menggunakan struct
2. Definisikan
konstanta MAX_STACK untuk menyimpan maksimum isi stack
3. Buatlah
variabel array data sebagai implementasi stack
4. Deklarasikan
operasi-operasi/function di atas dan buat implemetasinya.
contoh ://Deklarasi MAX_STACK
#define MAX_STACK 10
//Deklarasi STACK dengan struct dan array data
typedef struct STACK{ int top; char data[10][10];
}; //Deklarasi/buat variabel dari struct
STACK tumpuk;
Inisialisasi Stack
Pada mulanya
isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack
adalah kosong.
Top adalah
suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack
sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK
sehingga menyebabkan stack penuh.
Ilustrasi
Stack pada saat inisialisasi
IsFull berfungsi untuk memeriksa apakah stack sudah penuh atau
tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1
maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum
full.
Ilustrasi
Stack pada saat inisialisasi
IsFull berfungsi
untuk memeriksa apakah stack sudah penuh atau tidak. Dengan cara, memeriksa top
of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih
kecil dari MAX_STACK-1) maka belum full.
Ilustrasi
Stack pada kondisi Full
IsEmpty berfungsi
untuk memeriksa apakah stack masih kosong atau tidak. Dengan cara memeriksa top
of stack, jika masih -1 maka berarti stack masih kosong.
Push berfungsi
untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack (yang
ditunjuk oleh TOS).
Tambah satu
(increment) nilai top of stack lebih dahulu setiap kali ada penambahan
elemen stack.
Asalkan stack
masih belum penuh, isikan data baru ke stack berdasarkan indeks top of stack
setelah diincrement sebelumnya.
Pop berfungsi
untuk mengambil elemen teratas (data yang ditunjuk oleh TOS) dari stack.
Ambil dahulu
nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang
akan dipop, baru dilakukan decrement nilai top of stack sehingga jumlah elemen
stack berkurang.
Printberfungsi untuk menampilkan semua elemen-elemen stack
dengan cara looping semua nilai array secara terbalik, karena kita harus
mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang
kecil.
Operasi Push
void Push (NOD **T, char item) { NOD *n; n=NodBaru (item); n->next=*T; *T=n; }
Operasi Pop
char Pop (NOD **T) { NOD *n; char item; if (!StackKosong(*T)) { P=*T; *T=(*T)->next; item=P->data; free(P); } return item; }
Dalam
struktur data yang kita pelajari secara umum ada 3 notasi operasi yang
dilakukan untuk suatu operasi aritmatika,yaitu Prefix,Infix,dan postfix.Dan
untuk mengetahui notasi-notasi yang diatas itu,sebelumnya kita harus mengenal
dan mengetahui indikator yang ada
Di
notasi itu tersebut.
Notasi ini terbentuk dari Operand dan Operator.
Operand
adalah data atau nilai yang membantu dalam proses,sedangkan Operasi adalah fungsi
yang digunakan dalam proses.
contohnya:
A+B*C
2 + 5 * 3
Keterangan: A ,B ,C ,2 ,3 ,5 adalah Operand.
+,* adalah Operator.
Setelah kita mengenal dan mengetahui dengan Operand dan Operator, maka mari kita mengenal juga tingkat/ level yang ada didalam notasi tersebut:
-( ) (Kurung).
- ^ (Pangkat).
- * / (Perkalian / Pembagian).
- + - (Penjumlahan / Pengurangan).
Notasi ada 3 jenis, yaitu Prefix,Infix dan Postfix yang seperti kita ketahui di atas:
1.Prefix adalah notasi yang terbentuk atas operator dengan operand, dimana oprator didepan operand.
contoh: A + B * C (infix).
maka notasi prefixnya adalah: +A*BC.
Pemecahannya:
A+B*C
Diketahui ada 3 operand yaitu: A, B, C dan 2 operand yaitu: +, *.proses dimulai dengan melihat dari hirarkhi oprator.Contoh diatas operator yang tertinggi adalah * kemudian +. Tanda * diapit oleh 2 operand yaitu B*C, prefixnya dengan menggabungkan operand dan memindahkan operator ke depan dari operand,sehingga fungsi B*C, notasi prefixnya menjadi *BC.
Sehingga hasil sementara dari notasi prefix adalah:
A+*BC
Selanjutnya mencari prefix untuk operator yang berikutnya yaitu +, cara yang dilakukan sama seperti diatas, operator + diapit oleh operand, yaitu A dan *BC, gabungkan operand,sehingga menjadi A*BC,lalu pindahkan operator kedepan operand,sehingga hasil akhir menjadi :
+A*BC.
A+B*C
2 + 5 * 3
Keterangan: A ,B ,C ,2 ,3 ,5 adalah Operand.
+,* adalah Operator.
Setelah kita mengenal dan mengetahui dengan Operand dan Operator, maka mari kita mengenal juga tingkat/ level yang ada didalam notasi tersebut:
-( ) (Kurung).
- ^ (Pangkat).
- * / (Perkalian / Pembagian).
- + - (Penjumlahan / Pengurangan).
Notasi ada 3 jenis, yaitu Prefix,Infix dan Postfix yang seperti kita ketahui di atas:
1.Prefix adalah notasi yang terbentuk atas operator dengan operand, dimana oprator didepan operand.
contoh: A + B * C (infix).
maka notasi prefixnya adalah: +A*BC.
Pemecahannya:
A+B*C
Diketahui ada 3 operand yaitu: A, B, C dan 2 operand yaitu: +, *.proses dimulai dengan melihat dari hirarkhi oprator.Contoh diatas operator yang tertinggi adalah * kemudian +. Tanda * diapit oleh 2 operand yaitu B*C, prefixnya dengan menggabungkan operand dan memindahkan operator ke depan dari operand,sehingga fungsi B*C, notasi prefixnya menjadi *BC.
Sehingga hasil sementara dari notasi prefix adalah:
A+*BC
Selanjutnya mencari prefix untuk operator yang berikutnya yaitu +, cara yang dilakukan sama seperti diatas, operator + diapit oleh operand, yaitu A dan *BC, gabungkan operand,sehingga menjadi A*BC,lalu pindahkan operator kedepan operand,sehingga hasil akhir menjadi :
+A*BC.
2.Infix adalah notasi yang membentuk atas operator dengan
operand,dimana operator berada diantara operand.
Contoh :
- A + B * C
- (A + B) * C
- A - (B + C) * D ^ E
3.Postfix adalah notasi yang membentuk atas operator dengan operand, dimana operator berada dibelakang operand.
Contoh : A + B * C ( infix).
maka notasi postfix adalah ABC*+.
Pemecahannya:
A + B * C
Diketahui ada 3 operand yaitu : A,B,C dan 2 operator yaitu : +, *. proses dimulai dengan melihat dari hirarkhi operator.Contoh diatas operator yang tertinggi adalah * kemudian +.
Contoh :
- A + B * C
- (A + B) * C
- A - (B + C) * D ^ E
3.Postfix adalah notasi yang membentuk atas operator dengan operand, dimana operator berada dibelakang operand.
Contoh : A + B * C ( infix).
maka notasi postfix adalah ABC*+.
Pemecahannya:
A + B * C
Diketahui ada 3 operand yaitu : A,B,C dan 2 operator yaitu : +, *. proses dimulai dengan melihat dari hirarkhi operator.Contoh diatas operator yang tertinggi adalah * kemudian +.
Tanda * diapit oleh kedua operand yaitu B dan C yaitu B*C,
postfix dengan menggabungkan operand B dan C menjadi BC,lalu memindahkan
operator ke belakang operand C, sehingga fungsi B*C, notasi postfixnya menjadi
BC*.Sehingga hasil sementara dari notasi postfix adalah A + BC*
Selanjutnya mencari postfix untuk operator yang berikutnya, yaitu +, dengan cara yang dilakukan sama seperti di atas, operator + diapit oleh 2 operand, yaitu : A dan BC* gabungkan operand tersebut,sehingga menjadi ABC*,lalu pindahkan operator + kebelakang operand ABC*.
Sehingga hasil akhir menjadi : ABC*+.
contoh Notasi Huruf :
Contoh
Notasi Angka:
PROGRAM STACK
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
main(){
float a,b,c;
char stack1[6];
int i;
cout<<"masukkan angka pertama:";
cin>>stack1;
cout<<endl;
cout<<"Pembalikan Data :";
for(i=6;i>=0;i--)
{
cout<<stack1[i];
}
cout<<"\nMasukkan Kembali Data Diatas:";
cin>>a;
cout<<endl;
cout<<"masukkan angka pembagi: ";
cin>>stack1;
cout<<endl;
cout<<"Pembalikan Data :";
for(i=6;i>=0;i--)
{
cout<<stack1[i];
}
cout<<"\nMasukkan Kembali Data Diatas:";
cin>>b;
c=a/b;
cout<<endl;
cout<<"hasil : " <<setiosflags(ios::fixed)<<setprecision(2)<<c;
getch();
}
BAB IIIPENUTUP
Kesimpulan
Pada “STACK” Data hanya bisa di ambil
secara berurutan, tidak bias di ambil secara langsung.
Hal ini berada dengan system yang
ada pada “LINKED LIST” di mana data dapat di
ambil secara acak, bias di tengah,
di atas atau terakhir, bahkan data dapat langsung di
hapus.
Saran
Makalah yang kami sajikan ini sangat
jauh dari kesempurnaan karena banyaknya kekurangan dan kesalahan, Oleh sebab
itu untuk memperkaya pengetahuan tentang pembahasan.
STACK (TUMPUKAN) dapat pembaca gali
sendiri dalam sumber-sumber lain yang membahas tentang hal tersebut. Akhir kata
kami ucapkan terima kasih
Cukup sekian postingan saya tentang makalah Stack beserta programnya ini, semoga postigan saya ini mudah dipahami dan semoga juga apa yang saya bagikan ini bermanfaat bagi kita semua. Terima kasih. dan satu lagi please like and share artikel saya ini jika bermanfaat bagi anda dan jangan lupa untuk me-like fanpage saya di sidebar atas dan please join site saya ini ya, thank's. sampai jumpa di postingan selanjutnya.
Wassalamualaikum warahmatullahi wabarakatuh












Comments
Post a Comment
berkomentarlah dengan bijaksana.
jaga ucapan.
karena mulutmu harimaumu.