MAKALAH STRUKTUR DATA STACK(TUMPUKAN)

MAKALAH
 STRUKTUR DATA
STACK (TUMPUKAN)


OLEH :
ALDY RIANTO
F 551 16 142


FAKULTAS TEKNIK
JURUSAN TEKNOLOGI INFORMASI
PROGRAM STUDI TEKNIK INFORMATIKA
UNIVERSITAS TADULAKO
TAHUN AJARAN 2016/2017


KATA PENGANTAR

            Puji syukur saya ucapkan atas Rahmat, Hidayah, dan Inayah dari Allah SWT, sehingga kami bisa melakukan aktivitas pada mestinya dan kemudahan dalam menjalani kehidupan ini. Shalawat beserta salam semoga terlimpah atas penghulu manusia baik yang dahulu maupun sekarang, yaitu Baginda Muhammad SAW. Sang revolusioner Umat Islam yang begitu gigih memperjuangkan islam sehingga menjadi agama berkedudukan tinggi di bumi Allah ini.
            Alhamdulillah, kami telah berhasil membuat makalah untuk memenuhi tugas yang diberikan oleh Dosen selaku pembimbing dalam mata perkuliahan agar mahasiswa mampu terampil dan kreatif serta mempunyai ide dan gagasan yang cemerlang sehingga proses pembelajaran lebih efektif dan efisien.
                        Akhir kata, hasil makalah ini masih sangat jauh dari kesempurnaan. Tidak ada yang sempurna karena kesempurnaan hanyalah milik Allah SWT. Demi perbaikan dan pengembangan makalah ini ke depan, kami sangat mengharapkan kritikan dan saran demi kesempurnaan makalah ini.











                                                                               






DAFTAR ISI

KATA PENGANTAR………………………………………………………………………………2
DAFTAR ISI……………………………...………………………………………………………...3
BAB I 
PENDAHULUAN ,,,………………………………………………………..……………………..4
A.        LATAR BELAKANG……………………………………..………………………………..4
B.        RUMUSAN MASALAH ...……………………...…………………………………………4
C.        MAKSUD DAN TUJUAN…………………………………………………………………4
C.        METODE PENULISAN ..………………………………………………………………….4
BAB II
LANDASAN TEORI.......................................................................................................................5
A.        PENGERTIAN STACK (TUMPUKAN)………….…. …………………………………....5
BAB III
PEMBAHASAN……………………………………………..…………………………………… 6
A.        PENGERTIAN STACK (TUMPUKAN)………….…. ……………………………………6
B.        PROSES SINGEL STACK………………………...……….………………………………7
C.        REPRESENTASI DAN PROSES DOUBLE STACK ...……........………………………..11
D.        KONDISI DOUBLE STACK.............................................................................................. 12
E.         ALTGORITMA PUSH DAN POP PADA DOUBLE STACK...…......................……….. 13
F.         DEKLARASI TUMPUKAN…….……….…………………………………….………….15
G.        OPERASI PADA STACK…….……….…………………………………...……………....15
H.        INISIALISASI STACK…….……….……………………………………....…………… ..26
BAB IV          
PENUTUP……………………………………………………………………………………........28
A.        KESIMPULAN................................................................................................................... .28
B.        SARAN............................................................................................................................... .28

DAFTAR PUSTAKA


BAB I

PENDAHULUAN


A.  LATAR BELAKANG

Struktur data adalah karakteristik yang terkait dengan sifat dan cara penyimpanan sekaligus penggunaan atau pengaksesan data. Karakteristik tersebut mengikat dan sekaligus secara timbal balik dipengaruhi oleh algoritma yang mengakses data tersebut, sehingga disebutkan Algoritma dan Struktur Data merupakan satu kesatuan. Salah satu teknik dasar tentang struktur data adalah stack yang lebih lanjut akan dibahas dalam makalah ini.

B.  RUMUSAN MASALAH

Berdasarkan latar belakang yang kami angkat, kami menemukan beberapa
permasalahan yang kiranya akan menjadi bahasan pada penulisan makalah ini,
diantaranya yaitu :
1.      Pengertian Stack (Tumpukan) ?
2.      Pendeklarasian Deklarasi Tumpukan ?
3.      Operasi Dasar pada Stack ?

