-->

I'M Bayu Pradika

Graphic Designer . Web Developer . Programmer

Jumat, 19 Agustus 2022

Algoritma Dan Struktur Data C++ BAB II (Stack)

 



Stack

printf("Hallo Para Programmer!!"); 

printf("Disini Saya Akan Menjelaskan Sedikit Dasar Mengenai Stack Dalam Bahasa C/C++"); 

printf("Terus Ikuti Blog Ini Untuk Mendapatkan Artikel Bermanfaat Selanjutnya yah");

printf("Selamat Belajar!!");


         Salah satu konsep yang efektif untuk menyimpan dan mengambil data adalah" terakhir masuk sebagai yang pertama keluar" (Last In First Out / LIFO). Dengan konsep ini, pengambilan data akan berkebalikan urutannya dengan penyimpanan data.

         Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data yang lain. Dengan demikian stack adalah struktur data yang menggunakan konsep LIFO. Dengan demikian, elemen terakhir yang disimpan dalam stack menjadi elemen pertama yang diambil. Dalam proses komputasi, untuk meletakkan sebuah elemen pada bagian atas dari stack, maka kita melakukan push. Dan untuk memindahkan dari tempat yang atas tersebut, kita melakukan pop.

        Untuk menjelaskan pengertian diatas kita mengambil contoh sebagai berikut. Misalnya kita mempunyai dua buah kotak yang kita tumpuk, sehingga kotak kita letakkan di atas kotak yang lain. Jika kemudian stack dua buah kotak tersebut kita tambah dengan kotak ketiga dan seterusnya, maka akan kita peroleh sebuah stack kotak, yang terdiri dari N kotak.

         Secara sederhana, sebuah stack bisa kita ilustrasikan seperti pada gambar 4.1 di bawah ini. Dari gambar di bawah ini, kita bisa mengatakan bahwa kotak B ada diatas kotak A dan ada di bawah kotak C. Dari gambar tersebut kita dapat melihat bahwa kita hanya bisa menambah atau mengambil sebuah kotak lewat satu ujung, yaitu ujung bagian atas. Nampak pula bahwa stack merupakan kumpulan data yang sifatnya dinamis, artinya kita bisa menambah atau mengambil data darinya

1. Representasi Stack Dengan Array

       Ada beberapa cara untuk menyajikan sebuah stack tergantung pada permasalahan yang akan kita selesaikan. Dalam bab ini kita akan menggunakan cara yang paling sederhana, tipe data yang sudah kita kenal, yaitu array. Kita dapat menggunakan array untuk menyajikan sebuah stack, dengan anggapan bahwa banyaknya elemen maksimum dari stack tersebut tidak akan melebihi batas maksimum banyaknya elemen dalam array.

       Pada saat ukuran stack, kalau kita teruskan menambah data lagi, akan terjadi overflow. Dengan demikian perlu data tambahan untuk mencatat posisi ujung stack. Dengan kebutuhan seperti ini, kita dapat menyajikan stack dengan menggunakan tipe data struktur (struct) yang terdiri dari dua field. Field pertama bertipe array untuk menyimpan elemen stack, medan kedua bertipe integer untuk mencatat posisi ujung stack. Dengan demikian kita mendeklarasikan stack sebagai berikut:

#define MAXSTACK 100

typedef int ItemType;

/* Definisi struktur stack */

typedef struct

{

int Item[MAXSTACK]; /* Array yang berisi data tumpukan

*/

int Count;/* menunjukkan indeks data paling atas dari

stack */

}Stack;

2. Operasi Pada Stack

Operasi-operasi Dasar pada stack adalah sebagai berikut:

    1. Operasi menciptakan T sebagai stack kosong

    void InitializeStack(Stack *S)

    {

    S->Count = 0;

    }

    2. Fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong

    int Empty(Stack *S)

    {

    return (S->Count == 0);

    }

    3. Fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh

    int Full(Stack *S)

    {

    return (S->Count == MAXSTACK);

    }

    4. Operasi menyisipkan elemen x ke stack T dan mengembalikan stack baru

    void Push(ItemType x, Stack *S)

    {

    if (S->Count==MAXSTACK)

    printf("Stack penuh! Data tidak dapat masuk!");

    else

    {

    S->Item[S->Count]=x;

    ++(S->Count);

    }

    }

    5. Operasi mengambil elemen puncak stack T, (pop(T,x))

    int Pop(Stack *S, ItemType *x)

    {

    if (S->Count==0)//stack kosong

    printf("Stack masih kosong!");

    else{

    --(S->Count);

    *x = S->Item[S->Count];

    }

    }

3. Algoritma Merubah Notasi Infix Menjadi Notasi Postfix

    1. Baca ungkapan dalam notasi infix, misalnya S, tentukan panjang ungkapan tersebut, misalnya N            karakter, siapkan sebuah stack kosong dan siapkan derajad masing-masing operator, misalnya: ^            berderajad 3, * dan / berderajad 2, + dan – berderajad 1 dan ( berderajad 0.

    2. Dimulai dari i = 1 sampai N kerjakan langkah-langkah sebagai berikut:

        a. R = S[I]

        b. Test nilai R. Jika R adalah:

            operand : langsung ditulis

            kurung buka : push ke dalam tumpukan

            kurung tutup : pop dan tulis semua isi tumpukan sampai ujung tumpukan = ‘(‘. Pop juga tanda                 ‘(‘ ini, tetapi tidak usah ditulis

            operator : jika tumpukan kosong atau derajad R lebih dibanding derajad ujung tumpukan, push                operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan dan tulis; kemudian ulangi                        pembandingan R dengan ujung tumpukan. Kemudian R di-push

        c. Jika akhir notasi infix telah tercapai, dan tumpukan masih belum kosong, pop semua isi                        tumpukan dan tulis hasilnya Untuk memahami algoritma di atas, kita coba mengubah ungkapan             berikut, yang ditulis menggunakan notasi infix, menjadi notasi postfix

            ( A + B ) / (( C – D ) * E ^ F)

            Ilustrasi pengubahan notasi infix di atas menjadi notasi postfix secara lengkap tersaji dalam                     tabel sebagai berikut:


Dari ilustrasi di atas, bisa kita lihat bahwa notasi postfix dari ungkapan:

( A + B ) / (( C – D ) * E ^ F) 

adalah 

A B + C D – E F ^ */


Baca Juga:
1. Algoritma Dan Struktur Data C++ BAB I (Array, Pointer, Struktur)
2. Contoh Program C++ Tentang Array, Pointer, Dan Struktur


~~TERIMA KASIH~~

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna Veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

0 comments:

Categories

Contact Us

BAYU
+62 896-2690-9619
Kampar, Riau, Indonesia