# NINE Queue dengan Array

dokumen-dokumen yang mirip
Algoritma dan Struktur Data. Ramos Somya

QUEUE (ANTREAN) Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu

Seharusnya. if (antrian.tail==max-1) return 0;

Algoritma dan Struktur Data. Ramos Somya

Algoritma Dan Struktur Data II. Queue

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

ALGORITMA DAN STRUKTUR DATA ARRAY STACK DAN QUEUE

QUEUE (ANTREAN) Pertemuan 6 PENGERTIAN QUEUE (ANTREAN)

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

STACK DAN QUEUE (Muhammad Fachrie, STMIK Amikom Yogyakarta)

LAPORAN PRAKTIKUM RESMI QUEUE

Struktur Data Array. Rijal Fadilah S.Si

DIKTAT PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

STRUKTUR DATA POKOK BAHASAN - 8 QUEUE ( ANTRIAN)

STACK atau TUMPUKAN. Pertemuan 5 STACK (TUMPUKAN)

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Stack using Array. Alfa Faridh Suni, S.T., M.T. PTIK

# EIGHT ADT (Abstract Data Type) dan Stack Array

Antrian (Queue) Susunan koleksi data dimana proses penambahan data (add) dilakukan dari belakang dan penghapusan data (delete) dilakukan dari depan.

Algoritma Dan Struktur Data II

Praktikum Algoritma dan Struktur Data

LAPORAN PRAKTIKUM IV. Oleh:

Implementasi Queue menggunakan Array. Imam Fahrur Rozi

STRUKTUR DATA POKOK BAHASAN - 7 STACK ( TUMPUKAN )

STACK dan QUEUE MODUL PRAKTIKUM STRUKTUR DATA 09 UNIVERSITAS KRISTEN DUTA WACANA. Daftar Isi: Stack dan Queue. Latihan soal. Guided.

PRAKTIKUM STRUKTUR DATA QUEUE. SULIDAR FITRI, M.Sc

LAPORAN PRAKTIKUM IV. Oleh :

Algoritma Pemrograman & Struktur Data

STACK DAN QUEUE. Pengertian Stack Dan Queue. stack & queue. Last saved by KENKEINA Created by KENKEINA

Pertemuan 7. REVIEW dan QUIS

BAB III. Stack. ( Tumpukan )

Struktur Data. Stack STMIK AMIKOM YOGYAKARTA. Bayu Setiaji, S.Kom

Modul Praktikum Algoritma dan Struktur Data

MODUL IV STACK A. TUJUAN

MODUL PEMROGRAMAN 2. Queue (Antrian)

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA DOUBLE LINKED LIST CIRCULAR

# TEN Sorting PENDAHULUAN

BAB 2 SORTING (PENGURUTAN)

S TA C K Sunu Wibirama

Tumpukan (Stack) Stack bersifat LIFO (Last In First Out) LIFO Data yang terakhir masuk ke dalam stack menjadi data yang pertama keluar dari stack

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST

ARNA FARIZA YULIANA SETIOWATI

BAB IV Antrian(Queue)

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE

Pertemuan 3. Perubah Dinamis (Dinamic variable) Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

KONSEP POINTER DAN LINKED LIST

A. TUJUAN PEMBELAJARAN

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II. : Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Queue.

IX. Implementasi ADT : Stacks & Queues. Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based

DOUBLE LINKED LIST. Danang Wahyu Utomo Danang Wahyu Utomo, M.Kom, M.CS

STACK (Tumpukan) Tumpukan Koin. Tumpukan Kotak

Stack. Gambar 1.1 Stack

PRAKTIKUM ALGORITMA & PEMROGRAMAN III MODUL_06 Stack (Tumpukan)

Struktur Data II. Single Linked List - Non circular

Materi 8 : STACK (TUMPUKAN) Dosen:

JURUSAN SISTEM INFORMASI SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO PURWOKERTO 2014

SATUAN ACARA PENGAJARAN

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II. Tujuan Pembelajaran : Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Stack.

Materi 9 : QUEUE (ANTREAN) Dosen:

STRUKTUR DATA (2) Single Linked List

Tugas Studi Kasus. Linked List SLLNC dengan Head & Tail

05. Double Linked List

Pertemuan 4. Single Linked List non Circular Menggunakan Head dan Tail

Array VS Linked List

SILABUS STRUKTUR DATA ( TIF-104 ) PROGRAM STUDI TEKNIK INFORMATIKA UNIVERSITAS PEMBANGUNAN JAYA TANGERANG SELATAN

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

BAB III QUEUE (ANTRIAN)

Data structure :Metode LINK LIST. Kusnawi, S.Kom, M.Eng STMIK AMIKOM Yogyakarta

Modul Praktikum Algoritma dan Struktur Data

