Pertemuan 6 QUEUE ANTREAN PENGERTIAN QUEUE ANTREAN Struktur

  • Slides: 26
Download presentation
Pertemuan 6 QUEUE (ANTREAN)

Pertemuan 6 QUEUE (ANTREAN)

PENGERTIAN QUEUE (ANTREAN) Struktur Data Antrean (Queue) adalah suatu bentuk khusus dari List Linier

PENGERTIAN QUEUE (ANTREAN) Struktur Data Antrean (Queue) adalah suatu bentuk khusus dari List Linier dengan operasi pemasukan data hanya diperbolehkan pada salah satu sisi, yang disebut sisi Belakang / ekor (Tail) dan operasi penghapusan hanya diperbolehkan pada sisi lainnya yang disebut sisi Depan / kepala (Head) dari Linked. List. Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) “Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu”

Deklarasi Queue 0 head = -1 tail = -1 1 2 3 4 5

Deklarasi Queue 0 head = -1 tail = -1 1 2 3 4 5 6 7 Max = 8

OPERASI QUEUE • CREATE Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan

OPERASI QUEUE • CREATE Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail = -1 • ISEMPTY Untuk memeriksa apakah queue kosong • ISFULL Untuk memeriksa apakah queue sudah penuh • ENQUEUE Untuk menambahkan item pada posisi paling belakang • DEQUEUE Untuk menghapus item dari posisi paling depan • CLEAR Untuk mengosongkan queue

Fungsi Create • Digunakan untuk membentuk dan menunjukan awal terbentuknya suatu Antrean / Queue

Fungsi Create • Digunakan untuk membentuk dan menunjukan awal terbentuknya suatu Antrean / Queue Void Create() { antrian. head = antrian. tail = -1 } 0 head = -1 tail = -1 1 2 3 4 5 Antrian pertama kali 6 7 Max = 8

Fungsi Is. Empty • Untuk memeriksa apakah Antrian penuh atau kosong • Dengan cara

Fungsi Is. Empty • Untuk memeriksa apakah Antrian penuh atau kosong • Dengan cara memeriksa nilai Tail, jika Tail = -1 maka antrian kosong (empty) • 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