C. MAKSUD DAN TUJUAN
      Penyusun dalam penyusunan makalah ini sebagi penambah informasi bagi penyusun yang di outputkan lewat tulisan tulisan yang terdapat pada makalah ini dan berharap penyusun memberikan informasi dipenyusunan makalah ini yang isinya tentang stack yang sangat jelas bagi pembaca. Dengan mengetahui tentang stack maka penyusun maupun pembaca dapat menambah pengetahuan ilmu yang menyangkut dalam dunia tekhnologi pemograman.

D. METODE PENULISAN
Metode penulisan untuk pembuatan makalah ini penulis menggunakan metode informasi yang diambil atau didapat dari metode pengetahuan penulis yang didapat dari pembelajaran penulis dalam ruang lingkup perkuliahan dan internet.


BAB II

LANDASAN TEORI

 A. PENGERTIAN STACK
               Stack atau tumpukan merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertamakali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasiberkait atau kontigu (dengan tabel fix). Ciri Stack :
Elemen TOP (puncak) diketahui‡penyisipan dan penghapusan elemen selalu dilakukan di TOP‡LIFO (Last In First Out)Pemanfaatan Stack :
Pemanfaatan Stack :‡Perhitungan ekspresi aritmatika (posfix)‡algoritma backtraking (runut balik)‡algoritma rekursif Operasi Stack yang biasanya
1.Push (input E : typeelmt, input/output data : stack): menambahkan sebuah elemen kestack2.Pop (input/output data : stack, output E : typeelmt ) : menghapus sebuah elemenstack3.IsEmpty ()4.IsFull ()5.dan beberapas selektor yang lainKita dapat menggunakan stack dengan2cara. Cara yang pertama adalahmenuliskan program stack sendiri, kemudian melakukan manipulasinya. Sedangkancara yang kedua adalah menggunakan class Stack yang terdapat pada utilitas import java.util.Stack.

BAB III

PEMBAHASAN

A.  PENGERTIAN STACK (TUMPUKAN)

  Secara bahasa , Stack artinya tumpukan. Dikaitkan dengan Struktur Data, Stack dimaksudkan sebagai sekumpulan data yang organisasi atau strukturnya bersifat tumpukan. Dalam pemrograman, data yang bersifat tumpukan, banyak digunakan. Salah satu buku literature mendefinisikan Stack sebagai berikut :
A Stack is an ordered collection of items into which new items may be inserted and form which item may be deleted at one end, called the top of the stack
( Yedduyah L, Moshe J.A., and Aaron M. Tenembaum;
Data Structures Using C and C++
Sebuah Stack atau tumpukan dapat diilustrasikan seperti pada gambar berikut :
                                                                in    out


Gambar 2.1  Ilustrasi Stack

Dari Gambar 2.1 dapat dilihat bahwa kondisi masuk dan keluar, melalui ujung atau pintu yang sama yang disebut  puncak yang dalam pemrograman diistilahkan  dengan: Top. A, B,   dan D  merupakan suatu koleksi. Dari ilustrasi yang digambarkan, untuk 4 buah data yang ada, dapat dipastikan bahwa D yang terakhir masuk, dan pasti D yang dapat keluar lebih dulu, sehingga pada Struktur Data Stack berlaku prinsip LIFO (Last In First Out)
Dalam Struktur STACK, digunakan istilah : PUSH : Simpan, atau masuk, atau insert, atau       Tulis
POP    :  Ambil, atau keluar, atau delete, atau baca, atau hapus.
Dalam pemrograman, koleksi data yang berstruktur Stack, dapat ditempatkan dalam array satu dimensi atau dalam Linear Sibgly Linked List. Untuk Stack yang menggunakan array satu dimensi, kita mengenal Single Stack dan Double Stack.

B. PROSES SINGEL STACK
                Ada tiga macam proses pada Stack yaitu :
a.       AWAL (Inisialisasi)
b.      PUSH (Insert, Masuk, SImpan, Tulis)
c.       POP (Delete, Keluar, Ambil, Baca/Hapus)
Pada buku ini kita akan membahas satu persatu proses-proses yang terjadi pada stack agar lebih mudah untuk dipahami.
a.       Proses AWAL (inisialisai)
Proses awal adalah proses menyiapkan indeks petunjuk stack untuk pertama kali yaitu dengan instruksi      Top   = -1   Untuk keperluan lain, yang memerlukan catatan mengenai index untuk Dasar Stack dan Puncak Stack digunakan :
Top = -1;  atau Dasar  = -1; atau Puncak = n-1;
Bila ditulis dalam sebuah fungsi, (missal di beri nama AWAL) dapat ditulis sebagai berikut :
Text Box: void AWAL ()
 {   Top  = -1;
 }
 

      
Variabel Top bersifat Global. Keadaan ini bila direpresentasikan dengan gambar, dapat digambarkan seperti Gambar 2.3.
 



Gambar 2.3. Representasi proses AWAL pada Single Stack
Perhatikan Gambar 2.3.  Pada gambar tersebut menunjukkan kondisi:
- Array (Stack) belum ada isinya)
- Variabel X juga belum ada isinya
- Variabel Top isinya = -1
Dalam kondisi seperti ini, proses yang bisa dilakukan hanyalah proses PUSH yaitu proses mengisi. Sedangkan proses POP atau mengambil isi stack tak bisa dilakukan karena isi stack belum ada.
b.                     Proses PUSH
Seperti halnya proses pada awal atau inisialisasi sebelumnya dengan gambaran ilustrasi, maka pada proses PUSH ini digambarkan sebagai berikut :





