Pengertian Stack,Proses dan Contoh Program



Stack
Stack adalah bentuk khusus dari linear list dengan operasi penyisipan dan penghapusan dari elemennya hanya dapat dilakukan pada satu ujung saja yang disebut sebagai “TOP”. Stack juga bersifat lifo yang artinya last in first out yang bermakna nilai yang terakhir masuk menjadi yang pertama keluar dari stack.
Ada istilah dalam program stack yaitu:
      Push : fungsi untuk menambah item pada stack
      Pop : fungsi untuk mengambil/menghapus item pada stack
      Clear : fungsi untuk mengosongkan stack
      IsEmpty : fungsi untuk mengecek apakah stack sudah kosong
      IsFull : fungsi untuk mengecek apakah stack sudah penuh

Contoh Stack:


Proses Push dan Pop pada Stack

Contoh tugas program stack yang saya buat waktu ada tugas di kelas  : :D
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

#define STACK_MAX 10 //mendefinisikan isi tumpukan sebanyak 10 tumpukan
#define STACK_LEN 21 //mendefinisikan panjang string sebanyak 21 karakter

/*membuat struct untuk tumpukan*/
struct STACK{
       int top_elm;
       char index[STACK_MAX][STACK_LEN];
}stack;

/*prosedur pemberian nilai awal pada top (inisialisasi)*/
void init(){
       stack.top_elm = -1;
}

/*fungsi untuk memeriksa apakah tumpukan penuh atau tidak*/
int IsFull(){
       if (stack.top_elm == STACK_MAX - 1)
              return 1;
       else
              return 0;
}

/*fungsi untuk memeriksa apakah tumpukan kosong atau tidak*/
int IsEmpty(){
       if (stack.top_elm == -1)
              return 1;
       else
              return 0;
}

/*fungsi untuk menghitung panjang string*/
int CountString(char *e){
       int count;
       count = strspn(e, e);
       if (count<STACK_LEN) return 1;
       else return 0;
}

/*prosedur operator Push pada stack.
meletakkan elemen baru pada posisi atas tumpukan */
void Push(char *d){
       stack.top_elm++;
       strcpy(stack.index[stack.top_elm], d);
}

/*prosedur operator Pop pada stack.
mengeluarkan eleman paling atas pada tumpukan*/
void Pop(){
       stack.top_elm--;
}

/*prosedur operator Pop pada stack
mengeluarkan sebanyak n elemen teratas pada tumpukan*/
void MultiPop(int n){
       if (n <= stack.top_elm + 1){
              for (int i = 0; i<n; i++){
                     stack.top_elm--;
              }
       }
       else{
              printf("\n%d Melebihi Jumlah Tumpukan Yang Ada!", n);
              getchar();
       }
}

/*prosedur operator Push pada stack
menumpuk sebanyak multi elemen*/
void MultiPush(){
       int multi;
       char elemen[STACK_LEN];

       printf("\nJumlah Data Input:"); scanf("%d", &multi);
       printf("\n");

       if ((multi + stack.top_elm)<STACK_MAX){
              for (int n = 1; n <= multi; n++){
                     fflush(stdin);
                     printf("Masukkan Data %d (Maks 20 Karakter): ", n); gets(elemen);
                     if (CountString(elemen))Push(elemen);
                     else{
                           printf("String Pada Data ke %d Terlalu Panjang", n);
                           getchar();
                     }
              }
       }
       else{
              printf("Stack Maksimal=>10 Tumpukan s/d Array[9]");
              getchar();
       }
}

/*prosedur untuk menampilkan elemen stack*/
void ViewStack(){
       int i;

       if (!IsEmpty()){
              for (i = stack.top_elm; i >= 0; i--){
                     printf("Elemen array[%d]= %s\n", i, stack.index[i]);
              }
              printf("\n");
       }
       else{
              printf("-NULL-\n\n");
       }
}

/*prosedur untuk menampilkan elemen TOP dan NOEL pada stack*/
void ViewTopNoel(){
       int j, h;
       if (!IsEmpty()){
              j = stack.top_elm;
              h = j;
              h++;
              printf("Elemen Puncak [TOP(s)]  : %s\n", stack.index[j]);
              printf("Jumlah Elemen [NOEL(s)] : %d\n", h);
              printf("\n");
       }
       else{
              printf("-NULL-\n\n");
              putchar('\n');
       }
}

/*prosedur untuk menghapus stack dengan mengeluarkan semua elemen melalui
looping prosedur pop*/
void ClearStack(){
       while (!IsEmpty()){
              Pop();
       }
}

/*Interface dan Main Function*/
int main(){
       int op, multi;
       char elemen[STACK_LEN];

       printf("\t      =========================================================\n");
       printf("\t      |                PROGRAM STRUCK AND STACK               |\n");
       printf("\t      |=======================================================|\n");
       printf("\t      |                                                       |\n");
       printf("\t      | >Ricky satria                      (140010039)        |\n");
       printf("\t      |                                                       |\n");
       printf("\t      |                                                       |\n");
       printf("\t      |         Compiled With Microsoft Visual Studio         |\n");
       printf("\t      |========================================================\n");
       printf("\t      |                         BA141                         |\n");
       printf("\t      |           Sistem Komputer - STIKOM BALI               |\n");
       printf("\t      =========================================================\n");
       printf("\t      |               Press Any Key To Continue               |\n");
       printf("\t      =========================================================\n");

       printf("\t      "); getchar();

       init();

       do{
       menu:
              system("cls");

              printf("\nISI STACK SAAT INI:\n\n");
              ViewStack();
              printf("\nSTATUS ELEMEN STACK:\n\n");
              ViewTopNoel();

              printf("=====================================\n");
              printf("|Menu & Operasi Program Stack:      |\n");
              printf("|1. Operasi MultiPUSH               |\n");
              printf("|2. Operasi MultiPOP                |\n");
              printf("|3. Hapus Stack                     |\n");
              printf("|4. Exit                            |\n");
              printf("=====================================\n");
              printf("Pilih Menu/Operasi [1 dan 2]: ");
              scanf("%d", &op);

              fflush(stdin);

              switch (op){
              case 1:
              {
                             if (IsFull()){
                                    printf("\nStack Sudah Penuh!");
                                    getchar();
                             }
                             else{
                                    MultiPush();
                             }
              }
                     break;
              case 2:
              {
                             if (IsEmpty()){
                                    printf("\nStack Dalam Keadaan Kosong!!");
                                    getchar();
                             }
                             else{
                                    printf("\nJumlah Elemen Teratas Yang Akan Dikeluarkan: ");
                                    scanf("%d", &multi);
                                    MultiPop(multi);
                             }
              }
                     break;
              case 3:
              {
                             if (IsEmpty()){
                                    printf("\nStack Dalam Keadaan Kosong!!");
                                    getchar();
                             }
                             else{
                                    ClearStack();
                             }
              }
                     break;
              case 4:
              {
                             goto exit;
              }
              default:
              {
                              printf("Menu untuk nomor %d tidak tersedia!", op);
                              getchar();
              }
              }

       } while (op != 6);

exit:
       return 0;
}


Hasil program di atas:


Previous
Next Post »