STRUKTUR DATA Pertemuan 1 s.d 8

Praktikum 5. Antrian (Queue)

STRUKTUR DATA single linked list non circular

MODUL 6 SINGLE & DOUBLE LINKED LIST

Tumpukan(Stack)!! " # $ %&' $ %& ( ) ( * +, / ( (

*Sekumpulan elemen yang diatur secara terurut. *Linear List tidak sama dengan Connected-List

1. Kompetensi Mengenal dan memahami struktur data Stack (tumpukan) dan Queue (antrian).

Array dan Matriks. IF2121 / Algoritma dan Struktur Data Sem / /7/2017 IF2121/sem /2018 1

Praktikum 4. Tumpukan (Stack)

A. TUJUAN PEMBELAJARAN

# FOUR LOOPING. JAWABAN 1. #include <stdio.h> #include <conio.h> #define pi void main(){

04. Single Linked List

Algoritma dan Struktur Data STACK

Algoritma Dan Struktur Data II

ARNA FARIZA YULIANA SETIOWATI

Struktur Data dan Algoritma

IF PEMROGRAMAN LANJUT TUGAS 1. Oleh : Andri Heryandi, M.T.

PERTEMUAN KE 11. Linked List. Apa Itu Linked List?

MODUL PRAKTIKUM STRUKTUR DATA. Dosen Pengampu M.Bahrul Ulum, S.Kom., M.Kom. Asisten Lab Mia Kastina PROGRAM STUDI TEKNIK INFORMATIKA

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK

Struktur Dasar Bahasa C Tipe Data Dalam bahasa C terdapat lima tipe data dasar, yaitu :

MI, KA-D3, SIA, SIB. ADI, S.Kom.

Data Structure STRUKTUR DATA QUEUE. Chapter 3. Dahlia Widhyaestoeti, S.Kom

Algoritma dan Struktur Data. Queue

Achmad Solichin.

SINGLE LINKED LIST NON CIRCULAR (SENARAI BERANTAI TUNGGAL TIDAK BERPUTAR)

BAB III METODE PENELITIAN. transmisi data streaming menggunakan Zigbee wireless network dengan

Transkripsi:

HANDOUT ALGORITMA PEMROGRAMAN DAN STRUKTUR DATA 1 PRODI SISTEM INFORMASI UKDW # NINE Queue dengan Array LANJUTAN: DOUBLE STACK dengan Array - Adalah suatu teknik khusus yang dikembangkan untuk menghemat pemakaian memori. - Intinya adalah penggunaan sebuah array untuk menampung dua stack STACK KOSONG 1 TOP MAX Visualisasi single stack dengan array STACK1 KOSONG STACK2 1 TOP[0] TOP[1] MAX Visualisasi double stack dengan array - Array dibagi dua tempat, dimana stack1 bergerak ke kanan dan stack2 bergerak ke kiri. - Jika Top[0] (elemen teratas dari stack1) bertemu dengan Top[1] (elemen teratas dari tack2) maka stack akan penuh. DEKLARASI DOUBLE STACK #define MAX 8 typedef struct{ int data[max]; Stack; Stack stack; int top[2];