Gambar 2.4a. Representasi  sebelum Proses PUSH pada Single Stack
Dalam keadaa seperti yang digambarkan pada Gambar 2.4a, ada dua hal yang dapat dilakukan, yaitu :
- PUSH, memasukan data baru ke Stack
- POP, mengambil/mengeluarkan data dari stack.
Misal isi X  = 10, ingin di PUSH ke Stack, maka hasilnya dapat digambarkan seperti Gambar 2.4b  berikut ini :



Gambar 2.4b. Representasi Proses PUSH pada Single Stack

Berdasarkan Gambar 2.4b, bila ada instruksi PUSH maka data baru (yang diambil dari isi X), akan disimpan dalam elemn S[4] sehingga  indeks Top harus diarahkan ke posisi no. 4. Artinya posisi Top maju dulu satu langkah ke S[4] kemudian baru diisi S[4].
Algoritma dasar atau algoritma yang hanya berisi instruksi dasar untuk proses PUSH hanya dua instruksi yaitu :Text Box:  Top  = Top  + 1;  
 S[Top] = X;




Top = Top + 1, artinya sebelum mengisi, Top maju dulu satu langkah, maju dalam hal ini adalah Top ditambah 1.
S[Top] = X, artinya setelah Top maju satu langkah, kemudian elemen yang ditunjuk oleh Top yaitu S[Top] diisi dengan nilai X.
Dari algoritma dasar, bila ditulis dalam sebuah fungsi (misal fungsi dengan nama PUSH), maka dapat ditulis sebagai berikut :  
void PUSH ()                 {            Top = Top + 1;
                   S[Top] = X;
       }

c. Proses POP
Perhatikan ilustrasi stack yang digambarkan sebagai berikut :

Gambar 2.5a. Representasi Sebelum Proses POP pada Single Stack

Dalam keadaan yang terlihat pada Gambar 2.5a, ada dua hal yang dapat dilakukan, yaitu :
-                      PUSH, memasukan data baru ke Stack
-                      POP, mengambil/mengeluarkan data dari stack.
Keadaan pauda Gambar 2.5a, bila ingin mengambil atau mengeluarkan (POP) isi Stack, maka tentu saja yang akan dikeluarkan adalah isi stack yang sedang ditunjuk oleh Top, yaitu nilai 15 yang akan disimpan di variable X. Setelah POP maka isi stack dapat digambarkan seperti Gambar 2.5b berikut ini :

Gambar 2.5b. Representasi Proses POP pada Single Stack
Langkah awal untuk melakukan proses POP adalah mengambil terlebih dulu nilai yang ditunjuk oleh TOP, kemudian mundur satu langkah.
Algoritma dasar untuk proses POP, terdiri dari dua instruksi yaitu :
                                                 Text Box:  X = S[Top];
  Top = Top – 1;
                  
