CONTOH PROGRAM QUEUE MENGGUNAKAN SHIFT MEMAKAI BAHASA c++

Disini, saya akan memberi 2 source code program queue. Program yang pertama ini. Pada program ini, kita bisa menginputkan bilangan desimal yang nantinya akan menjadi biner. Kemudian, bilangan biner itu akan melakukan proses dequeue lalu enqueue sebanyak shift. Berikut ini source code nya: 


#include <stdio.h>
#include <math.h>
#define MAX 10

typedef int Itemtype;

typedef struct
{
Itemtype item[MAX];
int front;
int rear;
int count;
} Queue;

void Init(Queue* q)
{
q->count = 0;
q->front = 0;
q->rear = 0;
}

int isFull(Queue* q)
{
return q->count == MAX;
}

int isEmpty(Queue* q)
{
return q->count == 0;
}

void Enqueue(Queue* q, Itemtype x)
{
if (isFull(q))printf("Queue penuh\n");
else
{
q->item[q->rear] = x;
q->rear = ++q->rear % MAX;
q->count++;
}
}

Itemtype Dequeue(Queue* q)
{
Itemtype tmp = -1;
if (isEmpty(q))printf("Queue is full\n");
else
{
tmp = q->item[q->front];
q->front = ++q->front % MAX;
q->count--;
}
return tmp;
}

Itemtype OpShift(Queue* q, int n, int s)
{
Itemtype tmp = 0;
while (n > 0)
{
Enqueue(q, n % 2);
n /= 2;
}
for (int i = 0; i < s; i++)
Enqueue(q, Dequeue(q));
int e = 0;
while (!isEmpty(q))
{
tmp += Dequeue(q) * pow(2.0, e);
e++;
}
return tmp;
}
void header()
{
  printf("\n\n");
  printf("\t\t+------------------------------------------------+\n");
  printf("\t\t|                                                |\n");
  printf("\t\t|       -Program Operasi Shit Dengan Queue-      |\n");
  printf("\t\t|                                                |\n");
  printf("\t\t+------------------------------------------------+\n\n\n");
}
int main()
{
header();
Queue queue;
Init(&queue);
int bil, shift;
printf("\t\tMasukkan bilangan desimal  : ");
scanf("%d", &bil);
printf("\t\tMasukkan jumlah shift      : ");
scanf("%d", &shift);
printf("\t\tBilangan desimal setelah shift adalah : %d\n\n", OpShift(&queue, bil, shift));
return 0;
}

OUTPUT :



PEMBAHASAN:

Dari bilangan desimal 25 dikonversikan menjadi biner menjadi 11001

setelah dikonversikan, maka program di shift sebanyak 2x

11001 —> shift pertama, angka 1 yang terakhir di dequeue lalu di enqueue sehingga menjadi 11100

11100 —> shift kedua, angka 0 yang terakhir di dequeue lalu di enqueue sehingga menjadi 01110


setelah selesai menjadi bilangan biner 01110 akan dikonversikan menjadi desimal yaitu  14.





Untuk program kedua, saya akan memberikan source code queue menggunakan shift, namun ada sedikit perbedaan. Berikut ini source codenya:

#include <stdio.h>
#include <iostream>
#include <conio.h>
#define MAX

using namespace std;

typedef struct{
    int data[MAX];
    int front;
    int rear;
   }Queue;
   Queue antrian;

void Create(){
   antrian.front=antrian.rear=-1;
   }

int IsEmpty(){
   if(antrian.rear==-1)
       return 1;
   else
       return 0;
   }

int IsFull(){
    if(antrian.rear==MAX-1)
        return 1;
    else
        return 0;
}

Enqueue(int data)//memasukkan data
{
        if(IsEmpty()==1)
        {
            antrian.front=antrian.rear=0;
            antrian.data[antrian.rear]=data;
        } else
        if(IsFull()==0)
        {
            antrian.rear++;
            antrian.data[antrian.rear]=data;
        }
}

int Dequeue()//mengeluarkan data
{
        int i;
        int e = antrian.data[antrian.front];
        for(i=antrian.front; i<=antrian.rear-1;i++)
        {
            antrian.data[i]=antrian.data[i+1];
        }
        antrian.rear--;
        return e;
}

void Clear()//menghapus data
{
    antrian.front=antrian.rear=-1;
    printf("CLEAR");
}

void Tampil()//menampilkan data
{
    if(IsEmpty()==0)
    {
        for(int i=antrian.front;i<=antrian.rear;i++)
        {
            printf(" %d",antrian.data[i]);
        }
    }else printf("data kosong!\n");
}

main()
{
int desimal, shift, hasil;
cout<<"Masukkan bilangan desimal = ";
cin>>desimal;
Enqueue (desimal);
cout<<"Masukkan jumlah shift = ";
cin>>shift;
hasil=desimal>>shift;
cout<<"Bilangan desimal setelah shift = "<<hasil;
}


OUTPUT :



PEMBAHASAN :

Dari bilangan desimal 25 dikonversikan menjadi biner menjadi 11001

Setelah dikonversikan, maka program di shift sebanyak 2x

11001 —> shift pertama, angka 1 yang terakhir di dequeue  menjadi 1100
1100 —> shift kedua, angka 0 yang terakhir di dequeue  menjadi 110

Biner 110 dikonversi ke desimal menjadi desimal 6.

Comments