Stack (tumpukan) dalam Bahasa C

Stack merupakan jenis linked list yang menerapkan konsep LIFO (Last In Fist Out) artinya elemen dari struktur (node) yang dimasukkan pertama kali ke dalam rangkaian akan dikeluarkan (diproses) terakhir kali sedangkan elemen yang masuk terakhir akan diproses / dikeluarkan pertama. Dengan kata lain setiap transaksi atau aktifitas yang ada dalam stack dilakukan pada kepalanya (head) saja. Pada stack hanya ada 2 fungsi utama yaitu Push atau menambah/memasukkan node (struktur) ke dalam stack, dan Pop atau mengeluarkan/menghapus node dari stack.

Stack dalam Bahasa C

cara kerja stack dapat di ilustrasikan sebagai berikut:

| D | ---> atas
| C |
| B |
| A | ---> bawah

Anggaplah gambar diatas sebagai tumpukan data, D sebagai node(struktur) yang atas (terkhir dimasukkan) dan A sebagai node yang bawah (pertamakali dimasukkan). Jika kita melakukan operasi Push (menambah), misalnya E, maka penambahan akan dilakukan pada nilai yang paling atas, yaitu D, sehingga menjadi:

| E | ---> atas
| D |
| C |
| B |
| A | ---> bawah

Sehingga nilai E menjadi nilai atas yang baru, dan jika dilakukan operasi pop, maka stack akan menjadi seperti gambar yang pertama diatas, yaitu nilai D menjadi nilai atas, dan nilai E akan dihapus dari tumpukan (stack).

Contoh Program Stack dalam Bahasa C


Contoh Program Stack dalam Bahasa C


#include <stdio.h>
#include <conio.h>
#define max 5

typedef struct {
    int top;
    int data[max+1];
}stack;

stack tumpukan;
void createEmpty();
int IsEmpty();
int IsFull();
void push(int x);
void pop();

main(){
    int lagi;
    int input;
    int pilih;
    createEmpty();
    pilih = 0;
    while (pilih != 5){
        puts("_____________________________________");
        printf("             MENU UTAMA\n");
        //Printf dan Puts memiliki Fungsi yang sama
        puts("_____________________________________");
        puts("1: Cek kondisi Stack");
        puts("2: Tambah data (Pust)");
        puts("3: Keluarkan isi stack (Pop)");
        puts("4: Kosongkan stack");
        puts("5: Keluar");
        printf("Pilihan Anda: ");
        scanf("%d",&pilih);
        switch(pilih){
        case 1:
            if (IsEmpty() == 1)
                puts("Stack masih kosong");
            else if ((IsEmpty() == 0) && (IsFull() == 0))
                puts("Stack sudah terisi (belum penuh)");
            else
                puts("Stack sudah penuh");
        break;
        case 2:
            if (IsFull() == 1)
                puts("Stack Penuh.");
            else
            {
                printf("Masukkan data: ");
                scanf("%d",&input);
                push(input);
                printf("Top baru: %d\n",tumpukan.data[tumpukan.top]);
                printf("IsFull: %d\n",IsFull());
                printf("IsEmpty: %d\n",IsEmpty());
            }
        break;
        case 3:
            printf("Top yang dikeluarkan bernilai: %d \n",tumpukan.data[tumpukan.top]);
            pop();
        break;
        case 4:
            while (IsEmpty() == 0)
            {
                printf("Top yang dikeluarkan bernilai: %d \n",tumpukan.data[tumpukan.top]);
                pop();
            }
            puts("Stack sudah kosong");
        break;
        case 5:
            puts("---Terimakasih || MARKIJAR.Com---");
        break;
        }
    }
}

void createEmpty(){
    tumpukan.top = 0;
}

void push(int x){
    tumpukan.top = tumpukan.top + 1;
    tumpukan.data[tumpukan.top] = x;
}

void pop(){
    tumpukan.top = tumpukan.top - 1;
}

int IsEmpty(){
    if (tumpukan.top == 0)
        return 1;
    else
        return 0;
}

int IsFull(){
    if (tumpukan.top == max)
        return 1;
    else
        return 0;
}


Sekian artikel tentang Stack dalam Bahasa C, semoga artikel ini dapat bermanfaat bagi sobat MARKIJAR.


Stack (tumpukan) dalam Bahasa C
MARKIJAR: MARi KIta belaJAR

Suka dengan artikel kami ? Tidak ada salahnya untuk berlangganan artikel terbaru dari MARKIJAR.Com langsung via email mu :

2 Responses to "Stack (tumpukan) dalam Bahasa C"

  1. kewrenn ka izin sedot yaahhh, tapi mau sedikit bertannya boleh?

    ReplyDelete