X = S[Top], artinya mengambil dulu isi stack dan simpan di X
Top = Top-1, artinya setelah mengambil isi stack yang ditunjuk oleh Top, maka Top mundur satu langkah. Dari algoritma dasar, bila ditulis dalam sebuah fungsi (misal fungsi dengan nama PUSH), maka dapat ditulis sebagai berikut : 

                

  void POP ()
                    {
                   X  = S[Top];
                   Top  = Top -1;
                       }         
 





C.  REPRESENTASI DAN PROSES DOUBLE STACK
    Pada dasarnya prinsip proses pada Single stack atau double stack adalah  sama yaitu LIFO atau lastIn First Out. Pada proses double stack LIFO atau last in first out terjadi baik pada stack1 maupun stack2. Berikut ini contoh ilustrasi dua stack menggunakan satu array.
 



Gambar  2.7. Ilustrasi Dua Stack menggunakan Satu Array

Proses yang terjadi pada stack dengan doable stack dilakukan dengan beberapa tahapan mulai dari inisialisasi sampai dengan proses mengeluarkan isi stack, berikut tahapan proses pada double stack :
1.      Awal (Insialisasi)
Algoritma dasar untuk proses AWAL, ditulis dalam bahasa C.

    Algoritma Dasar  
     


                                 


Gambar 2.8. Proses Awal Double Stack
2.       PUSH1
Algoritma dasar untuk proses PUSH1 (mengisi stack1)




3.                                                                     POP1
Algoritma dasar untuk proses POP1 (mengambil isi stack)




4.                                      PUSH2
Algoritma dasar untuk proses PUSH2 (mengisi stack2)

5.                                      POP2
     Algoritma dasar untuk proses POP2 (mengambil isi stack2)
 



D.    KONDISI DOUBLE STACK
Kondisi stack merupakan kondisi- konndisi yang kemungkinan terjadi pada keadaan stack, yang akan ditunjukkan pada Tabel 2.2 berikut :

Tabel 2.2. Kondisi Double Stack
 
Kondisi Stack
Ciri
1.
Stack1 KOSONG
Top1  =  -1
2.
Stack2 KOSONG
Top2  =  n
  2.             
Stack PENUH (baik stack1 maupun stack2 tidak bisa diisi)
Top2 – Top1 = 1
  3.             
Stack BISA DIISI (baik stack1 maupun stack2 bisa diisi)
Top2 – Top1 > 1
      4.             
Stack1 ADA ISINYA
Top1  >  -1
      5.             
Stack2 ADA ISINYA
Top2 < n










Perhatikan Tabel 2.2, dari Tabel 2.2. di atas dapat dilihat bagaimana kondisi stack berpengaruh juga terhadap posisi Top posisi Top berpengaruh terhadap kondisi tumpukan (stack).  

E.  ALTGORITMA PUSH DAN POP PADA DOUBLE STACK
     Pada pembahasan sebelumnya telah dibahas mengenai proses PUSH dan POP dengan algortima dasar, berikut ini kita akan membahas mengenai algoritma yang lengkap PUSH dan POP, mulai dari PUSH1, POP1, PUSH2 dan POP2 dengan masing-masing contoh soal untuk lebih memahami materi Stack khusunya Daouble Stack.
1.    Algoritma lengkap untuk proses PUSH1 (mengisi Stack1)

2.    Algoritma lengkap untuk proses POP (mengambil isi Stack1)

 




Contoh soal
Susun algoritma untuk menginput data dari keyboard, satu per satu dan mengisi Stack1 sampai Stack1 penuh. (Stack2 juga akan penuh).
Jawab :


    
 void Push1SampaiPenuh()
}
     while ( Top2  -  Top1  > 1)
          {  scanf(“%i”  &X);
             Top1  = Top1  + 1;
             S[Top1]   =  X;
          }
}
 






3.    Algoritma lengkap untuk proses PUSH2 (mengambil isi Stack2)

     

    
 Void PUSH1 ()
{
     If  ( Top2  -  Top1  >  1  )
          {  scanf(“%i”  &X);
             Top2 =  Top2  -   1;
             S[Top2]  = X;
     Else
          Printf(“Stack  penuh”);
}


 
 






                                                      


4.    Algoritma lengkap untuk proses POP2 (mengambil isi Stack2)



 
 








Contoh Soal :
Susun algoritma untuk menginput data dari keyboard, satu per satu dan mengisi stack2 sampai stack 2 penuh.jawab:



 void Push1SampaiPenuh()
}
while ( Top2  -  Top1  > 1)
{  scanf(“%i”  &X);
Top2  = Top2  -  1;
S[Top2]   =  X;
}
     
}


