Anda di halaman 1dari 50

Struktur data pertemuan 5

Stack

Andi.a

1
stack 11/04/21
Program stack1
# include<stdio.h>
# define n 10

void main ()
{ int S[n], Top, X;

Top = -1 ;

scanf("%i",&X);
while (X != 999 )
{ if(X >=60)
{
if(Top < n-1)
{Top=Top+1;S[Top]=X;
}
else {printf("stack penuh");
break;
}
}
else
{if(Top > -1)
{
X=S[Top];Top = Top-1;
printf(" diambil :%n",X);
}
else {printf(" Stack Kosong");
break;
}
}
scanf ("%i",&X);
}
printf("\n s e l e s a i" );
}

2
stack 11/04/21
// stack
# include<stdio.h>
# include<conio.h>
# define N 10

int S[N], Top;


void Inisialisasi(void)
{ Top = -1;
}
int BisaDiisi()
{ if(Top < N-1)
return 1;
else
return 0;
}
int AdaIsinya()
{ if (Top> -1)
return 1;
else
return 0;
}
void PUSH(int X)
{ Top++;
S[Top]=X;
}
int POP()
{ int X;
X=S[Top];
Top--;
return (X);
}
void main()
{ int X;
Inisialisasi ();
scanf("%",&X);
while(X != 999 && BisaDiisi())
{ PUSH(X);
scanf("%i",&X);
}
printf ( "\NInput& PUSH Selesai\N" );

while( AdaIsinya())
{ X=POP();
printf("%i",X);
}
printf("\N Selesai");

3
stack 11/04/21
Pengertian stack
Secara bahasa stack adalah tumpukan ,dikaitkan dengan
struktur data ,stack dimadsudkan sebagai sekumpulan data
yang organisasinya atau strukturnya bersifat tumpukan,
Dalam pemprograman data yang bersifat tumpukan .

Masuk dan keluar melalui


lubangyang sama
top d
a,b,c dan d merupakan collection dan d
c merupakan data yg terakhir masuk dan juga pastia
dalah data yang pertama keluar (LIFO)
b
Dalam struktur stack digunakan istilah :
a •Pop untuk ambil dan keluar atau delette atau
baca atau hapus
•Push untuk simpan atau masuk/ insert atau tulis 4
stack 11/04/21
Dalam pemprograman ,koleksi data yang berstruktuk stack dapat
ditempatkan dalam array satu dimensi atau dalam linear singly linked
list

Untuk stack yang mengunakan array dimensi satu, kita


mengenal Single stack dan Double stack :
 Single stack /stack tunggal adalah stack yg terdiri
dari satu collection
 Double stack /dua stack dalam satu array yaitu satu
array digunakan untuk 2 stackdimana dasar stack1
berada pada sisi index yg terkecildandasar stack yg
keduaberada pada indek yang terbesar

5
stack 11/04/21
Stack = tumpukan
 Suatu susunan koleksi data dimana data dapat
ditambahkan dan dihapus selalu dilakukan pada bagian
akhir data, yang disebut dengan top of stack
 Stack bersifat LIFO (Last In First Out)
 “Benda yang terakhir masuk ke dalam stack akan
menjadi yang pertama keluar dari stack

Compo Compo

VCD Compo

VCD VCD

TV TV TV TV
6
stack 11/04/21
Operasi Stack
4 1
O
U I
T 3 2 N

2 3

1 4

 Push : digunakan untuk menambah item pada stack pada tumpukan paling
atas
 Pop : digunakan untuk mengambil item pada stack pada tumpukan paling
atas
 Clear : digunakan untuk mengosongkan stack
 IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah
kosong
 IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
7
stack 11/04/21
Stack with Array of Struct
 Definisikan Stack dengan
menggunakan suatu struct
 Definisikan konstanta
MAX_STACK untuk
menyimpan maksimum isi stack
 Elemen struct Stack adalah array 9
data dan top untuk menadakan
posisi data teratas
 Buatlah variabel tumpuk sebagai
implementasi dari struct Stack
 Deklarasikan operasi-
operasi/function di atas dan buat
implemetasinya
# define n 10
3
Int s[n];
N-1, N-10 15
Int top,x; 2 17
-1 0 1 2 3 4 9
1
s[ ]
25 12 17 15 12
0 25
3 15 8
stack top -1 11/04/21
Program Stack
 Contoh deklarasi MAX_STACK
#define MAX_STACK 10
 Contoh deklarasi STACK dengan struct dan
array data
typedef struct STACK{
int top;
int data[10];
};
 Deklarasi/buat variabel dari struct
STACK tumpuk;

9
stack 11/04/21
Contoh prgram
 # include<stdio.h>
 # define n 10
 void main ()
 { int S[n], Top, X;
 Top = -1 ;
 scanf("%i",&X);
 while (X != 999 )
 { if(X >=60)
 {
 if(Top < n-1)
 {Top=Top+1;S[Top]=X;
 }
 else {printf("stack penuh");
 break;
 }
 }
 else
 {if(Top > -1)
 {
 X=S[Top];Top = Top-1;
 printf(" diambil :%n",X);
 }
 else {printf(" Stack Kosong");
 break;
 }
 }
 scanf ("%i",&X);
 }
 printf("\n s e l e s a i" );
 }
10
stack 11/04/21
11
stack 11/04/21
Program Stack (2)
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!

12
stack 11/04/21
Program Stack (2)

Ilustrasi Stack pada saat inisialisasi!


13
stack 11/04/21
Program Stack (3)
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

14
stack 11/04/21
Program Stack (4)
 Ilustrasi Stack pada kondisi Full

15
stack 11/04/21
Program Stack (5)
Fungsi IsEmpty
 Untuk memeriksa apakah data Stack masih kosong?
 Dengan cara memeriksa top of stack, jika masih -1 maka
berarti data Stack masih kosong!

16
stack 11/04/21
Program Stack (6)
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 di-increment sebelumnya.
 Jika tidak, outputkan “Penuh”
17
stack 11/04/21
Program Stack (7)

18
stack 11/04/21
Program Stack (8)
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.

19
stack 11/04/21
Program Stack (9)

20
stack 11/04/21
Program Stack (10)
 Fungsi Print
 Untuk menampilkan semua elemen-
elemen data Stack
 Dengan cara me-loop semua nilai
array secara terbalik, karena kita
harus mengakses dari indeks array
tertinggi terlebih dahulu baru ke
indeks yang lebih kecil!
21
stack 11/04/21
Program Stack (11)

22
stack 11/04/21
Fungsi Peek
 Digunakan untuk melihat top of stack

23
stack 11/04/21
Studi Kasus Stack
 Pembuatan Kalkulator SCIENTIFIC
– Misalkan operasi: 3 + 2 * 5
– Operasi di atas disebut notasi infiks,
notasi infiks tersebut harus diubah lebih
dahulu menjadi notas postfix
– 3 + 2 * 5 notasi postfiksnya adalah 3 2 5
*+

24
stack 11/04/21
Studi Kasus Stack (2) – Infix to Postfix
3+2*5
stack

posftix

 Baca soal dari depan ke belakang


 Jika berupa operand, maka masukkan ke posftix
 Jika berupa operator, maka:
– Jika stack masih kosong, push ke stack
– Jika derajat operator soal > derajat operator top of stack
 Push operator soal ke stack
– Selama derajat operator soal <= derajat operator top of stack
 Pop top of stack dan masukkan ke dalam posfix
 Setelah semua dilakukan, push operator soal ke stack
 Jika sudah semua soal dibaca, pop semua isi stack dan push ke postfix sesuai
dengan urutannya 25
stack 11/04/21
Studi Kasus Stack (3)

26
stack 11/04/21
Contoh lain
 a+b*c-d
– Stack (kosong) dan Postfik (kosong)
 Scan a
– Postfik: a
 Scan +
– Stack: +
 Scan b
– Postfik: ab
 Scan *, karena ToS (+) < *, maka add ke Stack
– Stack: +*

27
stack 11/04/21
Contoh
 Scan c
– Postfik: abc
 Scan –, karena * > -, maka pop Stack, dan add ke Postfik
– Stack: +
– Postfik: abc*
– Karena + >= -, maka pop Stack, dan add ke Postfik, karena Stack
kosong, maka push – ke stack
– Stack: -
– Postfik: abc*+
 Scan d
– Postfik: abc*+d
 Karena sudah habis, push ToS stack ke Posfix
– Postfix: abc*+d-

28
stack 11/04/21
Postfix Evaluator
 Scan Postfix string dari kiri kekanan.
 Siapkan sebuah stack kosong.
 Jika soal adalah operand, tambahkan ke stack. Jika
operator, maka pasti akan ada minimal 2 operand pada
stack
– Pop dua kali stack, pop pertama disimpan dalam y, dan pop
kedua ke dalam x. Lalu evaluasi x <operator> y. Simpan
hasilnya dan push ke dalam stack lagi.
 Ulangi hingga seluruh soal discan.
 Jika sudah semua, elemen terakhir pada stack adalah
hasilnya.
 Jika lebih dari satu elemen, berarti error!

29
stack 11/04/21
Contoh 325*+

30
stack 11/04/21
Queue Dengan Array
 Bersifat FIFO (First In First Out)
 Elemen yang pertama masuk ke antrian akan keluar pertama
kalinya
 DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian
 Antrian dapat dibuat dengan menggunakan: Liniear Array dan
Circular Array

31
stack 11/04/21
Queue Linier Array
 Terdapat satu buah pintu masuk di suatu ujung dan satu
buah pintu keluar di ujung satunya
 Sehingga membutuhkan 2 variabel: Head dan Tail

32
stack 11/04/21
Queue (2)

 Operasi-operasi:
Create()
– Untuk menciptakan dan menginisialisasi Queue
– Dengan cara membuat Head dan Tail = -1

33
stack 11/04/21
Queue (3)

34
stack 11/04/21
Queue (4)
 IsEmpty()
– Untuk memeriksa apakah Antrian sudah penuh atau
belum
– Dengan cara memeriksa nilai Tail, jika Tail = -1 maka
empty
– Kita tidak memeriksa Head, karena Head adalah tanda
untuk kepala antrian (elemen pertama dalam antrian)
yang tidak akan berubah-ubah
– Pergerakan pada Antrian terjadi dengan penambahan
elemen Antrian kebelakang, yaitu menggunakan nilai
Tail
35
stack 11/04/21
Queue (5)

36
stack 11/04/21
Queue (6)
Fungis IsFull
– Untuk mengecek apakah Antrian sudah penuh atau
belum
– Dengan cara mengecek nilai Tail, jika Tail >= MAX-
1 (karena MAX-1 adalah batas elemen array pada C)
berarti sudah penuh

37
stack 11/04/21
Queue (7)
Enqueue
– Untuk menambahkan elemen ke dalam
Antrian, penambahan elemen selalu
ditambahkan di elemen paling belakang
– Penambahan elemen selalu menggerakan
variabel Tail dengan cara increment counter
Tail terlebih dahulu

38
stack 11/04/21
Queue (8)

39
stack 11/04/21
Queue (9)
 Dequeue()
– Digunakan untuk menghapus elemen
terdepan/pertama (head) dari Antrian
– Dengan cara menggeser semua elemen antrian
kedepan dan mengurangi Tail dgn 1
– Penggeseran dilakukan dengan menggunakan
looping

40
stack 11/04/21
Queue (10)

41
stack 11/04/21
Queue (11)
 Clear()
– Untuk menghapus elemen-elemen Antrian
dengan cara membuat Tail dan Head = -1
– Penghapusan elemen-elemen Antrian
sebenarnya tidak menghapus arraynya, namun
hanya mengeset indeks pengaksesan-nya ke
nilai -1 sehingga elemen-elemen Antrian tidak
lagi terbaca

42
stack 11/04/21
Queue (12)

43
stack 11/04/21
Agenda
 List the topics to be covered
 List the times allotted to each

44
stack 11/04/21
Overview
 Give the big picture of the subject
 Explain how all the individual topics fit
together
Text Te Text
xt
Text Text Text

Text Te Text
xt
45
stack 11/04/21
Vocabulary
 Glossary of terms
 Define the terms as used in this subject

46
stack 11/04/21
Topic One
 Explain details
 Give an example
 Exercise to reinforce learning

47
stack 11/04/21
Topic Two
 Explain details
 Give an example
 Exercise to reinforce learning

48
stack 11/04/21
Summary
 State what has been learned
 Define ways to apply training
 Request feedback of training session

49
stack 11/04/21
Where to Get More Information
 Other training sessions
 List books, articles, electronic sources
 Consulting services, other sources

50
stack 11/04/21