Dr. Anto Satriyo Nugroho, M.Eng

Slides:



Advertisements
Presentasi serupa
Queue (Antrian).
Advertisements

Jawaban PR-01 Dr. Anto Satriyo Nugroho, M.Eng Web:
Pendahuluan Dr. Anto Satriyo Nugroho, M.Eng Web: Mata Kuliah: Dasar Pemrograman.
Flowchart (1) Mata Kuliah: Dasar Pemrograman
Struktur Kendali Proses (Bab 4) Dr. Anto Satriyo Nugroho, M.Eng Web: Mata Kuliah: Dasar.
Dr. Anto Satriyo Nugroho, M.Eng
Dr. Anto Satriyo Nugroho, M.Eng
Dr. Anto Satriyo Nugroho, M.Eng
Pertemuan 5 Struktur Data
Doubly Linked List Dr. Anto Satriyo Nugroho, M.Eng Web:
STRUKTUR DATA (7) single linked list circular
STRUKTUR DATA array stack dan queue
STACK (Tumpukan) Tumpukan Koin Tumpukan Kotak.
QUEUE II. IMPLEMENTASI QUEUE
List, Stack & Queue (1) Dr. Anto Satriyo Nugroho, M.Eng
Pertemuan 5 STACK atau TUMPUKAN IMAM SIBRO MALISI NIM :
Queue.
Stack (Tumpukan) Sumber Kepustakaan : putuputraastawa.files.wordpress.com/.../pert_5_sta...
Algoritma dan Struktur Data
STACK (Tumpukan).
STACK.
STACK.
Struktur Data (Data Structure) – IS 2313
Pointer dalam Stack.
STRUKTUR DATA (4) Array Stack(Tumpukkan) dan Queue (Antrian)
Queue.
Stack (Tumpukan).
Queue.
STACK.
Reverse Polish Notation (RPN)
Algorithm and Data Structures.
Linear Data Structures (Stack)
Implementasi Queue Implementasi queue lebih sulit daripada stack. Pada stack, penambahan dan penghapusan data hanya dilakukan pada satu ujung saja, sehingga.
Circular Queue.
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Apakah Stack itu ?. Apakah Stack itu ? Pengertian STACK Secara sederhana diartikan dengan : sebagai tumpukan dari benda sekumpulan data yang seolah-olah.
Pertemuan 7 stack jual [Valdo] Lunatik Chubby Stylus.
STRUKTUR DATA Queue atau Antrian.
STACK.
Queue By Serdiwansyah N. A. 1. Queue Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain.
Program Studi Teknik Informatika
Chapt 04 : Stack Oleh : Yuli Praptomo PHS, S.Kom
Sapta Candra Miarsa,S.T.,M.T.
Defri Kurniawan ADT STACK Defri Kurniawan
Program Studi Teknik Informatika
Defri Kurniawan QUEUE Defri Kurniawan
Queue.
STRUKTUR DATA QUEUE (Antrian)
STACK (Tumpukan).
Stack (Tumpukan) Sumber Kepustakaan : putuputraastawa.files.wordpress.com/.../pert_5_sta...
Program Studi Teknik Informatika
Program Studi Teknik Informatika
STRUKTUR DATA Chapt 5 : QUEUE Oleh : Yuli Praptomo PHS, S.Kom.
Algoritma dan Struktur Data
Program Studi Teknik Informatika
Program Studi Teknik Informatika
STACK (Tumpukan).
Stack.
Stack.
STACK & QUEUE Struktur Data.
STACK HARJANTO SUTEDJO.
Apakah Algoritma & Struktur Data itu ?
QUEUE (Antrian) #Kulia 6 Algoritma dan Struktur Data.
Algoritma dan Struktur Data
QUEUE (ANTRIAN) Queue atau antrian didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan elemen (Enqueue) dan pengambilan.
STACK (TUMPUKAN) Stack atau tumpukan didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan dan pengambilan elemen melalui.
STRUKTUR DATA Stack atau Tumpukan.
Queue Algoritma dan Struktur Data.
QUEUE (Antrian).
Struktur Data Linear Created by Fifth Group, S3B TI Anggota
Transcript presentasi:

Dr. Anto Satriyo Nugroho, M.Eng List, Stack, Queue (2) Dr. Anto Satriyo Nugroho, M.Eng Email: asnugroho@gmail.com Web: http://asnugroho.net/lecture/ds.html