F.  DEKLARASI TUMPUKAN

Pendeklarasian tumpukan menggunakan Larik dan sebuah variabel dengan tipe data Record :

Const Makstump = 80 {Kapasitas maksimal tumpukan}
Type Tumpukan = Record
                        Isi : Array [1.. Makstump] of integer;
                        Atas: 0.. Makstump;
        end;
Var T : Tumpukan;

Elemen Tumpukan T tersimpan dalam Larik T.isi adalah bertipe integer, banyak elemen tumpukan maksimum adalah sebesar “Makstup” 80 elemen
Jika T.Atas = 5 berarti tumpukan ada 5 elemen yaitu T.isi[1] .. T.isi[5], jika T.Atas dikurangi 1 sehingga menjadi 4, berarti T.isi[4] adalah elemen teratas, sebaliknya jika tumpukan ditambah 1 buah elemen maka T.Atas ditambah 1 sehingga menjadi 6, maka T.isi[6] adalah elemen teratas.

G.       OPERASI PADA STACK

      Pendeklarasian tumpukan menggunakan Larik dan sebuah variabel dengan tipe data Record :
1.      Createstack(S)
2.      Makenull(S)
3.      Empty
4.      Push(x,S)
5.      Pop(S)
Ilustrasi Operasi POP dan PUSH terhadap STACK
No.
OPERASI
ISI TUMPUKAN
NILAI TOP
1
CREATE STACK(S)
:<Kosong>
0
2
PUSH(‘A’,S)
:A
1
3
PUSH(‘B’,S)
:AB
2
4
PUSH(‘C’,S)
:ABC
3
5
POP(S)
:AB
2
6
PUSH(‘D’,S)
:ABD
3
7
PUSH(‘E’,S)
:ABDE
4
8
POP(S)
:ABD
3
9
POP(S)
:AB
2
10
POP(S)
:A
1

