Top Banner
01/15/22 stack 1 Struktur data Struktur data pertemuan 5 Stack pertemuan 5 Stack Andi.a
50
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Struktur Data Pertemuan 5 Stack

04/12/23stack1

Struktur data pertemuan 5 Struktur data pertemuan 5 StackStack

Andi.a

Page 2: Struktur Data Pertemuan 5 Stack

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" ); }

Page 3: Struktur Data Pertemuan 5 Stack

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");

}

Page 4: Struktur Data Pertemuan 5 Stack

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

Page 5: Struktur Data Pertemuan 5 Stack

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

Page 6: Struktur Data Pertemuan 5 Stack

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

Page 7: Struktur Data Pertemuan 5 Stack

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

Page 8: Struktur Data Pertemuan 5 Stack

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;

Page 9: Struktur Data Pertemuan 5 Stack

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;

Page 10: Struktur Data Pertemuan 5 Stack

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" ); }

Page 11: Struktur Data Pertemuan 5 Stack

04/12/23stack11

Page 12: Struktur Data Pertemuan 5 Stack

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!

Page 13: Struktur Data Pertemuan 5 Stack

04/12/23stack13

Program Stack (2)Program Stack (2)

Ilustrasi Stack pada saat inisialisasi!

Page 14: Struktur Data Pertemuan 5 Stack

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

Page 15: Struktur Data Pertemuan 5 Stack

04/12/23stack15

Program Stack (4)Program Stack (4)

Ilustrasi Stack pada kondisi Full

Page 16: Struktur Data Pertemuan 5 Stack

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!

Page 17: Struktur Data Pertemuan 5 Stack

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”

Page 18: Struktur Data Pertemuan 5 Stack

04/12/23stack18

Program Stack (7)Program Stack (7)

Page 19: Struktur Data Pertemuan 5 Stack

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.

Page 20: Struktur Data Pertemuan 5 Stack

04/12/23stack20

Program Stack (9)Program Stack (9)

Page 21: Struktur Data Pertemuan 5 Stack

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!

Page 22: Struktur Data Pertemuan 5 Stack

04/12/23stack22

Program Stack (11)Program Stack (11)

Page 23: Struktur Data Pertemuan 5 Stack

04/12/23stack23

Fungsi PeekFungsi Peek

Digunakan untuk melihat top of stack

Page 24: Struktur Data Pertemuan 5 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 * +

Page 25: Struktur Data Pertemuan 5 Stack

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

Page 26: Struktur Data Pertemuan 5 Stack

04/12/23stack26

Studi Kasus Stack (3)Studi Kasus Stack (3)

Page 27: Struktur Data Pertemuan 5 Stack

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: +*

Page 28: Struktur Data Pertemuan 5 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-

Page 29: Struktur Data Pertemuan 5 Stack

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!

Page 30: Struktur Data Pertemuan 5 Stack

04/12/23stack30

Contoh 325*+Contoh 325*+

Page 31: Struktur Data Pertemuan 5 Stack

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

Page 32: Struktur Data Pertemuan 5 Stack

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

Page 33: Struktur Data Pertemuan 5 Stack

04/12/23stack33

Queue (2)Queue (2)

Operasi-operasi:Create()

– Untuk menciptakan dan menginisialisasi Queue

– Dengan cara membuat Head dan Tail = -1

Page 34: Struktur Data Pertemuan 5 Stack

04/12/23stack34

Queue (3)Queue (3)

Page 35: Struktur Data Pertemuan 5 Stack

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

Page 36: Struktur Data Pertemuan 5 Stack

04/12/23stack36

Queue (5)Queue (5)

Page 37: Struktur Data Pertemuan 5 Stack

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

Page 38: Struktur Data Pertemuan 5 Stack

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

Page 39: Struktur Data Pertemuan 5 Stack

04/12/23stack39

Queue (8)Queue (8)

Page 40: Struktur Data Pertemuan 5 Stack

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

Page 41: Struktur Data Pertemuan 5 Stack

04/12/23stack41

Queue (10)Queue (10)

Page 42: Struktur Data Pertemuan 5 Stack

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

Page 43: Struktur Data Pertemuan 5 Stack

04/12/23stack43

Queue (12)Queue (12)

Page 44: Struktur Data Pertemuan 5 Stack

04/12/23stack44

AgendaAgenda

List the topics to be coveredList the times allotted to each

Page 45: Struktur Data Pertemuan 5 Stack

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

Page 46: Struktur Data Pertemuan 5 Stack

04/12/23stack46

VocabularyVocabulary

Glossary of termsDefine the terms as used in this subject

Page 47: Struktur Data Pertemuan 5 Stack

04/12/23stack47

Topic OneTopic One

Explain detailsGive an exampleExercise to reinforce learning

Page 48: Struktur Data Pertemuan 5 Stack

04/12/23stack48

Topic TwoTopic Two

Explain detailsGive an exampleExercise to reinforce learning

Page 49: Struktur Data Pertemuan 5 Stack

04/12/23stack49

SummarySummary

State what has been learnedDefine ways to apply trainingRequest feedback of training session

Page 50: Struktur Data Pertemuan 5 Stack

04/12/23stack50

Where to Get More InformationWhere to Get More Information

Other training sessionsList books, articles, electronic sourcesConsulting services, other sources