Beberapa jenis struktur data Array Linear List Stack Queue List Connected List Circular List Doubly-linked List Multi list structure Tree Structure Apa ? Bagaimana cara implementasinya ?

Implementasi Linear List List size (banyaknya elemen): n Memasukkan (menyisipkan) data baru sebelum data no.k ①Mencari posisi dimana data harus dimasukkan 31 … … 10 12 14 16 18 20 22 24 26 1 2 3 4 … k-1 k k+1 k+2 n

Implementasi Linear List List size (banyaknya elemen): n Memasukkan (menyisipkan) data baru sebelum data no.k 31 ② data sesudah no.k digeser (shift) satu ke belakang … … 10 12 14 16 18 20 22 24 26 1 2 3 4 … k-1     k k+1 k+2 n

Implementasi Linear List List size (banyaknya elemen): n Memasukkan (menyisipkan) data baru sebelum data no.k Rata-rata shift data: n/2 Computational complexity: … … 10 12 14 16 18 31 20 22 24 26 1 2 3 4 … k-1 k k+1 k+2 n+1

Implementasi Linear List Membaca/menulis konten sebuah data: O(1) random access Penambahan data: O(n) Penghapusan data: O(n) efisien dalam komputasi Stack Queue lambat

Beberapa jenis struktur data Array Linear List Stack Queue List Connected List Circular List Doubly-linked List Multi list structure Tree Structure Apa ? Bagaimana cara implementasinya ?

Implementasi Stack memakai Array Penambahan dan penghapusan elemen dilakukan pada elemen list yang terletak di paling depan n (stack pointer) Menunjuk ke satu posisi di atas top top x[n-1] x[n-2] Menambahkan data ke stack (PUSH) … x[n++] = data; x[3] x[2] Menghapus data dari stack (POP) x[1] data =x[--n]; bottom x[0] Saat PUSH/POP dilakukan, jangan lupa mengupdate stack pointer

Suplemen (cara pemakaian ++ dan --) n++ setelah diproses n = n + 1 ++n sebelum diproses n = n + 1 n -- setelah diproses n = n – 1 -- n sebelum diproses n = n – 1 n=3; printf(“%d\n”,x[n]); printf(“%d\n”, n); printf(“%d\n”,x[++n]); printf(“%d\n”,x[n++]); printf(“%d\n”,x[n--]); printf(“%d\n”,x[--n]); x[7] 10 5 3 9 4 7 x[6] 13 x[5] 7 x[4] 9 x[3] 5 x[2] 14 x[1] 2 x[0] 3

Implementasi Stack 4 operasi utama dalam implementasi stack 1.init :inisialisasi stack (mengosongkan stack) 2. push:menambahkan data pada stack 3. pop :menghapus data dari stack 4. empty:memeriksa apakah stack sudah kosong atau tidak

Reverse Polish Notation (RPN) Reverse Polish Notation: menaruh operator di belakang Nama lain : postfix notation Implementasi RPN memakai stack Jika “angka”, tambahkan pada stack Jika “operator”, turunkan (POP) dua buah data dari stack, lakukan perhitungan, dan tambahkan (PUSH) hasilnya pada stack

Reverse Polish Notation (RPN) Downloadlah program dari situs kuliah, compile dan jalankan Cara penulisan A + B A B + A - B A B - A / B A B / A * B A B *