OPERASI-OPERASI DALAM DOUBLE STACK - Create() o digunakan untuk menciptakan dan menginisialisasi double stack o dipanggil pada saat program pertama kali dijalankan. o dengan cara menginisialisasi top[0] dengan -1 karena elemen array pertama di C adalah 0, dan menginisialisasi top[1] dengan MAX karena elemen terakhir dari array MAX-1. 7 6 5 4 3 2 1 0 Top[1] = 8 Kondisi Kosong Top[0] = -1 void Create(){ //kosongkan stack top[0] = -1; top[1] = MAX; //top[1] = 8 karena elemen array 0-7 - IsFull() o Digunakan untuk mengecek apakah semua elemen array yang disediakan telah terisi penuh semua atau belum. o Cara: periksa nilai top[0] dan top[1], jika nilai top[0]+1 >= top[1] maka berarti batas top[0] sudah melebihi top[1] yang berarti penuh. 7 10 6 8 5 6 4 6 3 15 2 11 1 12 0 5 Top[0] = 4 Kondisi Penuh Top[1] = 4 int IsFull(){ int full = 0; if(top[0]+1 >= top[1]) full=1; return full; - IsEmpty(noStack) o Digunakan untuk mengecek apakah stack tertentu kosong atau tidak. o Dengan cara mengecek nilai top[0] untuk stack1 dan mengecek top[1] untuk stack yang kedua.

o Jika top[0] sama dengan -1 dan top[1] = MAX-1 maka kosong. 7 6 5 4 3 2 1 0 Top[1] = 8 Kondisi Kosong Top[0] = -1 int IsEmpty(int nostack){ int empty=0; if(nostack==1){ if(top[0] == 0) empty=1; else if(nostack==2){ if(top[1] == MAX) empty=1; return empty; - Push(data,noStack) o Untuk memasukkan data ke suatu stack tertentu. o Untuk setiap stack yang ada, tambah/kurangi counter untuk top yang dimaksud. o Untuk stack1 maka naikkan counter top[0] o Untuk stack2 maka kurangi counter top[1] Top[1] = 8 Top[1] = 8 7 6 7 11 6 Top[1] = 7 5 4 3 Push(23,1) 5 4 3 Push(11,2) 2 2 1 0 23 Top[0] = 0 Top[0] = -1 1 0 23 Top[0] = 0 Top[0] = -1

7 11 6 5 4 3 2 1 85 0 23 Top[1] = 8 Top[1] = 7 Push(85,1) Top[0] = 1 Top[0] = 0 void Push(int d, int nostack){ if(isfull()==0){ if(nostack == 1) top[0]++; else if(nostack == 2) top[1]--; stack.data[top[nostack-1]] = d; printf("masuk %d!",stack.data[top[nostack-1]]); - Pop(noStack) o Untuk menghapus elemen teratas dari tumpukkan stack yang dipilih berdasarkan nostack. o Jika stack1 maka kurangi counter untuk top[0], sebelumnya tampilkan nilai teratas untuk stack1 tersebut. o Jika stack2 maka tambah counter untuk top[1], sebelumnya tampilkan nilai teratas untuk stack2 tersebut. 7 11 Top[1] = 8 Top[1] = 7 7 Top[1] = 8 6 6 5 4 3 Pop (2) 5 4 3 Pop (1) 2 1 85 Top[0] = 1 2 1 85 Top[0] = 1 0 23 Top[0] = 0 0 23 Top[0] = 0 int Pop(int nostack){ int e; if(isempty(nostack)==0){ e=stack.data[top[nostack-1]]; if(nostack==1) top[0]--; else if(nostack==2) top[1]++; return e;

- Clear() o Untuk menghapus semua elemen yang ada di suatu stack sesuai dengan nostack yang ada o Dengan cara mengeset top[0] = -1 jika nostack = 1 dan top[1] = MAX jika nostack = 2 void Clear(int nostack){ if(nostack==1) top[0]=-1; else if(nostack==2) top[1]=max; - Tampil() o Digunakan untuk menampilkan elemen-elemen yang ada di stack1 dan stack2 o Untuk stack1 : buatlah looping dari 0 s/d top[0] o Untuk stack2 : buatlah looping dari MAX-1 downto top[1] void Tampil(){ int i; printf("stack 1\n"); for(i=0;i<=top[0];i++){ printf("%d ",stack.data[i]); printf("\nstack 2\n"); for(i=max-1;i>=top[1];i--){ printf("%d ",stack.data[i]); Program selengkapnya adalah sebagai berikut: #include <stdio.h> #include <conio.h> #define MAX 8 typedef struct{ int data[max]; Stack; Stack stack; int top[2]; void Create(){ //kosongkan stack top[0] = -1; top[1] = MAX; //top[1] = 8 karena elemen array 0-7

int IsFull(){ int full = 0; if(top[0]+1 >= top[1]) full=1; return full; void Push(int d, int nostack){ if(isfull()==0){ if(nostack == 1) top[0]++; else if(nostack == 2) top[1]--; stack.data[top[nostack-1]] = d; printf("masuk %d!",stack.data[top[nostack-1]]); int IsEmpty(int nostack){ int empty=0; if(nostack==1){ if(top[0] == 0) empty=1; else if(nostack==2){ if(top[1] == MAX) empty=1; return empty; int Pop(int nostack){ int e; if(isempty(nostack)==0){ e=stack.data[top[nostack-1]]; if(nostack==1) top[0]--; else if(nostack==2) top[1]++; return e; void Clear(int nostack){ if(nostack==1) top[0]=-1; else if(nostack==2) top[1]=max; void Tampil(){ int i; printf("stack 1\n"); for(i=0;i<=top[0];i++){ printf("%d ",stack.data[i]); printf("\nstack 2\n");

for(i=max-1;i>=top[1];i--){ printf("%d ",stack.data[i]); void main(){ int pil; int no; int data; Create(); do{ clrscr(); printf("1. Push\n"); printf("2. Pop\n"); printf("3. Tampil\n"); printf("4. Clear\n"); printf("5. Exit\n"); printf("pilihan = ");scanf("%d",&pil); switch(pil){ case 1: case 2: case 3: case 4: getch(); while(pil!=5); printf("stack ke (1/2) : ");scanf("%d",&no); printf("data = ");scanf("%d",&data); Push(data,no); printf("stack ke (1/2) : ");scanf("%d",&no); printf("elemen yang keluar : %d",pop(no)); Tampil(); printf("stack ke (1/2) : ");scanf("%d",&no); Clear(no); QUEUE DENGAN MENGGUNAKAN ARRAY - Queue = Antrian - Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya 3 2 1 LOKET

3 2 1 LOKET Tinggal 1 orang lain orang yang ada di Antrian Akhirnya aku maju juga, depanku dah selesai Akhirnya selesai juga, antriannya - DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian - Antrian dapat dibuat dengan menggunakan: Liniear Array dan Circular Array QUEUE DENGAN LINIEAR ARRAY - Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya - Sehingga membutuhkan variabel Head dan Tail Head = -1 Tail = -1 0 1 2 3 4 5 6 7 DEKLARASI QUEUE #define MAX 8 typedef struct{ int data[max]; int head; int tail; Queue; Queue antrian;

OPERASI-OPERASI PADA QUEUE - Create() o Untuk menciptakan dan menginisialisasi Queue o Dengan cara membuat Head dan Tail = -1 0 1 2 3 4 5 6 7 Head = -1 Antrian pertama kali Tail = -1 void Create(){ antrian.head=antrian.tail=-1; - IsEmpty() o Untuk memeriksa apakah Antrian sudah penuh atau belum o Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty o Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah o Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail Head = -1 Tail = -1 0 1 2 3 4 5 6 7 Antrian Kosong karena Tail = -1 int IsEmpty(){ if(antrian.tail==-1) return 1; else return 0;

- IsFull() o Untuk mengecek apakah Antrian sudah penuh atau belum o Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh 4 45 1 8 5 12 7 78 0 1 2 3 4 5 6 7 Head = 0 Antrian Penuh karena Tail >= MAX-1 Tail = 7 int IsFull(){ if(antrian.tail==max-1) return 1; else return 0; - Enqueue(data) o Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang o Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail 4 45 1 8 0 1 2 3 4 5 6 7 Head = 0 Tail = 2 Tail = 3 Enqueue(8) void Enqueue(int data){ if(isempty()==1){ antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]); else if(isfull()==0){ antrian.tail++; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]);

- Dequeue() o Digunakan untuk menghapus elemen terdepan/pertama dari Antrian o Dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan. o Penggeseran dilakukan dengan menggunakan looping 4 45 1 8 0 1 2 3 4 5 6 7 Head = 0 Tail = 2 Tail = 3 Dequeue() int Dequeue(){ int i; int e = antrian.data[antrian.head]; for(i=antrian.head;i<=antrian.tail-1;i++){ antrian.data[i] = antrian.data[i+1]; antrian.tail--; return e; - Clear() o Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 o Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemenelemen Antrian tidak lagi terbaca Head = -1 Tail = -1 0 1 2 3 4 5 6 7 void Clear(){ antrian.head=antrian.tail=-1; printf("data clear");

- Tampil() o Untuk menampilkan nilai-nilai elemen Antrian o Menggunakan looping dari head s/d tail void Tampil(){ if(isempty()==0){ for(int i=antrian.head;i<=antrian.tail;i++){ printf("%d ",antrian.data[i]); else printf("data kosong!\n"); Program selengkapnya: #include <stdio.h> #include <conio.h> #define MAX 8 typedef struct{ int data[max]; int head; int tail; Queue; Queue antrian; void Create(){ antrian.head=antrian.tail=-1; int IsEmpty(){ if(antrian.tail==-1) return 1; else return 0; int IsFull(){ if(antrian.tail==max-1) return 1; else return 0; void Enqueue(int data){ if(isempty()==1){ antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]);

else if(isfull()==0){ antrian.tail++; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]); int Dequeue(){ int i; int e = antrian.data[antrian.head]; for(i=antrian.head;i<=antrian.tail-1;i++){ antrian.data[i] = antrian.data[i+1]; antrian.tail--; return e; void Clear(){ antrian.head=antrian.tail=-1; printf("data clear"); void Tampil(){ if(isempty()==0){ for(int i=antrian.head;i<=antrian.tail;i++){ printf("%d ",antrian.data[i]); else printf("data kosong!\n"); void main(){ int pil; int data; Create(); do{ clrscr(); printf("1. Enqueue\n"); printf("2. Dequeue\n"); printf("3. Tampil\n"); printf("4. Clear\n"); printf("5. Exit\n"); printf("pilihan = ");scanf("%d",&pil); switch(pil){ case 1: printf("data = ");scanf("%d",&data); Enqueue(data); case 2: printf("elemen yang keluar : %d",dequeue());

case 3: Tampil(); case 4: Clear(); getch(); while(pil!=5);