Int Is. Empty() { if (antrian. tail == -1) return 1; else return 0;

Int Is. Empty() { if (antrian. tail == -1) return 1; else return 0; } 0 head = -1 tail = -1 1 2 3 4 5 Antrian kosong Karena tail = -1 6 7 Max = 8

Fungsi Is. Full • Untuk mengecek apakah Antrian sudah penuh atau belum • Dengan

Fungsi Is. Full • Untuk mengecek apakah Antrian sudah penuh atau belum • Dengan cara : - Mengecek nilai Tail - Jika tail = MAX-1 berarti antrian sudah penuh (MAX-1 adalah batas elemen array dalam program C++)

Int Is. Full() { if (antrian. tail == Max-1) return 1; else return 0;

Int Is. Full() { if (antrian. tail == Max-1) return 1; else return 0; } 5 10 35 20 15 30 40 25 0 1 2 3 4 5 6 7 head = 0 Antrian penuh karena Head = 0 tail = max - 1 tail = 7 Max = 8

Fungsi Enqueue • Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu dilakukan pada

Fungsi Enqueue • Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu dilakukan pada elemen paling belakang • Penambahan elemen selalu menggerakan variabel Tail dengan cara menambahkan Tail terlebih dahulu Ilustrasi Enqueue 5 10 0 1 head Enqueue(45) 35 20 15 30 2 3 4 5 tail 6 7

Fungsi Dequeue • Digunakan untuk menghapus elemen terdepan (head) dari Antrian • Dengan cara

Fungsi Dequeue • Digunakan untuk menghapus elemen terdepan (head) dari Antrian • Dengan cara : menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1. Penggeseran dilakukan dengan menggunakan looping Ilustrasi Dequeue 5 0 head 10 35 1 2 20 15 3 4 45 5 tail 6 7

Fungsi Clear • Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head =

Fungsi 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 sehingga mengembalikan antrian seperti keadaan semula

Ilustrasi Clear 5 -1 10 0 35 20 1 2 3 15 45 4

Ilustrasi Clear 5 -1 10 0 35 20 1 2 3 15 45 4 5 head 6 7 tail Antrian setelah di lakukan Clear 0 head = -1 tail = -1 1 2 3 4 5 Antrian kosong Karena tail = -1 6 7 Max = 8

#include <stdio. h> #include <string. h> #include <conio. h> struct nilai. Mat. Kul{ char

#include <stdio. h> #include <string. h> #include <conio. h> struct nilai. Mat. Kul{ char nim[10]; char nama[50]; float nilai; }; struct queue{ int first; int last; nilai. Mat. Kul data[10]; }; void create. Empty(queue *Q){ (*Q). first = -1; (*Q). last = -1; } bool is. Empty(queue Q){ bool hasil = false; if(Q. first == -1){ hasil = true; } return hasil; } bool is. Full(queue Q){ bool hasil = false; if(Q. last == 9){hasil = true; } return hasil; } void Enqueue (char nim[], char nama[], float nilai, queue *Q ){ if(is. Empty(*Q) == true){ /* jika queue kosong */ (*Q). first = 0; (*Q). last = 0; strcpy((*Q). data[0]. nim, nim); strcpy((*Q). data[0]. nama, nama); (*Q). data[0]. nilai = nilai; } else{ /* jika queue tidak kosong */ if(is. Full(*Q) != true){ (*Q). last = (*Q). last + 1; strcpy((*Q). data[(*Q). last]. nim, nim); strcpy((*Q). data[(*Q). last]. nama, nama); (*Q). data[(*Q). last]. nilai = nilai; } else{ printf("queue penuhn"); } } }

void Dequeue(queue *Q){ if((*Q). last == 0){ (*Q). first = -1; (*Q). last =

void Dequeue(queue *Q){ if((*Q). last == 0){ (*Q). first = -1; (*Q). last = -1; } else{ /*menggeser elemen ke depan*/ int i; for(i=((*Q). first + 1); i<=(*Q). last; i++){ strcpy((*Q). data[i-1]. nim, (*Q). data[i]. nim); strcpy((*Q). data[i-1]. nama, (*Q). data[i]. nama); (*Q). data[i-1]. nilai = (*Q). data[i]. nilai; } (*Q). last = (*Q). last - 1; } } void print. Queue(queue Q){ if(Q. first != -1){ printf("------isi queue------n"); int i; for(i=Q. last; i>=Q. first; i--){ printf("==========n"); printf("elemen ke : %dn", i); printf("nim : %sn", Q. data[i]. nim); printf("nama : %sn", Q. data[i]. nama); printf("nilai : %fn", Q. data[i]. nilai); } printf("-----------n"); } else{ /* proses jika queue kosong */ printf("queue kosongn"); } }

main(){ queue Q; create. Empty(&Q); print. Queue(Q); printf("=========n"); Enqueue("13507701", "Nana", 64. 75, &Q); Enqueue("13507702",

main(){ queue Q; create. Empty(&Q); print. Queue(Q); printf("=========n"); Enqueue("13507701", "Nana", 64. 75, &Q); Enqueue("13507702", "Rudi", 75. 11, &Q); Enqueue("13507703", "Dea", 84. 63, &Q); print. Queue(Q); printf("=========n"); Dequeue (&Q); print. Queue(Q); create. Empty(&Q); print. Queue(Q); Enqueue("13507701", "Nana", 64. 75, &Q); Enqueue("13507702", "Rudi", 75. 11, &Q); Enqueue("13507703", "Dea", 84. 63, &Q); print. Queue(Q); Dequeue (&Q); print. Queue(Q); printf("=========n"); getch(); } HASIL PROGRAM

Latihan Soal I Struktur Data (Pertemuan 6) 1. 2. Prinsip antrian adalah a. First

Latihan Soal I Struktur Data (Pertemuan 6) 1. 2. Prinsip antrian adalah a. First In First Out d. Never In First Out b. First Out First In e. Last Out Last In c. Last In First Out Bentuk deklarasi manipulasi linked list harus menggunakan suatu pointer penunjuk ke node pertama (Head) dalam linked list yaitu? a. TNode *head *Node b. Head *TNode c. Head *TNode *head d. TNode *head e. Memeriksa apakah antrian sudah kosong

3. Yang tidak termasuk dalam operasi antrian, adalah. . . a. Clear d. Push

3. Yang tidak termasuk dalam operasi antrian, adalah. . . a. Clear d. Push b. Enqueue e. Dequeue c. Is. Full 4. Menghapus elemen dari antrian dilakukan dari posisi : a. Tengah / Middle d. Belakang / Tail b. Depan / Head e. Atas / Top c. Bawah / bottom

4. Menghapus elemen dari antrian dilakukan dari posisi : a. Tengah / Middle d.

4. Menghapus elemen dari antrian dilakukan dari posisi : a. Tengah / Middle d. Belakang / Tail b. Depan / Head e. Atas / Top c. Bawah / bottom 5. Maksud dari perintah program antrian. head=antrian. tail=-1; adalah untuk. . . a. Menambah elemen antrian b Mengecek kondisi antrian kosong atau tidak c. Mengecek kondisi antrian penuh atau tidak d. Membentuk atau menghapus semua elemen antrian e. Menghapus elemen antrian

5. Maksud dari perintah program antrian. head=antrian. tail=-1; adalah untuk. . . a. Menambah

5. Maksud dari perintah program antrian. head=antrian. tail=-1; adalah untuk. . . a. Menambah elemen antrian b Mengecek kondisi antrian kosong atau tidak c. Mengecek kondisi antrian penuh atau tidak d. Membentuk atau menghapus semua elemen antrian e. Menghapus elemen antrian 1. Operasi pada Antrian yang digunakan untuk menambahkan item pada posisi paling belakang, adalah … a. Create d. Enqueue b. Clear e. Dequeue c. Tail

Latihan II Struktur Data (Pertemuan 6) Berikan gambaran/ilustrasi dari kasus antrian berikut : •

Latihan II Struktur Data (Pertemuan 6) Berikan gambaran/ilustrasi dari kasus antrian berikut : • Diketahui suatu Antrian/queue dgn max = 6. • Lakukan Enqueue 4 elemen ke dalam antrian, dimanakah posisi Head dan Tail ? • Kemudian lakukan Dequeue 2 elemen dari antrian. Maka dimana posisi Head dan Tail ? • Dari keadaan diatas, bagaimanakah kondisi Is. Full dan Is. Empty nya ? • Lakukan Enqueue 4 data dan Dequeue 2 data dengan program C++ (hasilnya di print screen)!

#include <stdio. h> #include <conio. h> #include <iostream. h> #define MAX 6 typedef struct{

#include <stdio. h> #include <conio. h> #include <iostream. h> #define MAX 6 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, Sudah Masuk!", antrian. data[antrian. tail]); void tampil(); { int i; if (isempty()==0) { for(i=antrian. head; i<=antrian. tail; i++) { printf(" %d ", antrian. data[i]); } } else printf("n**** QUEUE IS EMPTY ****n"); } } else if(isfull()==0) { antrian. tail++; antrian. data[antrian. tail]=data; printf("%d , Sudah Masuk!", antrian. data[antrian. tail]); } else{ if(isfull()==1) { cout<<"nn**** QUEUE IS FULL , data TIDAK dapat masuk ****"; } } gotoxy(25, 8); cout<<"PRESS any key for back to MENU"; }

int dequeue() { if (isempty()==1){ cout<<"n**** ERROR : : QUEUE IS EMPTY ****"; }else

int dequeue() { if (isempty()==1){ cout<<"n**** ERROR : : QUEUE IS EMPTY ****"; }else if(isempty()==0){ 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--; cout<<"nn. Data Yang Keluar => "<<e; } gotoxy(25, 8); cout<<"PRESS any key for back to MENU"; } void clear() { antrian. head=antrian. tail=-1; printf("nn**** DATA CLEAR ****"); gotoxy(25, 8); cout<<"PRESS any key for back to MENU"; } void tampil(){ int i; if(isempty()==0) { cout<<"Data Yang ada Dalam QUEUE : "<<endl; for(i=antrian. head; i<=antrian. tail; i++) { printf("| %d |", antrian. data[i]); } } else { printf("n**** QUEUE IS EMPTY ****n"); } gotoxy(25, 8); cout<<"PRESS any key for back to MENU"; } void main(){ int pil; int data; create(); do { clrscr(); gotoxy(25, 2); cout<<"====MENU PILIHAN===="<<endl; gotoxy(25, 4); cout<<"=============="<<endl; gotoxy(30, 6); cout<<" 1. ENQUEUE "<<endl; gotoxy(30, 7); cout<<" 2. DEQUEUE "<<endl; gotoxy(30, 8); cout<<" 3. TAMPILAN "<<endl; gotoxy(30, 9); cout<<" 4. CLEAR "<<endl; gotoxy(30, 10); cout<<" 5. KELUAR "<<endl; gotoxy(25, 12); cout<<"=============="<<endl ; gotoxy(25, 14); cout<<" Masukan Pilihan Anda => "; cin>>pil;

switch(pil){ case 1: clrscr(); printf("nn Masukan Data => "); scanf("%d", &data); enqueue(data); break; case

switch(pil){ case 1: clrscr(); printf("nn Masukan Data => "); scanf("%d", &data); enqueue(data); break; case 2: clrscr(); dequeue(); break; case 3: clrscr(); cout<<endl; tampil(); break; case 4: clrscr(); clear(); break; case 5: clrscr(); gotoxy(25, 8); cout<<"**** TERIMA KASIH ****"<<endl; break; } getch(); } while(pil!=5); }