Reverse Polish Notation (RPN) while ((c = getchar()) != EOF) { if (isdigit(c)) { ungetc(c, stdin); scanf("%ld", &x); push(x); } else { switch (c) { case '+': b = pop(); a = pop(); push(a + b); break; case '-': …   …. Setelah baris ke-67 Jika input data adalah angka, baca ulang Data tsb dan PUSH-lah data itu pada stack x ? ? Jika input data itu bukan angka, lakukan perhitungan sesuai dengan operasi yang ditunjukkan oleh input data tsb. (+,-,*,/)

switch (c) { case '+': b = pop(); a = pop(); push(a + b); break; case '-': push(a - b); case '*': push(a * b); case '/': push(a / b); case '\n': if (! empty()) printf(“Jawab: %ld \n", pop()); init(); pop Jika operator itu ‘+' pop push b a a+b Jika operator itu ‘-' ? ? ? ? Jika operator itu ‘*' Jika operator itu ‘/' Jika return key

Reverse Polish Notation (RPN) Contoh-1 10 + 5 10 5 + Data di PUSH ke stack Jika operator, lakukan operasi pada dua data terakhir yang di PUSH ke stack + 5 5 10 10 10 15 push(10) push(5) 10+5 hitung !!

Reverse Polish Notation (RPN) Contoh-2 10 / 5 10 5 / Data di PUSH ke stack Jika operator, lakukan operasi pada dua data terakhir yang di PUSH ke stack / 5 5 10 10 10 2 push(10) push(5) 10/5 hitung !!

Reverse Polish Notation (RPN) Contoh-3 10 * (5 +4) (banyaknya input > 2) 10, (5+4) , * 10 , ( 5, 4, +), * 10 5 4 + * A * B → A B * A + B → A B + 10 5 4 9 * 90 +

Reverse Polish Notation (RPN) Contoh-4 / / 3 3 - 2 2 * 12 12 12 4 4 14 14 14 7 7 6 6 6 6 6 6 2 2 2 2 2 2 14

Latihan 1 Ubahlah perhitungan di bawah ke dalam RPN Implementasikan perhitungan di atas dengan stack, dan gambarkan kondisi stack tiap tahap

Beberapa jenis struktur data Array Linear List Stack Queue List Connected List Circular List Doubly-linked List Multi list structure Tree Structure Apa ? Bagaimana cara implementasinya ?

Implementasi Queue Implementasi queue lebih sulit daripada stack. Pada stack, penambahan dan penghapusan data hanya dilakukan pada satu ujung saja, sehingga cukup mengubah posisi pointer sesuai dengan penambahan/pengurangan data Implementasi queue, harus mengubah posisi DUA buah pointer, yaitu pointer yang menunjuk ke FRONT, dan pointer yagn menunjuk ke REAR Ada dua cara implementasi queue: rear front stack queue

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 … Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 … Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 … Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT front rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x Queue adalah pada bagian yang berwarna hijau

Cara 1 Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR Saat data ditambahkan ke queue, naikkan posisi pointer REAR Saat data dihapus dari queue, naikkan posisi pointer FRONT Saat front==rear, berarti queue kosong front==rear … x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 … Array x Queue adalah pada bagian yang berwarna hijau

Masalah yang timbul pada Cara 1 Front dari rear selalu bertambah secara motononik, sehingga memerlukan array dengan ukuran tak terhingga Menyambungkan FRONT dan REAR dari array itu sehingga membentuk cincin (RING BUFFER) front rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 array x … Pointer selalu bergerak ke kanan, tak pernah kembali

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 front rear Queue adalah pada bagian yang berwarna hijau

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 front rear Queue adalah pada bagian yang berwarna hijau

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama Menambahkan data ke queue: nilai rear dinaikkan satu Menghapus data dari queue: nilai front dinaikkan satu Queue kosong pada saat front==rear n-1 n-2 1 rear==front Queue adalah pada bagian yang berwarna hijau

Masalah pada Ring Buffer Pada saat rear==front , ada dua interpretasi yang muncul, “queue kosong” ataukah “queue full” n-1 n-1 n-2 1 n-2 1 empty full rear==front rear==front Queue adalah pada bagian yang berwarna hijau

Masalah pada Ring Buffer Solusi Menyiapkan sebuah FLAG untuk memberi tanda kalau queue kosong Queue dijaga agar tidak pernah full, dengan menyisakan sebuah elemen yang kosong n-1 1 n-2

Tugas Downloadlah program simulasi QUEUE: queue.c dan selesaikan fungsi-fungsi sbb. void enqueue(char *x) void dequeue() Void queue_print() Implementasi memakai RING BUFFER, dengan selalu menyisakan sebuah elemen kosong Queue size: 5 (fixed) Input yang dimasukkan berupa character string

Contoh hasil eksekusi [1] tambahkan task [2] eksekusi [3] selesai 1 Isi task: baca buku Kondisi QUEUE: [0] baca buku Isi task: membuat program [0] baca buku [1] membuat program [1] tambahkan task [2] eksekusi [3] selesai  2 Menjalankan task: baca buku [1] membuat program

Hint Dalam fungsi enqueue/dequeue, posisi pointer front dan rear harus diupdate sehingga menunjuk ke posisi yang benar Pengubahan posisi tsb. Memakai fungsi next() Pada fungsi next(), sisa pembagian dihitung dengan cara membaginya dengan QUEUE_SIZE, sehingga jika nilai itu melebih QUEUE_SIZE, dia akan kembali ke ujung depan queue. Posisi berikutnya dihitung dengan posisiberikutnya =next(posisi saat ini)