Anda di halaman 1dari 20

PENERAPAN STACK MENGGUNAKAN BAHASA

PEMROGRAMAN C++

Disusun oleh:

Angga Prihadie

5160411063/A

PROGRAM STUDI S-1 TEKNIK INFORMATIKA

FAKULTAS TEKNOLOGI INFORMASI DAN ELEKTRO

UNIVERSITAS TEKNOLOGI YOGYAKARTA

YOGYAKARTA

2017
BAB I

PENDAHULUAN

1.1 Latar Belakang

Salah satu konsep yang sangat berguna didalam ilmu komputer adalah satu bentuk
struktur data yang disebut dengan stack. Dalam masalah ini kita coba mengenali mengapa
stack sangat berguna dan sangat penting dalam dunia pemrograman.

1.2 Rumusan Masalah

1.2.1 Apa itu Stack?

1.2.2 Mengapa aplikasi Stack digunakan?

1.2.3 Operasi pada stack

1.2.4 Dimana mendeklarasikan Stack?

1.2.5 Bagaimana kelebihan dan kekurangan Stack?

1.2.6 Bagaimana contoh program stack?

1.3 Tujuan

1.3.1 Untuk mengetahui definisi stack

1.3.2 Untuk memahami dan dapat mendelarasikan stack

1.2.3 Untuk mengetahui kelebihan dan kekurangan stack


BAB II

LANDASAN TORI

2.1 Pengertian Stack

Stack adalah operasi penghapusan dan penyisipan elemennya dilakukan di satu ujung.
Atau bisa juga diartikan sebagai suatu kumpulan data yang seolah-olah ada data yang
diletakkan diatas data yang lain. Satu hal yang perlu di pahami adalah kita bisa menambahkan
data, dan mengambil data lewat ujung yang sama, yang disebut top of stack. Didalam
kehidupan sehari hari banyak kejadian yang mempunyai sifat sama seperti stack. Contohnya
ada sebuah piring di dapur. Piring tersebut tersusun rapat dari atas ke bawah. Setiap kali kita
ambil maka piring paling ataslah yang akan kita ambil, yang berarti mengurangi jumlah piring
dalam tumpukan. Jika piring itu sudah habis maka kita juga akan menambahkan piring lain
yang masih bersih (menambah elemen). Piring yang terakhir kali di masukkan pasti akan
terletak ditumpukan paling atas.

Stack merupakan bagian dari struktur data yang dikategorikan ke dalam bentuk linear
data, dimana operasi pemasukan maupun pengeluaran data selalu dilakukan pada salah satu
sisinya. Dalam dunia komputer, penggunaan stack (tumpukan) merupakan suatu hal yang
umum digunakan seperti untuk penentuan alamat memory, penempatan ruang data dan aplikasi
lain. Sebagai bagian dari struktur data, aplikasi stack juga digunakan untuk berbagai macam
keperluan seperti pengujian kalimat palindrome, penguji tanda kurung (matching parentheses),
dan juga berfungsi sebagai konversi dari notasi infix menjadi notasi postfix.

Pada perhitungan aritmatika, notasi infix adalah notasi yang menempatkan operator
ditengah dua operand sedangkan notasi Postfix adalah notasi yang menempatkan operator
setelah dua operand. Penggunaan notasi infix merupakan hal yang lumrah digunakan dalam
perhitungan aritmatika dibandingkan dengan penggunaan notasi Postfix, akan tetapi bagi mesin
kompilasi notasi Postfix merupakan notasi yang digunakan untuk melakukan suatu
perhitungan. Suatu susunan koleksi data dimana data dapat ditambahkan dan dihapus selalu
dilakukan pada bagian akhir data, yang disebut dengan top of stack Stack bersifat LIFO (Last
In First Out) “Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar
dari stack.
2.1.1 Operasi-operasi pada stack

Dalam penggunaannya suatu stack memiliki beberapa operasi yang dapat


