Makalah Stack Beserta Contoh Programnya menggunakan Dev C++


makalah stack beserta programnya


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.


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.

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



contoh program stack dengan Dev C++



#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