Pertemuan 7 stack jual [Valdo] Lunatik Chubby Stylus
Struktur Data Majemuk Linear Stack, Queue, List Non Linear Tree, Graph
Stack Definisi Stack Operasi-operasi dasar Stack Push Pop
STACK (TUMPUKAN) Kumpulan items yang teratur dimana items baru akan dimasukkan ke dan sebuah items akan dikeluarkan dari satu ujung yang sama, yaitu dari TOP sebuah stack. Struktur data linier dimana hanya bagian TOP-nya saja yang bisa diakses. Bersifat LIFO = Last In First Out. Bisa diimplementasikan menggunakan array atau Linked List.
Last In First Out
Penggunan Stack History pada web browser. Undo Log pada text editor. Pemrosesan struktur bersarang (nested) : loop, rekursi, fungsi, dll. Algoritma back tracking – Artificial Intelegence
Operasi Dasar Stack Push : memasukkan sebuah item baru ke dalam stack. Pop : mengeluarkan sebuah item dari stack. Operasi lain : Is_Empty, Is_Full Note : pop dan push dilakukan melalui ujung yang sama (TOP)
Visualisasi Operasi Stack X A E B TOP remove: “POP” insert ‘B’: PUSH ‘B’ D K P O T R W Y a b c d e f g h i j
Push Operasi PUSH : Menambahkan elemen pada sebuah stack PUSH top== bottom 1
PUSH Operasi PUSH : Menambahkan elemen pada sebuah stack PUSH 2 top bottom 1
Operasi PUSH : Menambahkan elemen pada sebuah stack top 3 2 bottom 1
Operasi PUSH : Menambahkan elemen pada sebuah stack top 4 3 2 bottom 1
Pop Operasi POP : Menghapus sebuah elemen dari sebuah stack top 6 5 4 3 2 bottom 1
Operasi POP : Menghapus sebuah elemen dari sebuah stack top 5 POP 4 3 2 bottom 1
Operasi POP : Menghapus sebuah elemen dari sebuah stack 3 top 2 bottom 1
Penambahan dan penghapusan elemen dilakukan pada elemen list yang terletak di paling depan Yang dihapus adalah elemen yang paling terakhir ditambahkan Nama lain: LIFO (Last In First Out) Operasi POP : Menghapus sebuah elemen dari sebuah stack
Langkah Membuat Stack Membuat struktur data class Mendefinisikan atribut class. Membuat fungsi/ operasi method Push Pop. Membuat fungsi utama main()
Deklarasi Struktur Data Stack #define maxsize 100 // mendefinisikan maks ukuran data // dlm stack typedef struct { int top; // indeks TOP char items [ maxsize ] // array } stack; // nama tipe data baru yg dibuat // adalah stack
Deklarasi Fungsi-Fungsi Stack void initialize ( stack *s) void pop ( stack *s, char *x ) void push ( stack *s, char x ) void show ( stack *s )
Fungsi Initialize void initialize ( stack *s) // operasi initialize dg parameter // s bertipe pointer stack { s -> top = -1; // top = -1 stack dlm kondisi empty }
Fungsi Push void push ( stack *s, char x ) { if (s->top > maxsize) // stack is full printf("\nERROR: the stack is full!"); else { s->top = s->top + 1; s->items [ s->top ] = x; printf("\nPUSH SUCCEED"); }
Fungsi Pop void pop ( stack *s, char *x ) { if (s->top < 0) // stack is empty printf("\nERROR: the stack is empty!"); else { *x = (s->items [ s->top ]); s->top = s->top - 1; printf("\nPOP SUCCEED"); }
Fungsi Show void show( stack *s ) { printf("\nISI STACK :\n"); for(int i=s->top; i>=0; i--) printf("\t%c\n", s->items[i]); printf("\n"); }
Fungsi Main void main() { stack *my_stack, s; char item, *x; x = &item; initialize(my_stack); push(my_stack, 'A'); push(my_stack, 'R'); push(my_stack, 'I'); push(my_stack, 'F'); show(my_stack); pop(my_stack, x); pop(my_stack, x); }
Output Program
Stack – Linked List Jika sebuah linked list SELALU menambahkan node baru dan menghapus node lama dari salah SATU ujungnya saja (posisi Head ataukah Tail) STACK. TOP = head untuk single linked list. TOP = tail untuk double linked list. HOW?
Push Operation
Pop Operation
Penggunaan Stack dalam Pemrograman Minggu Keduabelas Penggunaan Stack dalam Pemrograman
Apakah Tanda Kurungnya Valid? {x+(y-[a+b])*c-[(d+e)]}{z+(y [d+f]}*g- ((d+h)]}{w+(y-[a+r])*j-[(k+e)]}
Pengecekan Tanda Kurung valid = true s = the_empty_stack while ( we_have_not_read_the_entire_string ) { read the next symbol (symb) of the string if ( symb == ‘(‘ || symb == ‘[‘ || symb == ‘{‘ ) //apakah symb termasuk kurung buka? push ( s, symb ) // jika symb adalah kurung buka if ( symb == ‘)‘ || symb == ‘]‘ || symb == ‘}‘ ) //apakah symb termasuk kurung tutup? if ( empty ( s ) ) valid = false else { k = pop ( s ); if ( k is_not_the_matching_opener_of_symb ) valid = false } // end else } // end while if ( ! empty ( s ) ) valid = false if ( valid ) output ( “the string is valid” ) else output ( “the string is not valid” );
Example Case Cek apakah string di bawah ini valid! (a+b)} (h-(j-(k-[l-n])) {x+(y-[a+b])*c-[(d+e)]} Valid
Evaluasi Postfix Postfix adalah bentuk persamaan matematika dimana operator ditulis setelah kedua operannya. Contoh : AB+ CDE*- C-(D*E) FG/H+ (F/G)+H Latihan : Ubah infix ke postfix {([(A+B)*C] – (D – E))^(F+G)} AB+C*DE - - FG+^
Algoritma Infix Postfix Tambahkan tanda kurung untuk mengelompokkan operasi. Keluarkan operator ke sebelah kanan tanda kurung untuk setiap kelompok operasi satu per satu. Hilangkan semua tanda kurung.
Algoritma Evaluasi Postfix opndstck = the_empty_stack /* scan the input string, one by one element, into symb while ( not_end_of_input_string ) { symb = next_input_character if ( symb_is_an_operand ) push ( opndstck, symb ) else /* symb is an operator */ { opnd2 = pop ( opndstck ) opnd1 = pop ( opndstck ) value = opnd1 (symb) opnd2 push ( opndstck, value ) } /* end else */ } /* end while */ return ( pop ( opndstck ) )
SOAL POSTFIX : Jika A = 4, B = 2, C = 3, hitunglah : ABC+–ACB^*+ AB*CB+^AC+–