diterapkan seperti membuat stack, penambahan eleme ke dalam stack, menghapusan
elemen dari dalam stack, dan operasi lain yang berhubungan dengan stack tersebut.
Adapun operasi-operasi dasar dari suatu stack adalah :

1. Create()
Operasi Create(Stack) digunakan untuk membuat suatu stack baru dengan nama
stack, yang nilai elemen saat stack tersebut dibuat adalah NOEL(S) = 0, TOP(S) =
NULL (tidak terdefinisikan).
2. IsEmpty()
Operasi ini merupakan operasi untuk mencek isi dari suatu stack dalam keadaan
kosong atau berisi. Operasi ini memiliki 2 (dua) kondisi boolean yaitu :
a. True jika stack tersebut kosong atau dapat dikatakan NOEL(S) = 0
b. False jika stack tersebut tidak dalam kondisi kosong atau dapat dikatakan
NOEL(S) > 0.
3. Push()
Operasi ini merupakan operasi untuk menambahkan satu elemen dengan nilai X
pada puncak suatu stack, sehingga posisi TOP(S) akan bernilai X, penerapan operasi
push pasa suatu stack S akan berakibat overflow jika NOEL(S) dari stack tersebut telah
bernilai maksimum.
4. Pop()
Operasi ini berfungsi untuk menghapus satu elemen dari stack S, sehingga posisi
NOEL(S) akan berkurang satu elemen, dan TOP(S) akan berubah. Operasi pop dapat
menyebabkan kondisi underflow jika suatu stack S yang berada dalam kondisi
minimum dikenakan operasi pop.
2.2 Isi / Pembahasan

2.2.1 Penyajian Stack

Dalam penyajian stack, kita dapat menggunakan array, dengan anggapan bahwa
banyaknya elemen maksimal dari suatu stack tidak melebihi batas maksimum
banyaknya elemen array. Pada suatu ketika, ukuran stack akan sama dengan ukuran
array, bila diteruskan penambahan datanya maka akan terjadi overflow. Oleh karena
itu, perlu ditambahkan data untuk mencatat posisi ujung stack.

2.2.2 Pendeklarasian Stack

Ada banyak cara untuk mendeklarasikan stack. Diantaranya adalah:

1. Deklarasi MAX_STACK
#define MAX_STACK 10

2. eklarasi STACK dengan struct dan array data


typedef struct STACK{

int top;

int data[1000];
};

3. Inisialisasi Stack
 Pada mulanya isi top dengan -1, karena array dalam bahasa C dimulai dari 0,
yang berarti bahwa data stack adalah KOSONG!
 Top adalah suatu variabel penanda dalam Stack yang menunjukkan elemen
teratas data Stack sekarang. Top Of Stack akan selalu bergerak hingga
mencapai MAX of STACK yang menyebabkan stack PENUH!.

Contoh : Int main(){

Int top = -1; //ini adalah inisialisasi dari top


yang bernilai kosong

}
4. Fungsi IsFull
 Untuk memeriksa apakah stack sudah penuh?
 Dengan cara memeriksa top of stack, jika sudah sama dengan
MAX_STACK-1 maka full, jika belum (masih lebih kecil dari
MAX_STACK-1) maka belum full
Program Stack (4)
 Ilustrasi Stack pada kondisi Full

int IsFull(){
if(tumpuk.top == max_stack-1)
return 1;
else
return 0;
}
5. Fungsi IsEmpty
 Untuk memeriksa apakah data Stack masih kosong?
 Dengan cara memeriksa top of stack, jika masih -1
maka berarti data Stack masih kosong!

