• Tidak ada hasil yang ditemukan

BAB III. Stack. ( Tumpukan )

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB III. Stack. ( Tumpukan )"

Copied!
10
0
0

Teks penuh

(1)

BAB III

Stack

( Tumpukan )

Pada algoritma dan pemrograman terutama struktur data kita akan mengenal suatu konsep

penyusunan data/array/elemen struktur dengan cara penumpukan atau yang biasa disebut dengan

stack. Apa sih yang dimaksud dengan stack/tumpukan ini?

Contoh nyatanya bisa kita lihat di kehidupan sehari-hari misalnya tumpukan piring. Seorang ibu rumah

tangga yang akan mencuci piring meletakkan sebuah piring kemudian disusul dengan menumpuk piring

yang ke 2 diatas piring pertama dan seterusnya hingga piring ke 5. Ketika piring akan diambil untuk

dicuci maka tentu saja yang pertama kali diambil adalah piring yang ke 5 atau tumpukan teratas.

Stack merupakan kumpulan data yang seolah-olah ada data yang diletakan diatas data lain, dimana

dapat disisipkan/ditambah dan diambil/dihapus melalui ujung yang sama yang biasa disebut ‘top of

stack’. Dan stack memiliki sifat LIFO ( Last In First Out) yaitu terakhir masuk adalah yang pertama keluar,

atau data yang pertama masuk adalah yang terakhir keluar .

ilustrasi stack :

Teknik informatika Teknik informatika Sistem Informasi

Teknik informatika Akuntansi Sistem Informasi

(2)

Karena kita menumpuk akuntansi paling akhir, maka akuntansi menjadi elemen paling atas dan

sebaliknya teknik informatika akan menjadi elemen terakhir. Berikut ini adalah operator atau nama

method yang biasa digunakan dalam algoritma stack.

- PUSH

: penyisipan (Memasukkan elemen).

- POP

: penghapusan (Mengeluarkan elemen puncak).

- IsEmpty

: operator yang memeriksa apakah stack kosong.

- IsFull

: operator yang memeriksa apakah stack penuh.

- Clear

: operator untuk menghapus stack.

(3)

Berikut ini adalah contoh program simulasi single stack menggunakan bahasa C

##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;

char index[STACK_MAX][STACK_LEN]; }stack;

/*prosedur pemberian nilai awal pada top (inisialisasi)*/ void init()

{ stack.top= -1; }

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