1.   Createstack(S)
Yaitu membuat tumpukan baru S, dengan sejumlah elemen kosong.
2.       Makenull(S)
Yaitu mengosongkan tumpukan S, jika ada elemen maka semua elemen akan dihapus.
3.         Empty
Yaitu tumpukan kosong ?, untuk menguji apakah tumpukan kosong atau tidak.
4.         Push(x,S)
Yaitu memasukan elemen baru x ketumpukan S. Proses PUSH, tumpukan harus diperiksa apakah jumlah elemen sudah mencapai maksimum atau tidak, jika sudah maka overflow. Operasi PUSH merupakan operasi untuk menyisip atau menambah elemen yg terletak pada posisi paling atas dari sebuah tumpukan.
Contoh Prosedur untuk Operasi PUSH :
Procedure Push (Var T : Tumpukan; X : Integer;
Begin
T.Atas:T.Atas + 1;
T.Isi[T.Atas]:=x;
end;
Prosedur tersebut akan menyiapkan tempat untuk X  yang akan di Push kedalam tumpukan, yaitu dengan menambah elemen T.Atas dengan 1 dan kemudian menyisipkan X ke dalam Larik T.Isi.
Prosedur diatas sudah benar, tapi jika pada saat T.Atas sama dengan Makstump dan kita akan mem Push lagi maka akan terjadi Overflow, maka perlu ditambahkan sebuah Testing untuk menguji apakah sudah mencapai tumpukam maksimum atau tidak.
Prosedur diatas harus dirobah menjadi :
Procedure Push (Var T : Tumpukan; X : Integer;
Begin
If T.Atas = Makstump then
Writeln(‘Tumpukan Sudah Penuh’)
Else
Begin
T.Atas:T.Atas + 1;
T.Isi[T.Atas]:=x;
end;
End;

5.         Pop(S)
Yaitu mengeluarkan elemen posisi teratas pada tumpukan S. Proses POP, tumpukan harus diperiksa apakah tumpukan sudah kosong/tidak ada lagi elemen yang hendak dikeluarkan, jika tidak maka underflow. Operasi POP merupakan operasi untuk menghapus elemen yang terletak pada posisi paling atas dari sebuah tumpukan
Contoh Prosedur untuk Operasi POP :
Procedure Pop (Var T : Tumpukan; X : Integer;
Begin
If T.Atas = 0 then
Writeln(‘Tumpukan Sudah Kosong’)
Else
T.Atas:T.Atas - 1;
end;
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 Stacksekarang.  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


H.  INISIALISASI STACK
 Pada mulanya isi top dengan -1, karena array dalam bahasa C dimulai
         dari 0, yang berarti bahwa data stack adalah KOSONG!
     Ø Top adalah suatu variabel penanda dalam Stack yang menunjukkan
         elemen teratas data Stack sekarang. Top Of Stack akan selalu bergerak
         hingga mencapai MAX of STACK yang menyebabkan stack PENUH!
         Fungsi IsFull
     Ø Untuk memeriksa apakah stack sudah penuh?
     Ø 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
Program Stack (4)
Ilustrasi Stack pada kondisi Full
int IsFull(){
if(tumpuk.top == max_stack-1)
return 1;
else
return 0;
}
Fungsi IsEmpty
   Ø Untuk memeriksa apakah data Stack masih kosong?
   Ø Dengan cara memeriksa top of stack, jika masih -1 maka berarti data
Stack masih kosong!
int IsEmpty(){
if(tumpuk.top == -1)
return 1;
else
return 0;
}
Fungsi Push
Ø Untuk memasukkan elemen ke data Stack. Data yang
diinputkan selalu menjadi elemen teratas Stack (yang ditunjuk oleh ToS)
Ø Jika data belum penuh,
Ø Tambah satu (increment) nilai top of stack lebih dahulu setiap kali ada
penambahan ke dalam array data Stack.
Ø Isikan data baru ke stack berdasarkan indeks top of stack yang telah diincrement
sebelumnya.
Ø Jika tidak, outputkan “Penuh”
Fungsi Pop
Ø Untuk mengambil data Stack yang terletak paling atas (data yang ditunjuk
oleh TOS).
Ø Tampilkan terlebih dahulu nilai elemen teratas stack dengan mengakses
indeksnya sesuai dengan top of stacknya, baru dilakukan di-decrement
nilai top of stacknya sehingga jumlah elemen stack berkurang.
Clear
Digunakan untuk mengosongkan stack / membuat stack
hampa sehingga Top pada Stack berada kembali di posisi Top = -1

BAB IV

PENUTUP

A.      KESIMPULAN
  Struktur sekumpulan elemen-elemen data yang digabung menjadi suatu kesatuan. Struktur array adalah kumpulan elemen-elemen data yang digabungkan menjadi suatu kesatuan yang memiliki tipe homogen (sama). Array merupakan bagian dari struktur data yaitu termasuk termasuk ke dalam struktur data sederhana yang dapat didefinisikan sebagai pemesanan alokasi memori sementara pada komputer. Apabila kita membuat progam dengan data yang yang sudah kita ketahui batasnya, maka kita menggunakan array (tipe data statis), namum apabila datanya belum kita ketahui batasnya amak gunakan pninter (tipe data dinamis). Elemen-elemen array tersusun secara sekuensial dalam memori komputer. Array dapat berupa satu dimensi, dua dimensi, ataupun multidimensi.

B.      SARAN
 Penggunaan stack pada struktur data sangat bermanfaat untuk para pemrogram untuk
melakukan suatu pemakain dalam informatika misalnya untuk meresenpetasi pemanggilan prosedur, perhitungan ekspresi aritmatika, rekursifitas, backtracking. Gunakan stack pada
program yang operasinya selalu dilakukan pada elemen yang paling atas.

DAFTAR PUSTAKA
Robert L. Kruse, 1991, Data Structure and Program Design, New Delhi: Prentice Hall, Second Edition.
Santoso, Insap Ir.M.Sc., Struktur Data Menggunakan Turbo Pascal 6.0, Yogyakarta: Andi Offset.
http://mariamrazq.blogspot.co.id/2014/05/stack-pada-struktur-data-bab-i.html
Sijukani, Moh. Struktur Data (Algoritma dan Struktur Data 2) dengan C, C++, Edisi empat, Jakarta: Mitra Wacana Media, 2010
Zakaria Markus Teddy and Prijono Agus, Konsep dan Implementasi Struktur Data, Bandung : Informatika, 2006



Komentar