int IsEmpty(){
if(tumpuk.top == -1)
return 1;
else
return 0;

6. Fungsi Push
 Untuk memasukkan elemen ke data Stack. Data yang diinputkan selalu
menjadi elemen teratas Stack (yang ditunjuk oleh ToS)
 Jika data belum penuh,
 Tambah satu (increment) nilai top of stack lebih dahulu setiap kali ada
penambahan ke dalam array data Stack.
 Isikan data baru ke stack berdasarkan indeks top of stack yang telah di-
increment sebelumnya.
 Jika tidak, outputkan “Penuh”
Contoh:
void push(int stack[], int *top, int value)
{
if (*top < MAX)
{
*top=*top+1;
stack[*top]=value;
}
else
{
cout<<"Stack penuh, PUSH nilai tidak dapat
dilakukan!"<<endl;
exit(0);
}
}
7. Fungsi Pop
 Untuk mengambil data Stack yang terletak paling atas (data yang ditunjuk
oleh TOS).
 Tampilkan terlebih dahulu nilai elemen teratas stack dengan mengakses
indeksnya sesuai dengan top of stacknya, baru dilakukan di-decrement
nilai top of stacknya sehingga jumlah elemen stack berkurang.
Contohnya:
void pop(int stack[], int *top, int *value)
{
if (*top > 0)
{
*value=stack[*top];
*top=*top-1;
}
else
{
cout<<"Stack kosong, POP nilai tidak dapat
dilakukan!"<<endl;
exit(0);
}
}
BAB III

3.1 Kesimpulan

1. Stuck adalah list yang operasi penimpanan dan penghapusan dilakukan di satu ujung
atau bisa juga disebut tumpukan.
2. Stack dapat dideklarasikan dengan sebuah record yang mempunyai elemensebuah
array data untuk menyimpan elemen sebuah array data untuk menyimpan elemen
stack dan sebuah variabel top untuk merujuk elemen stack teratas.
3. Operasi pada stack adalah inisialisasi, pop, push, empty dan full.

3.2 Tugas

Tugas 1

Nama programan : Stack dengan array

Bahasa pemrograman : Borland C++

Listing program :

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#define MAX 10

void push(int stack[], int *top, int value);

void pop(int stack[], int *top, int *value);


int main()

int stack [MAX];

int top=-1;

int n, value;

do

do

cout<<"Masukkan nilai yang akan di PUSH:";

cin>>value;

push(stack,&top,value);

cout<<"Tekan 1 untuk melanjutkan:";

cin>>n;

}while(n==1);

cout<<"Tekan 1 untuk melakukan POP:";

cin>>n;

while(n==1)

pop(stack,&top,&value);

cout<<"Nilai yang akan di POP:"<<value<<endl;


cout<<"Tekan 1 untu melakukan pop sebuah elemen:";

cin>>n;

cout<<endl;

cout<<"Tekan 1 untuk melanjutkan:";

cin>>n;

}while(n==1);

getche();

return 0;

void push(int stack[], int *top, int value)

if (*top < MAX)

*top=*top+1;

stack[*top]=value;

else

cout<<"Stack penuh, PUSH nilai tidak dapat


dilakukan!"<<endl;

exit(0);
}

void pop(int stack[], int *top, int *value)

if (*top > 0)

*value=stack[*top];

*top=*top-1;

else

cout<<"Stack kosong, POP nilai tidak dapat


dilakukan!"<<endl;

exit(0);

Tugas 2

Nama program: Stack dengan linked list


Bahasa pemrograman: Microsoft visual studio
Listing program:
#include<iostream>
using namespace std;

struct node
{
int data;
struct node *next;
};

class stack
{
struct node *top;
public:
stack()
{
top = NULL;
}
void push();
void pop();
void show();
};

