fbpx

Struktur Data : Contoh Progamย Stack dalam Bahasa C

Contoh 1

Buatlah program yang bisa mengkonversi bilangan bulat negatif.

Source code

#include<stdio.h>
#include<stdlib.h>

typedef struct
{
    int item[50];
    int count;
} stack;

//menyiapkan tumpukan kosong
void initializestack(stack *s)
{
    s->count = 0;
}

//jika tumpukan kosong maka nilai fungsinya 1 (true),
//jika tidak 0(false)
int empty(stack *s)
{
    return (s->count == 0);
}

//jika tumpukan sudah full(dlm deklarasi stack, field item //adalah array dg jumlah elemen sebanyak 50)maka nilai
//nilai fungsinya 1, jika tidak 0
int full(stack *s)
{
    return (s->count == 49);
}

void push(int x, stack *s)
{
    if(full(s))
        printf("Bilangan terlalu besar !\n");
    else {
        s->item[s->count]=x; ++(s->count);
    }
}

int pop(stack *s)
{
    if(empty(s)) return (0);
    else {
        --(s->count);
        return (s->item[s->count]);
    }
}

void tambahan(stack *s)
    {
        int i,k;
        k=16-(s->count);
        for (i=0;i<k;i++)
        {
            printf("1");
        }
    }

void main(){
    int i, n, l;
    int input;
    stack tumpukan;

    printf("Program konversi Desimal ke Biner\n\n");
    initializestack(&tumpukan);
    printf("Masukkan bilangan desimal = ");
    scanf("%d", &input);

    if (input>=0)
    {
        for(n=input;n>0;n=n/2){
            l=n%2;
            push(l,&tumpukan);
        }
    }
    else
    {
        for(n=input;n<0;n=n/2)
        {
            l=n%2;
            if(l<0)
            {
                push(0,&tumpukan);
            }
            else
            {
                push(1,&tumpukan);
            }
        }

        for(n=0;n<tumpukan.count;n++)
        {
            if(tumpukan.item[n]>0)
            {
                tumpukan.item[n]=0;
            }
            else
            {
                tumpukan.item[n]=1;
                n=tumpukan.count;
            }
        }

        if(tumpukan.item[tumpukan.count-1]<1)
        {
            push(1,&tumpukan);
        }

    }

    printf("\nHasil konversi ke biner = ");
    tambahan(&tumpukan);
    if (input==0) printf("0");
    else
        for(i=tumpukan.count;i>0;i--){
            printf("%d", pop(&tumpukan));
        }
}

Output


Contoh 2

Buatlah sebuah fungsi konversi, agar fungsi utama/ main dalam program di Contoh 1 menjadi lebih sederhana.

Source code

#include <stdio.h>
#include <string.h>
typedef struct
{
    int item[50];
    int jml_item;
}stack;

//menyiapkan tumpukan kosong
void initializestack(stack *s)
{
    s->jml_item = 0;
}

//jika tumpukan kosong maka nilai fungsinya 1 (TRUE)
//jika tidak 0 (FALSE)

//memeriksa kosong atau tidak
int isEmpty(stack *s)
{
    return (s->jml_item == 0);
}

//jika tumpukan sudah full (dalam deklarasi stack, field item
//adalah array dengan jumlah elemen sebanyak 50) maka nilai
//fungsinya 1, jika tidak 0
int isFull(stack *s)
{
    return (s->jml_item == 50);
}

void push(int x, stack *s)
{
    if(isFull(s))
        printf("Bilangan terlalu besar !\n");
    else
    {
        s->item[s->jml_item]=x; ++(s->jml_item);
    }
}
int pop(stack *s)
{
    if(isEmpty(s)) return (0);
    else
    {
        --(s->jml_item);
        return (s->item[s->jml_item]);
    }
}

int destobin(int *nilai)
{
    stack tumpukan;
    int digit,sisa_bagi;
    initializestack(&tumpukan);
    //printf("top saat diinitialize %d \d", tumpukan.jml_item);
    if (nilai == 0) printf("Hasil konversi ke biner = 0");
    else
    {
        int n;
        for (n=nilai;n>0;n=n/2)
        {
            sisa_bagi=n%2;
            push(sisa_bagi,&tumpukan);
        }
        digit=tumpukan.jml_item-1;
        int i;
        printf("Hasil konversi ke biner = ");
        tambahan(&tumpukan);
        for(i=tumpukan.jml_item; i>0; i--)
        {
            printf("%d", pop(&tumpukan));
            if((i%4)==(digit%4)) printf(" ");
        }
    }
}

void tambahan(stack *s)
    {
        int i,k;
        k=16-(s->jml_item);
        for (i=0;i<k;i++)
        {
            printf("1");
        }
    }

int main()
{
    stack *tumpukan;
    int bil_desimal, sisa_bagi;

    printf("Program koversi Desimal ke Biner\n\n");
    printf("Masukkan bilangan desimal = "); scanf("%d", &bil_desimal);
    destobin(bil_desimal);
}

Output


Contoh 3

Buat program yang dapat mengkonversi bilangan desimal menjadi bilangan oktal

Source Code

