Queueu
A. Pengertian Queue
- Queue Merupakan struktur data dengan konsep First In First Out (FIFO)
- Data yang disimpan pertama akan diambil/dikeluarkan terlebih dahulu.
- Implementasi Queue dapat menggunakan array atau linked list
- Pada implementasi Queue dengan Array, kemungkinan Queue bisa penuh
- Pada implementasi Queue dengan linked list, Queue tidak pernah penuh.
B. Pengertian Bilangan Biner
Bilangan biner merupakan jenis bilangan yang hanya terdiri dari 2 jenis angka, yakni 0 dan 1
C. Operasi Shift pada Biner?
operasi shift pada bahasa C/C++ adalah operasi yang akan menggeser posisi bit dalam suatu variabel ke kiri/kanan sebanyak n kali. Salah satu contoh penggunan operasi shift adalah sebagai berikut :
misalnya, nilai variabel x adalah 10, maka bilangan binernya adalah 1010. Apabila kita akan menggunakan shift right “>>” sebanyak 2. Maka nilai bit dari variabel yang semula adalah 1010 maka akan menjadi 0010. Karena telah terjadi pergeseran bit sebanyak 2 kali ke kanan. Dapat dituliskan sebagai berikut :
x = 10 (desimal) = 1010 (biner)
x >> 2 = 0010 (biner) = 2 (desimal)
kemudian bagaimana mengimplementasikan program bahasa C++ untuk melakukan shift dengan menggunakan queue, berikut pogramnya :
Program Shift Biner
#include
#include
#define MAX 10
using namespace std;
typedef int Itemtype;
typedef struct
{
Itemtype item[MAX];
int front;
int rear;
int count;
} Queue;
void Inisialisasi(Queue* q)
{
q->count = 0;
q->front = 0;
q->rear = 0;
}
int Penuh(Queue* q)
{
return (q->count == MAX);
}
int Kosong(Queue* q)
{
return (q->count == 0);
}
void Enqueue(Queue* q, Itemtype x)
{
if (Penuh(q))
printf("Queue penuh\n");
else
{
q->item[q->rear] = x;
q->rear = (q->rear+1) % MAX;
q->count++;
}
}
Itemtype Dequeue(Queue* q)
{
Itemtype tmp;
if (Kosong(q)){
printf("Queue kosong\n");
return ' ';
}
else
{
tmp = q->item[q->front];
q->front = (q->front+1) % MAX;
q->count--;
return tmp;
}
}
Itemtype Shift(Queue* q, int n, int s)
{
Itemtype tmp = 0;
// proses merubah desimal menjadi biner
while (n > 0)
{
Enqueue(q, n % 2);
n = n/2 ;
}
// proses mengeluarkan angka sebanyak jumlah shift
for (int i = 0; i < s; i++){
Dequeue(q);
}
//proses merubah biner ke desimal
int e = 0;
while (!Kosong(q))
{
tmp += Dequeue(q) * pow(2.0, e);
e++;
}
return tmp;
}
int main()
{
Queue queue;
Inisialisasi(&queue);
int bil, shift;
cout << "\t\tMasukkan bilangan desimal : ";
cin >> bil;
cout << "\t\tMasukkan jumlah shift : ";
cin >> shift;
cout << "\t\tBilangan desimal setelah shift adalah : ";
std::cout << Shift(&queue, bil, shift);
return 0;
}
0 komentar:
Posting Komentar