nih gan abis coba-coba buat konversi dari decimal ke biner, octal, hexa dengan menggunakan stack dan queue
#include
#include
#define MAXQUEUE 10
typedef int itemtype;
typedef struct{
itemtype item[MAXQUEUE];
int count;
}stack;
typedef struct{
int count;
int front;
int rear;
int item[MAXQUEUE];
}queue;
void initializestack(stack *s){
s->count=0;
}
int emptys(stack *s){
return (s->count==0);

}
int fulls(stack *s){
return (s->count==MAXQUEUE);
}
void push(itemtype x, stack *s){
if(fulls(s))
printf("Stack penuh ! Data tidak dapat masuk!");
else{
s->item[s->count]=x;
++(s->count);
}
}
int pop(stack *s){
if(emptys(s))
printf("Stack masih kosong!");
else{
--(s->count);
}
return(s->item[s->count]);
}
void inisialisasi(queue *q)
{
q->front=q->rear=-1;
q->count=0;
}
int full(queue *q){
return(q->count==MAXQUEUE);
}
int empty(queue *q){
return(q->count==0);
}
void enqueue(int x,queue *q){
if(full(q))
printf("Tidak dapat memasukkan data! Queue Penuh!");
else{
if((q->front==-1)&&(q->rear==-1))
q->front=q->rear=0;
else
q->rear=(q->rear+1)%MAXQUEUE;
q->item[q->rear]=x;
++(q->count);
}
}
int dequeue(queue *q){
int n;
if(empty(q))
printf("Tidak dapat mengambil data! Queue kosong!");
else{
n=q->front;
if(q->front==q->rear)
q->front=q->rear=-1;
else
q->front=(q->front+1)%MAXQUEUE;
--(q->count);
return q->item[n];
}
}
void tampil(queue q){
queue d;
inisialisasi(&d);
d=q;
while(d.count>0)
printf("%x",dequeue(&d));
printf("\n");
}
queue konversi(int bil, int basis){
queue q;
stack p;
initializestack(&p);
inisialisasi(&q);
while(bil>0){
push((bil%basis),&p);
bil=bil/basis;
}
while(p.count>0)
enqueue(pop(&p),&q);
printf("Hasil konversi adalah : ");
tampil(q);
return(q);
}
double shift(queue q,int shl, int basis){
int i;
double hasil=0;
for(i=0;i
enqueue(dequeue(&q),&q);
printf("Hasil shift %d kali adalah : ",shl);
tampil(q);
for(i=q.count-1;i>=0;i--){
hasil=hasil+(dequeue(&q)*pow(basis,i));
}
return hasil;
}
void main(){
int bil,pil,shl,basis;
queue q;
printf("Masukkan bilangan desimal yang akan dikonversi = ");
scanf("%d",&bil);
printf("Dikonversi ke bilangan :\n");
printf("1.Biner\n");
printf("2.Oktal\n");
printf("3.Heksa\n");
printf("Pilih salah satu : ");
scanf("%d",&pil);
switch(pil){
case 1:
basis=2;
q=konversi(bil,2);
break;
case 2:
basis=8;
q=konversi(bil,8);
break;
case 3:
basis=16;
q=konversi(bil,16);
break;
}
printf("Berapa kali shift : ");
scanf("%d",&shl);
printf("Bilangan desimalnya : %g\n",shift(q,shl,basis));
}
sory neh buat jelasin kapan-kapan ya,, hehe
Tidak ada komentar:
Posting Komentar