void stack::push()
{
int value;
struct node *ptr;
cout << "\nPUSH Operationn";
cout << "Enter a number to insert: ";
cin >> value;
ptr = new node;
ptr->data = value;
ptr->next = NULL;
if (top != NULL)
ptr->next = top;
top = ptr;
cout << "\nNew item is inserted to the stack!!!";

void stack::pop()
{
struct node *temp;
if (top == NULL)
{
cout << "\nThe stack is empty!!!";
}
temp = top;
top = top->next;
cout << "\nPOP Operation........\nPoped value is " << temp->data;
delete temp;
}

void stack::show()
{
struct node *ptr1 = top;
cout << "\nThe stack is\n";
while (ptr1 != NULL)
{
cout << ptr1->data << " ->";
ptr1 = ptr1->next;
}
cout << "NULL\n";
}
int main()
{
stack s;
int choice;
while (1)
{
cout << "\n-----------------------------------------------------------";
cout << "\n\t\tSTACK MENGGUNAKAN LINKED LIST\n\n";
cout << "1:PUSH\n2:POP\n3:DISPLAY STACK\n4:EXIT";
cout << "\nEnter your choice(1-4): ";
cin >> choice;
switch (choice)
{
case 1:
s.push();
break;
case 2:
s.pop();
break;
case 3:
s.show();
break;
case 4:
return 0;
break;
default:
cout << "\nPlease enter correct choice(1-4)!!";
break;
}
}
return 0;
}

3.3 Lampiran
Tugas 1
#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#define MAX 10

void push(int stack[], int *top, int value);


void pop(int stack[], int *top, int *value);

int main()

int stack [MAX];

int top=-1;

int n, value;

do

do

cout<<"Masukkan nilai yang akan di PUSH:";

cin>>value;

push(stack,&top,value);

cout<<"Tekan 1 untuk melanjutkan:";

cin>>n;

}while(n==1);

cout<<"Tekan 1 untuk melakukan POP:";

cin>>n;

while(n==1)

{
pop(stack,&top,&value);

cout<<"Nilai yang akan di POP:"<<value<<endl;

cout<<"Tekan 1 untu melakukan pop sebuah elemen:";

cin>>n;

cout<<endl;

cout<<"Tekan 1 untuk melanjutkan:";

cin>>n;

}while(n==1);

getche();

return 0;

void push(int stack[], int *top, int value)

if (*top < MAX)

*top=*top+1;

stack[*top]=value;

else

{
cout<<"Stack penuh, PUSH nilai tidak dapat
dilakukan!"<<endl;

exit(0);

void pop(int stack[], int *top, int *value)

if (*top > 0)

*value=stack[*top];

*top=*top-1;

else

cout<<"Stack kosong, POP nilai tidak dapat


dilakukan!"<<endl;

exit(0);

}
Outputnya:
Tugas 2:
#include<iostream>
using namespace std;

struct node
{
int data;
struct node *next;
};

class stack
{
struct node *top;
public:
stack()
{
top = NULL;
}
void push();
void pop();
void show();
};

void stack::push()
{
int value;
struct node *ptr;
cout << "\nPUSH Operationn";
cout << "Enter a number to insert: ";
cin >> value;
ptr = new node;
ptr->data = value;
ptr->next = NULL;
if (top != NULL)
ptr->next = top;
top = ptr;
cout << "\nNew item is inserted to the stack!!!";

void stack::pop()
{
struct node *temp;
if (top == NULL)
{
cout << "\nThe stack is empty!!!";
}
temp = top;
top = top->next;
cout << "\nPOP Operation........\nPoped value is " << temp->data;
delete temp;
}

void stack::show()
{
struct node *ptr1 = top;
cout << "\nThe stack is\n";
while (ptr1 != NULL)
{
cout << ptr1->data << " ->";
ptr1 = ptr1->next;
}
cout << "NULL\n";
}

int main()
{
stack s;
int choice;
while (1)
{
cout << "\n-----------------------------------------------------------";
cout << "\n\t\tSTACK MENGGUNAKAN LINKED LIST\n\n";
cout << "1:PUSH\n2:POP\n3:DISPLAY STACK\n4:EXIT";
cout << "\nEnter your choice(1-4): ";
cin >> choice;
switch (choice)
{
case 1:
s.push();
break;
case 2:
s.pop();
break;
case 3:
s.show();
break;
case 4:
return 0;
break;
default:
cout << "\nPlease enter correct choice(1-4)!!";
break;
}
}
return 0;
}

Outputnya:

Anda mungkin juga menyukai