Anda di halaman 1dari 19

Pengertian Queue Jika diartikan secara harafiah, queue berarti antrian, queue merupakan salah satu contoh aplikasi

dari pembuatan double linked list yang cukup sering kita temui dalam kehiduypan sehari-hari, misalnya saat Anda mengantri di loket untuk membeli tiket. Antrian dapat di implementasikan menggunakan Array, disini dijelaskan ada 10 antrian yang mana 10 antrian tersebut dapat diibaratkan sebagai array berindek 10. Dalam antrian ini menggunakan pola FIFO, yaitu first in first out yang artinya pembeli tiket yang pertama dilayani terlebih dahulu dan begitu seterusnya sampai habis. Macam-macam Operasi Queue dengan Linear Array:
y

y y

IsEmpty Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. hal ini dilakukan dengan mengecek apakah tail bernilai -1 atau tidak. Nilai -1 menandakan bahwa queue masih kosong. IsFull Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bias menampung data dengan cara mengecek apakah nilai tail sudah sama dengan jumlah maksimal queue. Jika nilai keduanya sama, berarti queue sudah penuh. EnQueue Fungsi EnQueue berguna untuk memasukkan sebuah elemen dalam queue. DeQueue Fungsi DeQueue berguna untuk mengambil sebuah elemen dari queue. Operasi ini sering disebut juga serve. Hal ini dilakukan dengan cara memindahkan sejauh satu langkah ke posisi di depannya sehingga otomatis elemen yang paling depan akan tertimpa dengan elemen yang terletak di belakangnya. Clear Fungsi Clear berguna untuk menghapus semua lemen dalam queue dengan jalan mengeluarkan semua elemen tersebut satu per satu hingga queue kosong dengan memanfaatkan fungsi DEQueue.

Program antrian Bank #include <stdio> #include <conio> #define MAX 6 #include<string.h> 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; } //fungsi memasukkan data void Enqueue(int data){ if(IsEmpty()==1){ antrian.head=antrian.tail=0; antrian.data[antrian.tail]=data; printf("\t Silahkan Masuk !! \n",antrian.data[antrian.tail]); void Tampil(); { if(IsEmpty()==0){ for(int i=antrian.head;i<=antrian.tail;i++){ printf("%d ",antrian.data[i]); } }else printf("data kosong!"); }; }else if(IsFull()==0){ antrian.tail++; antrian.data[antrian.tail]=data; printf("\t Silahkan Masuk !! \n",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() { int jum; jum=0; if(IsEmpty()==0){ for(int i=antrian.head;i<=antrian.tail;i++){ jum++; printf("\n| %d |",antrian.data[i]);} printf("\njumlah yang mengantri saat ini %i orang",jum); }else printf("Data Kosong!\n");} //sebagai nasabah void nasabah() { int data; char lagi; do{ clrscr(); printf("\t+=================================+\n"); printf("\t| menu nasabah |\n"); printf("\t+=================================|\n"); printf("\t| tekan (a) untuk masukkan data |\n"); printf("\t| tekan (b) melihat data antrian |\n"); printf("\t| tekan (x) keluar |\n"); printf("\t+=================================|\n"); printf("pilihan : "); scanf("%c",&lagi); if((lagi=='x') || (lagi=='X')) { printf("terima kasih\n"); break; } switch(lagi) { case 'a': printf("masukkan data: "); scanf("%d",&data); Enqueue(data); break;