/*fungsi untuk memeriksa apakah tumpukan kosong atau tidak*/ int IsEmpty() { if(stack.top== -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++;

strcpy(stack.index[stack.top],d);

(4)

/*prosedur operator Pop pada stack.

mengeluarkan eleman paling atas pada tumpukan*/ void Pop()

{

stack.top--; }

/*prosedur untuk menampilkan elemen stack*/ void ViewStack() { int i; if(!IsEmpty()) { for(i=stack.top;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; 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"); printf("\n"); } }

/*prosedur untuk menghapus stack dengan mengeluarkan semua elemen melalui looping prosedur pop*/

void ClearStack() {

while(!IsEmpty()) { Pop(); } }

/*Interface dan Main Function*/ main()

{

int op,count,multi; char elemen[STACK_LEN];

printf("\t===============================\n"); printf("\t| PROGRAM STACK |\n"); printf("\t| yuanthy (1017078801) |\n"); printf("\t===============================\n"); printf("\t Press Any Key To Continue .. \n");

(5)

getche(); init(); do{ menu: system("cls");

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

printf("\nSTATUS ELEMEN STACK:\n\n"); ViewTopNoel();

printf(" ==Menu & Operasi Program Stack: == \n"); printf("|1. Operasi PUSH |\n"); printf("|2. Operasi POP |\n"); printf("|3. Hapus Stack |\n"); printf("|4. Exit |\n"); printf("=====================================\n"); printf("Pilih Menu/Operasi [1-4]: "); scanf("%d",&op); fflush(stdin); switch(op){ case 1: { if(IsFull())

{ printf("\nStack Sudah Penuh!"); } else

{ printf("\nInput Data(Max 20 Karakter): "); gets(elemen); if(CountString(elemen)) { Push(elemen); } else {

printf("\nString Terlalu Panjang"); goto menu; } } } break; case 2: { if(IsEmpty())

{ printf("\nStack Dalam Keadaan Kosong!!"); } else

{ Pop(); } }break; case 3: { if(IsEmpty())

{ printf("\nStack Dalam Keadaan Kosong!!"); } else

{ ClearStack(); } } break;

case 4: { goto exit; }

default: { printf("Menu untuk nomor %d tidak tersedia!", op); } } }while(op!=6); exit: getche(); }

(6)

Berikut ini adalah contoh program simulasi multi stack menggunakan bahasa C

#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); }

(7)

/*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); getch();

} }

/*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); getch(); } } } else {

printf("Stack Maksimal=>10 Tumpukan s/d Array[9]"); getch();

} }

(8)

/*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,count,multi; char elemen[STACK_LEN];

printf("\t ========================================== \n"); printf("\t | PROGRAM STACK |\n"); printf("\t | Press Any Key To Continue |\n"); printf("\t ========================================== \n"); printf("\t ");

getch();

(9)

init(); do{ menu:

system("cls");

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

printf("\nSTATUS ELEMEN STACK:\n\n"); ViewTopNoel();

printf(" ==Menu & Operasi Program Stack: == \n"); printf("|1. Operasi PUSH |\n"); printf("|2. Operasi MultiPUSH |\n"); printf("|3. Operasi POP |\n"); printf("|4. Operasi MultiPOP |\n"); printf("|5. Hapus Stack |\n"); printf("|6. Exit |\n"); printf("=====================================\n"); printf("Pilih Menu/Operasi [1-4]: "); scanf("%d",&op); fflush(stdin); switch(op){ case 1: { if(IsFull()) {

printf("\nStack Sudah Penuh!"); getch();

} else{

printf("\nInput Data(Max 20 Karakter): "); gets(elemen); if(CountString(elemen)) { Push(elemen); } else {

printf("\nString Terlalu Panjang"); getch(); goto menu; } } } break; case 2: { if(IsFull()) {

printf("\nStack Sudah Penuh!"); getch();

} else

{ MultiPush(); } } break;

(10)

Latihan.:

Ubahlah program stack diatas sehingga inputan yg dimasukan adalah nim dengan tipedata

integer dan ukurannya 7 digit saja !

case 3: {

if(IsEmpty())

{ printf("\nStack Dalam Keadaan Kosong!!"); getch(); } else { Pop(); } }break; case 4: { if(IsEmpty()) {

printf("\nStack Dalam Keadaan Kosong!!"); getch();

} else {

printf("\nJumlah Elemen Teratas Yang Akan Dikeluarkan: "); scanf("%d",&multi); MultiPop(multi); } } break; case 5: { if(IsEmpty())

{ printf("\nStack Dalam Keadaan Kosong!!"); getch(); } else { ClearStack(); } } break; case 6: { goto exit; } default: {

printf("Menu untuk nomor %d tidak tersedia!", op); getch(); } } }while(op!=6); exit: return 0; }

Gambar

ilustrasi stack :

Referensi

Dokumen terkait

Dengan hasil rapat bahwa masa sanggah selama 5 (lima) hari kerja terhitung mulai tanggal 25 Juni 2012 s.d 29 Juni 2012 telah terlampaui, dan dari semua peserta yang mengajukan

Alat yang digunakan untuk membuat topeng kayu adalah… A.. Kelebihan topeng yang dibuat dari

Demikian agar pengumuman ini diketahui oleh seluruh peserta pelelangan kemudian atas perhatiannya kami ucapkan terima kasih. POKJA ULP Kegiatan Penataan

2, Mei 2018 Perbedaan Ekspresi Epidermal Growth Factor Receptor (EGFR) pada Malignant Peripheral Nerve Sheath Tumor Derajat Tinggi dan Rendah serta Hubungannya

Berdasarkan pernyataan di atas kanak-kanak X seperti yang dimaksudkan mungkin mengalami A.. Manakah di antara berikut menunjukkan jenis-jenis cacat akal ringan

Berdasarkan permasalahan tersebut penggunaan Framework COBIT 5 akan membantu untuk mengukur sejauh mana tingkat kapabilitas pada proses DSS01 (Manajemen

Maka Yesus atau Isa itulah yang dimaksud oleh Surat An Naas, satu-satunya Tokoh yang diberi wewenang (dan tugas!) oleh Yang Maha Kuasa untuk melindungi umat Tuhan

Dalam penelitian ini data primer terkait implementasi perilaku menyontek ditinjau dari jenis kelamin pada jenjang siswa sekolah dasar di SDN 1 Kota Raman yaitu