#include <stdio.h>
#include <string.h>
typedef struct
{
    int item[50];
    int jml_item;
}stack;

//menyiapkan tumpukan kosong
void initializestack(stack *s)
{
    s->jml_item = 0;
}

//jika tumpukan kosong maka nilai fungsinya 1 (TRUE)
//jika tidak 0 (FALSE)

//memeriksa kosong atau tidak
int isEmpty(stack *s)
{
    return (s->jml_item == 0);
}

//jika tumpukan sudah full (dalam deklarasi stack, field item
//adalah array dengan jumlah elemen sebanyak 50) maka nilai
//fungsinya 1, jika tidak 0
int isFull(stack *s)
{
    return (s->jml_item == 50);
}

void push(int x, stack *s)
{
    if(isFull(s))
        printf("Bilangan terlalu besar !\n");
    else
    {
        s->item[s->jml_item]=x; ++(s->jml_item);
    }
}
int pop(stack *s)
{
    if(isEmpty(s)) return (0);
    else
    {
        --(s->jml_item);
        return (s->item[s->jml_item]);
    }
}

void tambahan(stack *s)
    {
        int i,k;
        k=16-(s->jml_item);
        for (i=0;i<k;i++)
        {
            printf("1");
        }
    }

int destobin(int *nilai)
{
    stack tumpukan;
    int digit,sisa_bagi;
    initializestack(&tumpukan);
    //printf("top saat diinitialize %d \d", tumpukan.jml_item);
    if (nilai == 0) printf("Hasil konversi ke biner = 0");
    else
    {
        int n;
        for (n=nilai;n>0;n=n/2)
        {
            sisa_bagi=n%2;
            push(sisa_bagi,&tumpukan);
        }
        digit=tumpukan.jml_item-1;
        int i;
        printf("Hasil konversi ke biner = ");
        tambahan(&tumpukan);
        for(i=tumpukan.jml_item; i>0; i--)
        {
            printf("%d", pop(&tumpukan));
            if((i%4)==(digit%4)) printf(" ");
        }
    }
}

int destookt(int *nilai)
{
    stack tumpukan;
    int sisa_bagi;
    initializestack(&tumpukan);
    //printf("top saat diinitialize %d \d", tumpukan.jml_item);
    if (nilai == 0) printf("\nHasil konversi ke oktal = 0");
    else
    {
        int n;
        for (n=nilai;n>0;n=n/8)
        {
            sisa_bagi=n%8;
            push(sisa_bagi,&tumpukan);
        }
        int i;
        printf("\nHasil konversi ke oktal = ");
        for(i=tumpukan.jml_item; i>0; i--)
        {
            printf("%d", pop(&tumpukan));
        }
    }
}

int main()
{
    stack *tumpukan;
    int bil_desimal, sisa_bagi;

    printf("Program koversi Desimal ke Biner\n\n");
    printf("Masukkan bilangan desimal = "); scanf("%d", &bil_desimal);
    destobin(bil_desimal);
    destookt(bil_desimal);
}

Output


Contoh 4

Buat program konversi desimal ke biner di atas dengan menggunakan linked list.

Source Code

#include <stdio.h>

struct binary
{
    int value;
    struct binary *next;
};
typedef struct binary *item;

item push(item curr, int n)
{
    item temp;
    temp = (item)malloc(sizeof(struct binary));
    temp->value = n;
    temp->next=curr;
    return temp;
}

item tambahan(item head)
    {
        int i,k, count = 0;
        item curr;
        curr = head;

        while (curr != NULL)
        {
            curr = curr->next;
            count++;
        }

        k = 16 - (count);

        for (i=0;i<k;i++)
        {
            printf("1");
        }
    }

item destobin(item head, int bil)
{
    int bin_bil;
    while (bil>0)
    {
        bin_bil=bil%2;
        head = push(head, bin_bil);
        bil/=2; //sama dengan bil = bil/2
    }
    printf("Hasil konversi ke biner adalah : ");
    tambahan(head);
    for(;head != NULL; head = head->next)
        printf("%d", head->value);
    return(head);
}

item destookt(item head, int bil)
{
    int bin_bil;
    while (bil>0)
    {
        bin_bil=bil%8;
        head = push(head, bin_bil);
        bil/=8; //sama dengan bil = bil/2
    }
    printf("\nHasil konversi ke oktal adalah : ");
    for(;head != NULL; head = head->next)
        printf("%d", head->value);

    return(head);
}

int main()
{
    int num;
    item head = NULL;
    printf("Masukkan bilangan desimal : ");
    scanf("%d", &num);
    head = destobin(head, num);
    head = destookt(head, num);
}

Output


Materi Lengkap

Silakan baca juga beberapa artikel menarik kami tentang Stack, daftar lengkapnya adalah sebagai berikut.


Tonton juga video pilihan dari kami berikut ini

Bagikan ke teman-teman Anda

Contact Us

How to whitelist website on AdBlocker?

How to whitelist website on AdBlocker?

  1. 1 Click on the AdBlock Plus icon on the top right corner of your browser
  2. 2 Click on "Enabled on this site" from the AdBlock Plus option
  3. 3 Refresh the page and start browsing the site
error: Content is protected !!
Up