case 'b': Tampil(); break; }getch(); } while(lagi !='x'); getche(); } //memasukkan password void password() { char nama[20], id[10], password[4]; int i; { clrscr(); atas: clrscr(); printf("\t\t+===============================================+\n"); printf("\t\t| S E L A M A T D A T A N G |\n"); printf("\t\t| jika anda admin dari teller |\n"); printf("\t\t|Silahkan masukkan User Name & 3 digit Password |\n"); printf("\t\t+===============================================+\n"); printf("\t\t UserName : ") ; cin>>nama; printf("\t\t No. Identitas : "); cin>>id; printf("\t\t Password : ") ; for(i=0; i<=2; i++) {password[i]=getche(); printf("\bX"); } printf("\n\t\t+=============================================+\n"); if (strcmp(password,"aaa")==0) { printf("\n\n\t\t Anda Masuk Sebagai TEllER\n"); printf("\t\t User : %s \n",nama); printf("\t\t No. Identitas : %s\n",id); printf("\n\n\t\tTekan Sembarang tombol untuk ke menu teller..!"); goto bawah; } else { printf("\t\t\tpassword salah bro...hahaaa\n"); printf("\t\tketik sembarang tombol untuk kembali ke menu: "); goto atas; } bawah: getch();

} } //void teller void teller() {char menu; password(); do{ clrscr(); printf("\t\t+=================================+\n"); printf("\t\t| menu pilihan untuk TELLER |\n"); printf("\t\t+=================================+\n"); printf("\t\t| tekan (a) untuk menghapus data |\n"); printf("\t\t| tekan (b) melihat data antrian |\n"); printf("\t\t| tekan (c) untuk mereset |\n"); printf("\t\t| tekan (x) untuk keluar |\n"); printf("\t\t+=================================+\n"); printf("pilihan : "); scanf("%c",&menu); if((menu=='x') || (menu=='X')) { printf("terima kasih\n"); break; } switch(menu) { case 'a': printf("Elemen yang keluar : %d",Dequeue()); break; case 'b': Tampil(); break; case 'c': clear(); break; }getch(); } while(menu !='x'); } void main(){ char pil;

Create(); do{ clrscr(); fflush(stdin); printf("\t\t+=====================================+\n");

printf("\t\t| Bank Republik Indonesia|\n"); printf("\t\t| jalan Menukan |\n"); printf("\t\t| Yoggyakarta |\n"); printf("\t\t+=====================================+\n"); printf("\t\t| tekan (n) untuk Nasabah |\n"); printf("\t\t| tekan (t) untuk Teller |\n"); printf("\t\t| tekan (k) keluar dari program |\n"); printf("\t\t+=====================================+\n"); printf("pilihan : "); scanf("%c",&pil); if((pil=='k') || (pil=='k')) { printf("terima kasih"); break; } switch(pil) { case 'n': nasabah(); break; case 't': teller(); break; } }while(pil!='k'); }

Program Selection Sort dengan Maximum dan Minimum


01:34 Lukmanquw No comments #include <iostream.h> #include <conio.h> int main(){ int a[10]; int cur,z,temp,cur2,temp2; cout<<"Banyak Data: "; cin>>z; cout<<endl; for(int i=0;i<z;i++){ cout<<"Data ["<<i+1<<"]: "; cin>>a[i];

} cout<<"\nData Awal :"; for(int i=0;i<z;i++) cout<<a[i]<<" "; cout<<endl; for(int i=0;i<z;i++){ cur=i; cur2=z; for(int k=i+1;k<z;k++){ if(a[cur]>a[k]){ cur=k; }} for(int t=z;t<z;t--){ if(a[cur2]<a[t]){ cur2=t; } temp2=a[t]; a[t]=a[cur2]; a[cur2]=temp2; } temp=a[i]; a[i]=a[cur]; a[cur]=temp; } cout<<"\nData Akhir :"; for(int i=0;i<z;i++){ cout<<" "<<a[i]; } cout<<endl; getch (); return 0; }

