PENERAPAN STACK MENGGUNAKAN BAHASA PEMROGRAMAN C++ - Copy

* The preview only display some random pages of manuals. You can download full content via the form below.

The preview is being generated... Please wait a moment!
  • Submitted by: Angga Prihadie
  • File size: 594.6 KB
  • File type: application/pdf
  • Words: 1,894
  • Pages: 20
Report / DMCA this file Add to bookmark

Description

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 diincrement 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!"<
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!"<
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 #include #include #include

#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:"<
cout<<"Tekan 1 untu melakukan pop sebuah elemen:"; cin>>n;

} cout<>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 dilakukan!"<
penuh,

PUSH

nilai

tidak

dapat

} }

void pop(int stack[], int *top, int *value) { if (*top > 0) { *value=stack[*top]; *top=*top-1; } else { cout<<"Stack

kosong,

dilakukan!"<
Tugas 2

Nama program: Stack dengan linked list Bahasa pemrograman: Microsoft visual studio Listing program: #include using namespace std;

struct node

POP

nilai

tidak

dapat

{ 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 #include #include #include

#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:"<>n;

} cout<>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

tidak

dapat

dilakukan!"<
void pop(int stack[], int *top, int *value) { if (*top > 0) { *value=stack[*top]; *top=*top-1; } else { cout<<"Stack dilakukan!"<
kosong,

POP

nilai

Tugas 2: #include 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:

: