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
LANDASAN TEORI.......................................................................................................................5
A. PENGERTIAN
STACK (TUMPUKAN)………….…. …………………………………....5
BAB III
PEMBAHASAN……………………………………………..…………………………………… 6
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
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) diketahuipenyisipan dan penghapusan elemen selalu dilakukan di TOPLIFO (Last In First Out)Pemanfaatan Stack :
Pemanfaatan Stack :Perhitungan ekspresi aritmatika (posfix)algoritma backtraking (runut balik)algoritma rekursif Operasi Stack yang biasanya
Elemen TOP (puncak) diketahuipenyisipan dan penghapusan elemen selalu dilakukan di TOPLIFO (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 :
![]() |
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;](file:///C:/Users/ALDYRI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png)
![Text Box: Top = Top + 1;
S[Top] = X;](file:///C:/Users/ALDYRI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png)
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 :
|
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 :
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 :
{
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 :
}
while ( Top2 - Top1 > 1)
{ scanf(“%i” &X);
Top1 = Top1 + 1;
S[Top1] = X;
}
|
3. Algoritma lengkap untuk proses PUSH2
(mengambil isi Stack2)
{
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:
}
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;
#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.
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
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



![Text Box: X = S[Top];
Top = Top – 1;](file:///C:/Users/ALDYRI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.png)










Komentar
Posting Komentar