Penjelasannya: Untuk proses dengan minimum dapat dilihat di for(int k=i+1;k<z;k++){ if(a[cur]>a[k]){ cur=k;... sedangkan untuk pengurutan dengan cara maximum dapat dilihat di

for(int t=z;t<z;t--){ if(a[cur2]<a[t]){ cur2=t;... intinya jika menggunakan teknik minimum kita memulai pembandingan dari kiri (array pertama) sedangkan untuk maksimum memulai pembandingan dari kanan.....

Coding Antrian Bank Dengan Notepad++

Belum lama ini saya mendapat tugas dari kampus untuk membuat sebuah program antrian bank dengan menggunakan notepad++ dan metode Queue. Setelah proses panjang akhirnya tugas saya pun bisa kelar dan saya bisa mengumpulkan tugas tersebut tepat waktu. Dan semoga nilai saya besok bisa keluar dan hasilnya memuaskan (amin). Kali ini saya akan berbagi coding tersebut kepada temen2, semoga bisa bermanfaat. Seperti yang kita ketahui, Queue adalah kumpulan data dengan penambahan data hanya melalui satu sisi, yaitu belakang (tail) dan penghapusan data hanya melalui sisi depan (head). Queue ini bersifat FIFO(First In First Out), maksudnya data yang pertama masuk akan keluar terlebih dahulu dan data yang terakhir masuk akan keluar terakhir. Dan berikut ini adalah coding untuk membuat antrian bank #include #include #define MAX 8 typedef struct{ int antri[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 antri){ if(IsEmpty()==1){ antrian.head=antrian.tail=0; antrian.antri[antrian.tail]=antri; printf("%d masuk!",antrian.antri[antrian.tail]); } else if(IsFull()==0){ antrian.tail++; antrian.antri[antrian.tail]=antri; printf("%d masuk!",antrian.antri[antrian.tail]); } } int Dequeue(){ int i; int e = antrian.antri[antrian.head]; for(i=antrian.head;i<=antrian.tail-1;i++){ antrian.antri[i] = antrian.antri[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.antri[i]); } }else printf("data kosong!\n"); } void main() {

int pil; int antri; Create(); do{ clrscr(); printf("1. masuk antrian\n"); printf("2. keluar antian\n"); printf("3. Tampil\n"); printf("4. Clear\n"); printf("5. exit\n"); printf("Pilihan = "); scanf("%d",&pil); switch(pil){ case 1: printf("masuk antrian ke ");scanf("%d",&antri); Enqueue(antri); break; case 2: printf("keluar antrian yang ke : %d",Dequeue()); break; case 3: Tampil(); break; case 4: Clear(); break; } getch(); } while(pil!=5); }

Queue (antrian) dalam C++


07:33 Blog Tugas dan Informasi No comments Queue merupakan kumpulan data yang penambahan elemennya hanya bisa dilakukan pada sisi belakang dan penghapusannya hanya bisa dilakukan pada sisi depan. Konsep utamanya berkebalikan dari stack (tumpukan), yaitu First In First Out. Contoh : orang antri beli tiket ke bioskop, Mahasiswa antri bayar KRS atau pun nasabah menganti di bank. Implementasi antrian menggunakan dua pointer, yaitu pointer yang menunjukkan elemen terdepan dan elemen terakhir. Operasi antrian 1. Menambah elemen baru pada bagian belakang antrian 2. Menghapus elemen baru pada bagian depan antrian 3. Melakukan pengecekan apakah antrian kosong. tidak mungkin menghapus antrian yang sudah kosong.

Nah, pada program ini melakukan kalkulasi antrian FIFO (Firs In First Out). Namun dalam

program ini tidak menggunakan Function untuk memisahkan proses. Cara kerja dari program ini adalah dengan menampilkan 5 menu pilihan diantaranya adalah : Push Pop Tampilkan Data Bersihkan Data Keluar Program dengan definisi sebagai berikut : Push Memasukkan satu data ke dalam proses antrian. Bila antrian penuh maka akan ditampilkan sebuah peringatan bahwa data antrian penuh. Bila antrian kosong maka akan diminta memasukkan 1 data untuk menjalani antrian. Pop Mengeluarkan satu data dari antrian. Data yang dikeluarkan adalah data yang pertama kali dimasukkan. Dan untuk antrian sebelumnya akan menempati antrian yang di keluarkan. Bila data dalam antrian kosong, maka akan ditampilkan peringatan bahwa data antrian kosong. Tampilkan Data Digunakan untuk menampilkan semua data dalam antrian. Bersihkan Data Digunakan untuk membersihkan data / menghapus semua data yang ada di dalam antrian. Bila data dalam antrian kosong, maka akan ditampilkan peringatan bahwa data kosong. Bila akan melakukan pembersihan data maka akan ditampilkan peringatan apakah yakin akan menhapus. Bila dipilih Y maka data tersebut semua akan dihapus, bila memilih N maka akan dikembalikan ke pilihan menu. Berikut syntax programnya dalam bahasa C++:#include <iostream>

using namespace std; int main(){ int antrian[]={0,0,0,0,0}; int menu, properties; char konfirmasi; cout << "================== MENU PILIHAN ANTRIAN FIFO ==================" << endl;

cout << "== 1. Push / Masukkan Data ==" << endl; cout << "== 2. Pop / Keluarkan Data ==" << endl; cout << "== 3. Tampilkan Data ==" << endl; cout << "== 4. Bersihkan Data ==" << endl; cout << "== 5. Keluar Program ==" << endl; cout << "===============================================================" << endl; cout << "Syarat dan Ketentuan Berlaku : " << endl; cout << "- Data Maksimal 5 " << endl; cout << "- Data Masukan Harus Berupa Angka selain 0 (nol) " << endl; cout << "===============================================================" << endl; properties = 0; while (properties == 0){ cout << "Silahkan pilihan menu = "; cin >> menu; switch (menu) { case 1 : if(antrian[0] != 0){ cout << "Maaf data antrian penuh, Anda tidak bisa melakukan PUSH" << endl; cout << "==========================================================" <<endl; } else { for (int an=4 ; an>=0 ; an--){ if (antrian[an] == 0){ cout << "Masukkan Angka = "; cin >> antrian[an]; cout << "==========================================================" <<endl; break; } } } break; case 2 : if(antrian[4] == 0){ cout << "Maaf data antrian kosong, Anda tidak bisa melakukan POP" << endl; cout << "==========================================================" <<endl; } else { int dataAkhir; dataAkhir = antrian[4]; for (int an=4 ; an>=1 ; an--){ antrian[an] = antrian[an-1];

} antrian[0] = 0; cout << "Data yang dikeluarkan adalah = " << dataAkhir <<endl; cout << "==========================================================" <<endl; } break; case 3 : cout << "Data yang ada dalam antrian adalah = " << endl; for(int as=0 ; as<=4 ; as++){ cout << "Data ke-" << as; cout << " adalah = " << antrian[as] << endl; } cout << "==========================================================" <<endl; break; case 4 : if(antrian[4] == 0){ cout << "Maaf data antrian kosong, Tidak ada data yang akan dihapus" << endl; cout << "==========================================================" <<endl; } else { cout << "Data yang ada dalam antrian akan dihapus, Apakah yakin (Y/N) = " << endl; cin >> konfirmasi; if (konfirmasi == 'Y' || konfirmasi == 'y'){ for(int as=0 ; as<=4 ; as++){ antrian[as] = 0; } cout << "Data telah terhapus !" << endl; cout << "==========================================================" <<endl; } } break; case 5 : properties = 1; cout << "" << endl; cout << " ========= $$$$$$$$$$$$$$$$$$$$$$$$$$ =========" << endl; cout << " === ===" << endl; cout << "=== Anda telah keluar dari program antrian FIFO ===" << endl; cout << "=== Terima Kasih ===" << endl; cout << " === ===" << endl; cout << " ========= $$$$$$$$$$$$$$$$$$$$$$$$$$ =========" << endl; break; default : cout << "Maaf pilihan Anda tidak ada dalam Menu" <<endl; break;

} } return 0; }

Antrian (Queue) dapat diartikan sebagai suatu kumpulan data yang seolah-olah terlihat seperti ada data yang diletakkan di sebelah data yang lain seperti pada gambar 01. Pada gambar, data masuk melalui lorong di sebelah kanan dan masuk dari terowongan sebelah kiri. Hal ini membuat antrian bersifat FIFO (First In First Out), beda dengan stack yang berciri LIFO.

Antrian dapat dibuat baik dengan array maupun dengan struct. Pada pembuatan antrian dengan array, antrian yang disajikan bersifat statis. Ini disebabkan oleh jumlah maksimal array sudah ditentukan sejak deklarasi awal 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

Create() Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail = -1 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

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

Enqueue(data) 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

Dequeue() Digunakan untuk menghapus elemen terdepan/pertama dari Antrian Dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan. Penggeseran dilakukan dengan menggunakan looping

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 elemenelemen Antrian tidak lagi terbaca

Print() Untuk menampilkan nilai-nilai elemen Antrian Menggunakan looping dari head s/d tail Perbedaan antara stack dan queue terdapat pada aturan penambahan dan penghapusan elemen. Pada stack, operasi penambahan dan penghapusan elemen dilakukan di satu ujung. Elemen yang terakhir kali dimasukkan akan berada paling dekat dengan ujung atau dianggap paling atas sehingga pada operasi penghapusan, elemen teratas tersebut akan dihapus paling awal, sifat demikian dikenal dengan LIFO. Pada queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen selalu dilakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling awal atau elemen terdepan. Sifat yang demikian dikenal dengan FIFO. contoh program: #include <iostream.h> #include <stdio.h> #include <conio.h> #define MAX 10 28 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; cout<<"Data "<<antrian.data[antrian.tail]<<" Masuk!!"; } else if(IsFull()==0) { antrian.tail++; antrian.data[antrian.tail]=data; cout<<"Data "<<antrian.data[antrian.tail]<<" Masuk!!"; } else if (IsFull() == 1) { cout<<"Ruangan Penuh!!"<<endl; cout<<data<<" Ga Bisa Masuk!!"; } } 29 void Dequeue() { int i;

int e = antrian.data[antrian.head]; if (antrian.tail == -1) { cout<<"Ga Ada Antrian... Data Kosong"<<endl; } else { for(i=antrian.head;i<=antrian.tail-1;i++) { antrian.data[i] = antrian.data[i+1]; } antrian.tail--; cout<<"Data yang Keluar lebih dulu = "<<e<<endl; } } void Clear() { antrian.head=antrian.tail=-1; cout<<"Duh Lega, Ruangan Jadi Ga Sumpek...."<<endl; cout<<"Data Clear..."; } void Tampil() { if(IsEmpty()==0) { cout<<"Data Dalam Antrian"<<endl; cout<<"==========================="<<endl; cout<<endl; for(int i=antrian.head;i<=antrian.tail;i++) { cout<<"| "<<antrian.data[i]<<" |"; } } else cout<<"Ga Ada Antrian... Data Kosong"; } void main() { int pil; int data; Create(); do { clrscr(); cout<<"Implementasi Antrian dengan Struct"<<endl; cout<<"=================================="<<endl; cout<<endl;

30 cout<<"1. Enqueue(Push)"<<endl; cout<<"2. Dequeue(PoP)"<<endl; cout<<"3. Print"<<endl; cout<<"4. Clear"<<endl; cout<<"5. Exit"<<endl; cout<<"Pilihan Anda= "; cin>>pil; switch(pil) { case 1: { cout<<endl; cout<<"Data = "; cin>>data; Enqueue(data); break; } case 2: { cout<<endl; Dequeue(); break; } case 3: { cout<<endl; Tampil(); break; } case 4: { cout<<endl; Clear(); break; } } getch(); } while(pil!=5); }