01/15/22 stack 1 Struktur data Struktur data pertemuan 5 Stack pertemuan 5 Stack Andi.a
Jun 19, 2015
04/12/23stack1
Struktur data pertemuan 5 Struktur data pertemuan 5 StackStack
Andi.a
04/12/23stack2
Program stack1Program 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" ); }
04/12/23stack3
// 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");
}
04/12/23stack4
Pengertian stackPengertian stackSecara 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 .
d
c
b
a
top
Masuk dan keluar melalui lubangyang sama
a,b,c dan d merupakan collection dan d merupakan data yg terakhir masuk dan juga pastia dalah data yang pertama keluar (LIFO)
Dalam struktur stack digunakan istilah :
•Pop untuk ambil dan keluar atau delette atau baca atau hapus
•Push untuk simpan atau masuk/ insert atau tulis
04/12/23stack5
Dalam pemprograman ,koleksi data yang berstruktuk stack dapat Dalam pemprograman ,koleksi data yang berstruktuk stack dapat ditempatkan dalam ditempatkan dalam array satu dimensiarray satu dimensi atau dalam atau dalam linear singly linked linear singly linked listlist
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
04/12/23stack6
Stack = tumpukanStack = 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
TV TV
VCD
Compo
TV
VCD
Compo
TV
VCD
Compo
04/12/23stack7
Operasi StackOperasi Stack
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
4
3
2
1
1
2
3
4
OUT
IN
04/12/23stack8
Stack with Array of StructStack with Array of Struct Definisikan Stack dengan
menggunakan suatu struct Definisikan konstanta
MAX_STACK untuk menyimpan maksimum isi stack
Elemen struct Stack adalah array 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
25 12 17 15
1 2 3 40-1 9
3 15
15171225
-1
0
1
9
3
2N-1, N-10
s[ ]
top
# define n 10
Int s[n];
Int top,x;
04/12/23stack9
Program StackProgram Stack
Contoh deklarasi MAX_STACK#define MAX_STACK 10
Contoh deklarasi STACK dengan struct dan array datatypedef struct STACK{
int top;int data[10];
}; Deklarasi/buat variabel dari struct
STACK tumpuk;
04/12/23stack10
Contoh prgramContoh 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" ); }
04/12/23stack11
04/12/23stack12
Program Stack (2)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!
04/12/23stack13
Program Stack (2)Program Stack (2)
Ilustrasi Stack pada saat inisialisasi!
04/12/23stack14
Program Stack (3)Program Stack (3)
Fungsi IsFullUntuk 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
04/12/23stack15
Program Stack (4)Program Stack (4)
Ilustrasi Stack pada kondisi Full
04/12/23stack16
Program Stack (5)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!
04/12/23stack17
Program Stack (6)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”
04/12/23stack18
Program Stack (7)Program Stack (7)
04/12/23stack19
Program Stack (8)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.
04/12/23stack20
Program Stack (9)Program Stack (9)
04/12/23stack21
Program Stack (10)Program Stack (10)
Fungsi PrintUntuk menampilkan semua elemen-
elemen data StackDengan cara me-loop semua nilai
array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang lebih kecil!
04/12/23stack22
Program Stack (11)Program Stack (11)
04/12/23stack23
Fungsi PeekFungsi Peek
Digunakan untuk melihat top of stack
04/12/23stack24
Studi Kasus StackStudi Kasus StackPembuatan 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 * +
04/12/23stack25
Studi Kasus Stack (2) – Infix to PostfixStudi Kasus Stack (2) – Infix to Postfix
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
3 + 2 * 5
stack
posftix
04/12/23stack26
Studi Kasus Stack (3)Studi Kasus Stack (3)
04/12/23stack27
Contoh lainContoh 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: +*
04/12/23stack28
ContohContoh 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-
04/12/23stack29
Postfix EvaluatorPostfix 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!
04/12/23stack30
Contoh 325*+Contoh 325*+
04/12/23stack31
Queue Dengan ArrayQueue 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
04/12/23stack32
Queue Linier ArrayQueue 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
04/12/23stack33
Queue (2)Queue (2)
Operasi-operasi:Create()
– Untuk menciptakan dan menginisialisasi Queue
– Dengan cara membuat Head dan Tail = -1
04/12/23stack34
Queue (3)Queue (3)
04/12/23stack35
Queue (4)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
04/12/23stack36
Queue (5)Queue (5)
04/12/23stack37
Queue (6)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
04/12/23stack38
Queue (7)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
04/12/23stack39
Queue (8)Queue (8)
04/12/23stack40
Queue (9)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
04/12/23stack41
Queue (10)Queue (10)
04/12/23stack42
Queue (11)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
04/12/23stack43
Queue (12)Queue (12)
04/12/23stack44
AgendaAgenda
List the topics to be coveredList the times allotted to each
04/12/23stack45
Overview Overview
Give the big picture of the subjectExplain how all the individual topics fit
together
Text
Text
Text
TextText
Text
Text
TextText
04/12/23stack46
VocabularyVocabulary
Glossary of termsDefine the terms as used in this subject
04/12/23stack47
Topic OneTopic One
Explain detailsGive an exampleExercise to reinforce learning
04/12/23stack48
Topic TwoTopic Two
Explain detailsGive an exampleExercise to reinforce learning
04/12/23stack49
SummarySummary
State what has been learnedDefine ways to apply trainingRequest feedback of training session
04/12/23stack50
Where to Get More InformationWhere to Get More Information
Other training sessionsList books, articles, electronic sourcesConsulting services, other sources