Pages

QUIS 1 ALGORITMA DAN PEMROGRAMAN 2

PROGRAM PENJUALAN LIGHTSTICK KPOP DENGAN MENGGUNAKAN STRUCT, STRUCT ARRAY DAN POINTER

      Pada blog saya kali ini, saya akan menjelaskan tentang program yang saya buat dalam kuis 1 di algoritma dan pemrograman 2, program saya adalah program penjualan lighstick dengan menggunakan struct, struct array dan pointer. langsung saja, saya akan menjelaskan programnya dibawah ini. Berikut penjelasan beserta listing programnya, semoga bermanfaat.

LISTING PROGRAM DAN PENJELASANNYA


      Pada program diatas, saya menggunakan beberapa library pada program yang terdapat pada baris1-4. Pada baris 5, terdapat using namespace std; yang berguna untuk menggantikan penulisan std disetiap penulisan program di dalamnya, agar lebih singkat. Baris ke-7 adalah variabel dari fungsi for di dalam program yang akan dibahas nanti. baris 8 hingga 12 adallah struct dari variabel di dalamnya yang nantinya akan dipanggil bersama kode struct itu sendiri. baris 10 dan 11 adalah variabel beserta tipe datanya yang akan dipanggil oleh struct nantinya. Dan pada baris 12 hingga 28 adalah struct array, dimana data tersedia sesuai array yang telah ditentukan. Sedangkan baris 15 hingga 27 adalah isi dari struct array yang akan di outputkan nantinya. baris 12 dan 28 adalah kode dari struct dan struct array itu sendiri. Pada baris 30 adalah awal dari penulisan kode yang akan ditampilkan sesuai pilihan nantinya. berikut lanjutan dari penulisan kode void pada program yang saya buat





      Akhir dari kode void adalah pada baris 140, dimana dalam kode-kode itu terdapat data output yang akan tampil ketika kode tersebut dipilih. Di dalamnya juga terdapat rumus yang tersimpan, untuk menghitung hasil dari total harga sesuai perintah di dalamnya. Pada baris 142 terdapat int main(), yang berguna untuk menjalankan program dibawahnya yang memerlukan fungsi dari int main() itu sendiri. Pada baris 144 terdapat tipe data string beserta variabel-variabel di sebelahnya yang nantinya akan dibaca oleh program ketika ada pemanggilan variabel. Variabel pada tipe data string disini berguna untuk menampilkan hasil output pada fungsi IF dibawahnya. Pada baris 146 dan 148 adalah output yang berguna sebagai perintah dimana pengguna harus menginputkan data sesuai perintahnya, dan di baris 147 dan 149 adalah fungsi cin yang berguna untuk melakukan fungsi input. Pada baris 150, berfungsi untuk memberi jarak antgar baris atas dan bawah. Kemudian system ("cls") pada baris151 berguna untuk membersihkan layar dari output program yang sebelumnya dan menampilkan output setelahnya. Dalam program saya output yang keluar setelah system ("cls") berkerja adalah baris ke 153 dan 154. Kemudian pada baris 155 dan 156 adalah pemanggilan alamat dari variabel menggunakan pointer, yang menggunakan operasi deference. Dalam program saya, saya amemanggil alamat dari variabel nama dan alamat menggunakan fungsi pointer. Pada baris 157 hingga 160 pada gambar diatas adalah output dari program yang saya buat.





      Pada baris 161 hingga 168 juga merupakan output dari program yang saya buat. Baris 169 hingga 176 merupakan fungsi for untuk array yang telah saya tulis di struct array pada baris 13, jadi, fungsi for disini untuk memanggil data dari struct array yang diminta, kemudian secara otomatis menampilkannya. Baris 177 berkaitan dengan fungsi perulangan goto untuk kembali pada baris yang di tentukan. Pada baris 181 sampai 233, merupakan fungsi if yang menentukan hasil output, karena di dalam fungsi if terdapat pilihan yang berkaitan dengan void sebagai hasil keluaran. Pada baris 234 merupakan perulangan goto. Pada baris 239 sampai 246 merupakan fungsi goto dan pilihannya, jadi jika kita memilih sesuai pilihan maka perulangan akan merespon sesuai perintah. Namun, jika pilihan tidak sesuai, program akan memperingatkan bahwa pilihan salah dan kita tidak dapat melanjutkan program sampai akhir. Pada baris 248, berguna untuk fungsi perulangan goto. Baris 249 hingga 251 merupakan output penutup untuk program sebelum program berakhir. Pada baris 253 hingga 262 merupakan output yang berguna untuk membuka file dan menutup file. jika file dapat dibuat, maka peringatan pada output di baris 263 akan keluar sebagai hasil akhir yang di tampilkan pada layar, jika file tidak berhasil dibuat maka output di baris 265 akan muncul sebagai hasil akhir. Terakhir, return 0;, berguna untuk mengakhiri program.

HASIL RUNNING

      Berikut hasil output dari program yang saya buat.

      Hasil output di atas menampilkan nama pelanggan yang sudah diinputkan beserta umurnya. Lalu di bawahnya terdapat alamat dari variabel nama dan umur yang sudah diinputkan secara otomatis oleh komputer. Kemudian daftar lightstick yang ada pada hasil running di atas adalah hasil dari fungsi array yang tadi telah dibuat di dalam struct array. Setelah memasukkan nomor lightstick yang akan dibeli maka akan muncul keterangan terkait dengan lightstick yang dipilih di bawahnya, output ini merupakan hasil dari fungsi if dalam program. Selanjutnya adalah total harga dari jumlah lighstick yang dibeli setelah memasukkan jumlah lightstick yang akan dibeli. Output ini merupakan hasil dari perhitungan rumus dalam void yang secara otomatis menghitung data input kita dengan angka di dalamnya, sehingga hasil yang muncul adalah hasil akhirnya. Jadi, pengguna tidak perlu menghitung denagn susah payah lagi. Kemudian di bawahnya terdapat menu apakah pengguna ingin mengulang atau tidak, pengguna harus memasukkan data sesuai perintah yang ada agar program dapat berjalan. Output ini merupakan hasil dari fungsi perulangan goto. Jika pengguna memilih 2 (tidak mengulang), sesuai aturan program. Maka program akan berhenti dan tidak akan mengulang dari awal. Namun, ketika pengguna memilih angka 1 (mengulang) maka secara otomatis program akan terulang kembali.

HASIL OUTPUT FILE TXT


      Sekian sedikit ilmu yang dapat saya bagi untuk teman-teman sekalian, semoga dapat bermanfaat dan menjadi referensi untuk membuat program ynag lebih baik lagi bagi teman teman sekalian. Terimakasih sudah berkunjung ke blog saya.

MATERI QUEUE ALGORITMA DAN PEMROGRAMAN 2

Queue

1. Pengertian queue

      Kaidah utama dalam konsep queue adalah FIFO yang merupakan singkatan dari First In First Out, artinya adalah data yang pertama kali dimasukkan atau disimpan, maka data tersebut adalah yang pertama kali akan diakses atau dikeluarkan. Analoginya sama dengan antrian di sebuah loket pembelian tiket kereta, orang yang datang lebih dahulu, maka akan dilayani terlebih dahulu, dan akan selesai lebih dulu dari orang-orang yang datang setelahnya.
      Queue adalah suatu kumpulan data yang mana penambahan data atau elemen hanya dapat dilakukan pada sisi belakang, sedangkan penghapusan atau pengeluaran elemen dilakukan pada sisi depan. Antrian queue dapat diartikan sebagai suatu kumpulan data yang seolah olah terlihat seperti ada data yang diletakkan di sebelah data yang lain.
      Antrian dapat dibuat baik dengan array maupun dengan struct. Pada pembuatan antrian dengan array, antrian yang disajikan bersifat statis. Ini disebabkan oleh jumlah maksimal array yang sudah ditentukan sejak deklarasi awal. Seperti pada gambar di bawah ini.


2. Deklarasi queue

      Sebuah queue di dalam program komputer dideklarasikan sebagai sebuah tipe bentukan baru,di dalam Bahasa C, biasa disebut struct. Sebuah struktur data dari sebuah queue setidaknya harus mengandung dua tiga variabel, yakni variabel HEAD yang akan berguna sebagai penanda bagian depan antrian, variabel TAIL yang akan berguna sebagai penanda bagian belakang antrian dan ARRAY DATA dari yang akan menyimpan data-data yang dimasukkan ke dalam queue tersebut. Berikut adalah syntax untuk mendeklarasikan struktur data dari sebuah queue menggunakan Bahasa C :

typedef struct
{
int HEAD, TAIL;
int data[max+1];
}Queue;

      Dimana, nilai MAX didefinisikan sebagai jumlah tumpukan maksimum yang dapat disimpan dalam queue. Setelah strukutr data dari queue didefinisikan dengan syntax di atas, maka setelah itu dapat dibuat variabel-variabel baru yang mengacu pada tipe data Queue di atas, misalkan membuat sebuah variabel bernama antrian yang bertipe Queue :

Queue antrian;

      Dalam tulisan ini, sebuah queue didefinisikan dengan array berukuran MAX + 1, maksudnya adalah agar elemen array ke-0 tidak digunakan untuk menyimpan data, melainkan hanya sebagai tempat „singgah‟ sementara untuk variabel HEAD dan TAIL. Sehingga, jika HEAD dan TAIL berada pada elemen array ke-0, berarti queue tersebut dalam kondisi kosong (tidak ada data yang disimpan).

      Berikut gambaran dari queue dengan array, beserta operasi dalam programnya.
      Dalam queue, terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya. Sehingga membutuhkan variabel Head dan Tail.


Operasi Create()
• Untuk menciptakan dan menginisialisasi Queue
• Dengan cara membuat Head dan Tail = -1

Operasi IsEmpty()
• Untuk memeriksa apakah Antrian sudah penuh atau belum
• Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty bernilai benar
• Tidak memeriksa Head, karena Head adalah tanda untuk kepala
antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah
• Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian
kebelakang, yaitu menggunakan nilai Tail


Operasi IsFull()
• Untuk mengecek apakah Antrian sudah penuh atau belum, jika antrian [enuh maka bernilai benar
• Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1
adalah batas elemen array pada C) berarti sudah penuh


Operasi Enqueue(data)
• Untuk menambahkan elemen ke dalam Antrian, penambahan elemen
selalu ditambahkan di elemen paling belakang
• Penambahan elemen selalu menggerakan variabel Tail dengan cara
increment counter Tail


Operasi Dequeue()
• Digunakan untuk menghapus elemen terdepan atau pertama, dari Antrian
• Dengan cara mengurangi counter Tail dan menggeser semua elemen
antrian kedepan.
• Penggeseran dilakukan dengan menggunakan looping


Operasi Clear()
• Untuk menghapus elemen-elemen antrian dengan cara membuat Tail dan
Head = -1
• Penghapusan elemen-elemen antrian sebenarnya tidak menghapus
arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1
sehingga elemenelemen antrian tidak lagi terbaca


Operasi Print()
• Untuk menampilkan nilai-nilai elemen Antrian
• Menggunakan looping dari head hingga tail

      Perbedaan antara stack dan queue terdapat pada aturan penambahan dan
penghapusan elemen. Pada stack, operasi penambahan dan penghapusan elemen
dilakukan di satu ujung. Elemen yang terakhir kali dimasukkan akan berada paling dekat dengan ujung atau dianggap paling atas sehingga pada operasi penghapusan, elemen teratas tersebut akan dihapus paling awal, sifat demikian dikenal dengan LIFO. Pada queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen selalu dilakukan melalui salah satu ujung antrian, menempati posisi di belakang elemen-elemen yang sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling awal atau elemen terdepan. Sifat yang demikian dikenal dengan FIFO (first in first out).

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#define MAX 10
28
typedef struct
{
int data[MAX];
int head;
int tail;
} Queue;
Queue antrian;
void Create()
{
antrian.head=antrian.tail=-1;
}
int IsEmpty()
{
if(antrian.tail==-1)
return 1;
else
return 0;
}
int IsFull()
{
if(antrian.tail==MAX-1) return 1;
else return 0;
}
void Enqueue(int data)
{
if(IsEmpty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
cout<<"Data "<<antrian.data[antrian.tail]<<"
Masuk!!";
}
else if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
cout<<"Data "<<antrian.data[antrian.tail]<<"
Masuk!!";
}
else if (IsFull() == 1)
{
cout<<"Ruangan Penuh!!"<<endl;
cout<<data<<" Ga Bisa Masuk!!";
}
}
29
void Dequeue()
{
int i;
int e = antrian.data[antrian.head];
if (antrian.tail == -1)
{
cout<<"Ga Ada Antrian... Data Kosong"<<endl;
}
else
{
for(i=antrian.head;i<=antrian.tail-1;i++)
{
antrian.data[i] = antrian.data[i+1];
}
antrian.tail--;
cout<<"Data yang Keluar lebih dulu = "<<e<<endl;
}
}
void Clear()
{
antrian.head=antrian.tail=-1;
cout<<"Duh Lega, Ruangan Jadi Ga Sumpek...."<<endl;
cout<<"Data Clear...";
}
void Tampil()
{
if(IsEmpty()==0)
{
cout<<"Data Dalam Antrian"<<endl;
cout<<"==========================="<<endl;
cout<<endl;
for(int i=antrian.head;i<=antrian.tail;i++)
{
cout<<"| "<<antrian.data[i]<<" |";
}
}
else cout<<"Ga Ada Antrian... Data Kosong";
}
void main()
{
int pil;
int data;
Create();
do
{
clrscr();
cout<<"Implementasi Antrian dengan Struct"<<endl;
cout<<"=================================="<<endl;
cout<<endl;
30
cout<<"1. Enqueue(Push)"<<endl;
cout<<"2. Dequeue(PoP)"<<endl;
cout<<"3. Print"<<endl;
cout<<"4. Clear"<<endl;
cout<<"5. Exit"<<endl;
cout<<"Pilihan Anda= "; cin>>pil;
switch(pil)
{
case 1:
{
cout<<endl;
cout<<"Data = "; cin>>data;
Enqueue(data);
break;
}
case 2:
{
cout<<endl;
Dequeue();
break;
}
case 3:
{
cout<<endl;
Tampil();
break;
}
case 4:
{
cout<<endl;
Clear();
break;
}
}
getch();
} while(pil!=5);
}

3. Perbedaan Stack dan Queue

      Stack memakai sistem LIFO atau last in first out (yang pertama masuk akan keluar terakhir, begitu pula yang terakhir masuk akan keluar pertama kali) apabila kita mengahapus data untuk keluar, maka data yang terakhirlah yang akan terhapus atau keluar terlebih dahulu.
      Sementara queue memakai siste FIFO atau first in first out (yang pertama masuk akan keluar pertama, begitu pula yang masuk terakhir akan keluar terakhir) yang apabila kita menghapus atau mengeluarkan data, maka data yang pertamalah yang akan terhapus atau keluar terdahulu dan data yang terakhir akan terhapus atau keluar terakhir.

      Perbedaan juga terletak pada operasi yang digunakan pada keduanya.
Operasi pada stack :
- Push : digunakan untuk menembah item pada Stack pada Tumpukan paling atas.
- Pop : digunakan untuk mengambil item pada Stack pada Tumpukan paling atas.
- Clear : digunakan untuk mengosongkan Stack.
- Create Stack : membuat Tumpukan baru S, dengan jumlah elemen kosong.
- MakeNull : mengosongkan Tumpukan S, jika ada elemen maka semua elemen dihapus.
- IsEmpty : fungsi yang digunakan untuk mengecek apakah Stack sudah kosong.
- Isfull : fungsi yang digunakan untuk mengecek apakah Stack sudah penuh.

Operasi pada Queue :
- Create Queue (Q) : membuat antrian baru Q, dengan jumlah elemen kosong.
- Make NullQ (Q) : mengosongkan antrian Q, jika ada elemen maka semua elemen dihapus.
- EnQueue : berfungsi memasukkan data kedalam antrian.
- DeqQueue : berfungsi mengeluarkan data terdepan dari antrian.
- Clear : Menghapus seluruh Antrian
- IsEmpty : memeriksa apakah antrian kosong
- IsFull : memeriksa apakah antrian penuh

4. Queue dengan linked-list

      Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode linked list yang digunakan adalah double linked list. Operasi-operasi Queue dengan Double Linked List :
1.  IsEmpty
      Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head masih menunjukkan pada Null atau tidak. Jika benar berarti queue masih kosong.
2.  IsFull
      Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bias menampung data dengan cara mengecek apakah Jumlah Queue sudah sama dengan MAX_QUEUE atau belum. Jika benar, maka queue sudah penuh.
3. EnQueue
      Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (head dan tail mula-mula meunjukkan ke NULL).
4. DeQueue
      Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan dengan cara menghapus satu simpul yang terletak paling depan (head).

5. Penerapan Queue

Dalam kehidupan sehari-hari.
- Pada Pembelian Tiket
      Dalam kehidupan sehari-hari kita bisa dapati melalui penerapan pembelian tiket kereta api, tiket pesawat, tiket kapal laut, pembayaran tiket tol, pembayaran listrik, pembayaran air, dan lain sebagainya. Saat mengantri di loket untuk membeli tiket. Istilah yang cukup sering dipakai seseorang masuk dalam sebuah antrean adalah enqueue. Dalam suatu antrean, yang datang terlebih dahulu akan dilayani lebih dahulu. Istilah yang sering dipakai bila seseorang keluar dari antrean adalah dequeue. Walaupun berbeda implementasi, struktur data queue setidaknya harus memiliki operasi-operasi sebagai berikut :
a.EnQueue       : Memasukkan data ke dalam antrean
b.DeQueue       : Mengeluarkan data terdepan dari antrean
c. Clear             : Menghapus seluruh antrean
d. IsEmpty        : Memeriksa apakah antrean kosong
e. IsFull            : Memeriksa apakah antrean penuh

Penerapannya dalam aplikasi pembelian tiket kereta api :
a. Enqueue        : Seseorang membeli tiket melalui tempat pembayaran tiket yang disediakan.
b. Dequeue        : Setelah membeli tiket, langsung menuju tempat penungguan kereta, dengan sebelumnya petugas memeriksa cek tiket tersebut.
c. Clear              : Pembeli tiket tersebut telah terhapus dari antrean karena sudah melewati pembayaran administrasi tersebut.
d. IsEmpty        : Petugas tiket Kereta melihat tidak ada lagi yang ingin membeli tiket kereta.
e. IsFull             : Petugas Tiket Kereta melihat masih ada pembeli tiket kereta.

Dalam aplikasi komputer
Pada Aplikasi Download Manager IDM
      Queue juga dipakai sebagai salah satu fitur dari Internet Download Manager atau yang biasa disebut dengan IDM. Fitur ini sangat membantu bagi para pecinta download. Fitur ini akan membantu pengguna untuk mendownload file yang dipilih satu-persatu, jadi sebanyak apapun mendownload, tetapi akan tetap dibuat antrean atau istilahnya queueing. Sistem yang diterapkan dalam fitur ini digunakan pada saat download file, maka IDM akan mendownload satu per satu, hingga download file selesai maka baru akan secara otomatis mendownload file berikutnya.

- Pada printer sharing
      Pada suatu jaringan terdapat beberapa aplikasi yang dapat membantu kita untuk mempermudah pekerjaan kita untuk melakukan cetak hanya dengan menggunakan 1 printer yang dapat dipakai oleh banyak orang yaitu dengan cara printer sharing. Aplikasi ini menggunakan cara kerja queue atau juga disebut dengan antrean, untuk mencetak suatu document yang hanya menggunakan 1 printer yang dapat diakses oleh orang banyak, penggunaan queue diperlukan untuk mengatur sistem jaringan agar tidak terjadi error, dengan cara siapa yang terlebih dahulu mencetak suatu dokumen, dia akan dilayani terlebih dahulu untuk mencetak dokumen dan jika ada seseorang yang ingin mencetak dokumen dia akan dimasukan kedalam antrian dan menunggu untuk dapat mencetak sebuah document.

Dalam sistem produksi
      Dalam sistem produksi terdapat banyak sekali aplikasi antrean, misalnya pada mesin pengisi (filling) botol minuman otomatis di pabrik. Mesin ini digunakan agar mempermudah pekerjaan, meminimalisir waktu, dan masih banyak lagi manfaat lainnya. Cara kerja dari mesin filling otomatis ini yaitu :

1. Beberapa botol disiapkan pada tempatnya.
2. Kemudian mesin akan mengisi air kedalam botol sesuai dengan posisinya.
3. Botol yang diletakkan paling depan akan diisi oleh mesin paling awal, setelah botol paling depan terisi baru akan berjalan ke botol yang dibelakangnya, dan seterusnya.
      Prinsip queue atau antrean digunakan dalam mesin ini, karena FIFO (First In First Out). Jadi botol yang paling awal sampai pada pengisi air, maka botol itu juga yang akan pertama keluar setelah diisi.

6. Queue berprioritas

      Dalam antrean yang telah dibahas di atas, semua elemen yang masuk dalam antrean dianggap mempunyai prioritas yang sama, sehingga elemen yang masuk lebih dahulu akan diproses lebih dahulu. Dalam praktek, elemen-elemen yang akan masuk dalam suatu antrean ada yang dikatakan mempunyai prioritas yang lebih tinggi dibanding yang lain. Antrean yang demikian ini disebut dengan antrean berprioritas (priority queue).  Dalam antrean berprioritas, setiap elemenn yang akan msuk dalam antrean sudah ditentukan lebih dahulu prioritasnya.

7. Kelebihan dan kekurangan queue

- Kelebihan
      Data yang pertama masuk maka akan pertama dilayani.
- Kelemahan
      Data yang terakhir masuk, bila waktu pelayanan habis kemungkinan bisa tidak dilayani.

























Referensi :

http://allaboutalgoritma.blogspot.com/2009/07/queue.html
http://algoritmamu.blogspot.com/2017/01/stack-dan-queue.html
https://www.academia.edu/32592023/LAPORAN_PRAKTIKUM_5_ALGORITMA_STRUKTUR_DATA-QUEUE
https://www.cappluse.com/2018/02/dasar-analisis-algoritma-queue-atau.html

MATERI STACK ALGORITMA DAN PEMROGRAMAN 2

ALGORITMA DAN PEMROGRAMAN 2


MATERI STACK

1. Pengertian stack

      Stack merupakan bentuk struktur data seperti tumpukan yang memiliki konsep Last In First Out (LIFO). Bermakna, data yang terakhir masuk merupakan data yang paling pertama dikeluarkan. Stack hanya memiliki satu pintu saja. Satu pintu itu untuk masuk dan keluar. dapat dibayangkan seperti menyusun buku ke dalam kotak. Maka buku yang dimasukkan terakhirlah yang harus dikeluarkan pertama kali.
      Stack atau tumpukan, merupakan salah satu teknik dalam struktur data yang cukup mudah dipahami. Biasanya kita akan menjumpai topik ini pada awal materi setelah mempelajari array, karena array dibutuhkan dalam implementasi stack. Beberapa macam struktur data lain memiliki algoritma yang lebih rumit bila dibandingkan dengan stack. ilustrasi stack sapat digambarkan sebagai berikut.
      Untuk menjelaskan pengertian diatas kita dapat mengambil contoh sebagai berikut. Misalnya kita mempunyai dua buah kotak yang kita tumpuk, sehingga kotak kita terletak 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.


2. Penggunaan stack

      Pada beberapa literatur menyebutkan, bahwa stack umumnya digunakan untuk memisahkan ekspresi aritmatika.Stack dapat digunakan untuk mengubah notasi infix menjadi postfix.

3. Algoritma stack

a. Algoritma push
      Kita bisa melakukan Push data atau memasukkan data jika Top terletak pada indeks yang bernomor kurang dari n-1 (<n-1). Ilustrasinya seperti pada kondisi Stack Bisa Diisi. Kemudian jika Top<n-1 kita melakukan proses untuk memindah Top ke Top+1. Lalu data yang kita masukkan tadi akan mengisi Top.

Contoh lain :
public void push(String value) {
   stack[++top] = value;
}


b. Algoritma pop
      Kita Bisa Melakukan Pop data atau mengeluarkan data jika Top terletak lebih dari indeks -1 (Top>-1). Ilustrasinya seperti pada Kondisi Stack yang memiliki isi. Kemudian data yang ada pada Top akan dipindahkan ke variabel x. Yang kemudian nanti dapat menampilkan data yang di pop.

Contoh lain :
public String pop() {
   return stack[top — ];
}

c. IsEmpty()
      Operasi untuk memeriksa apakah suatu stack kosong atau tidak. Bila stack dalam keadaan kosong, maka empty akan menghasilkan nilai TRUE, sebaliknya akan bernilai FALSE. Berikut contoh programnya.
public boolean isEmpty() {
   return top == -1;
}

d. IsFull()
      Operasi untuk memeriksa apakah stack sudah penuh atau belum. Bila stack sudah penuh, akan mengembalikan nilai TRUE, dan kondisi sebaliknya bernilai FALSE. berikut contoh programnya.
public boolean isFull() {
   return top == max-1;
}

      Jika melakukan operasi POP(e) sebanyak 2 kali lagi maka akan terjadi UNDERFLOW, yaitu suatu keadaan dimana tidak ada lagi elemen didalam stack yang dapat di ambil.
      Karena itu untuk operasi POP(e) selalu terkait dengan pengecekan status stack, apakah stack dalam keadaan kosong, apabila pada pengecekan dengan EMPTY(S) menghasilkan nilai TRUE, maka operasi POP(e) tidak bisa dilakukan. Begitu pula sebaliknya pada operasi PUSH(e,S) tidak dapat dilakukan apabila stack penuh. Dalam hal ini, fungsi FULL(S) menghasilkan nilai TRUE. Nilai TRUE yang dihasilkan oleh fungsi FULL(S) dikarenakan terdapatnya batas jumlah elemen dalam stack.

Berikut adalah contoh program stack dalam bahasa pemrograman C++, beserta hasil runningnya.




Untuk program yang lebih detail, disini saya memiliki contoh program yang ditulis lebih rinci. Berikut contoh program stack, beserta hasil running nya.

#include <conio.h>
#include <stdlib.h>
#define max 4

using namespace std;

struct Tumpukan
{
int atas;
int data[max];//array
}T;//T sebagai objek, jadi T ynag akan diakses kemana pun dia pergi

void awal()
{
T.atas=-1;
}

int kosong()
{
if(T.atas==-1)
return 1;
else
return 0;
}

int penuh()
{
if(T.atas==max-1)
return 1;
else
return 0;
}


void input(int data)
{
if(kosong()==1)
{
T.atas++;//T.atas=T.atas+1;
T.data[T.atas]=data;
cout<<"Data awal "<<T.data[T.atas]<<" masuk ke stack";
}

else if(penuh()==0)
{
T.atas++;
T.data[T.atas]=data;
cout<<"Data selanjutnya "<<T.data[T.atas]<<" masuk ke stack";
}

else
cout<<"Tumpukan penuh";
}

void hapus()
{
if(kosong()==0)
{
cout<<"Data teratas sudah terambil";
T.atas--;//T.atas=T.atas-1;
}
else

cout<<"Data kosong";
}

void tampil()
{
if(kosong()==0)
{
for(int i=T.atas;i>=0;i--)
{
cout<<"\nTumpukan ke "<<i<<"="<<T.data[i];
}
}
else

cout<<"Tumpukan kosong";
}

void bersih()
{
T.atas=-1;

cout<<"Tumpukan kosong!";
}

//--------------------------------------->
int main()
{
int pil,data;
awal();
do
{
system("cls");
cout<<"1. Input (PUSH)\n2. Hapus (POP)\n3. Tampil\n4. Bersihkan\n5. Keluar\nMasukkan pilihan :";
cin>>pil;
switch(pil)
{
case 1:cout<<"Masukkan data = ";cin>>data;
input(data);
break;
case 2:hapus();
break;
case 3:tampil();
break;
case 4:bersih();
break;
//case 5:top();
// break;
// case 6:isempty();
// break;
// case 7:Noel()
//break
case 8:
cout<<"Terimakasih, tekan enter untuk keluar";
}
getch();
}
while(pil!=5);
}

Hasil running

Ini adalah tampilan hasil output menu dari program stack, terdapat beberapa menu di dalamnya.


Berikutnya adalah hasil output ketika memilih menu nomor 1, yaitu input atau push

  

Kemudian hasil running ketika memilih menu nomor 2, yaitu hapus data dari stack atau pop.


Lalu hasil running dari hasil memilih menu nomor 3, yaitu menu untuk menampilkan tumpukan data dalam stack.

   

Hasil running ketika memilih menu nomor 4, yaitu menghapus stack, atau menu is empty pada program.

 

Kemudian yang terakhir adalah menu ke 5, keluar dari proghram stack.

 

4. Pemanfaatan stack

      Salah satu pemanfaatan stack adalah untuk menulis ungkapan dengan menggunakan notasi tertentu. Seperti kita ketahui, dalam penulisan ungkapan numeris, kita selalu menggunakan tanda kurung untuk mengelompokkan bagian mana yang akan dikerjakan terlebih dahulu.
Sebagai contoh, perhatikan ungkapan berikut ini.

(C+D) * (E-F)

      Dari contoh diatas (C+D) akan dikerjakan lebih dahulu, kemudian baru (E-F) dan hasilnya akan dikalikan. Lain halnya dengan contoh berikut ini.

C+D*E-F

      D*E akan dikerjakan terlebih dahulu, kemudian diikuti yang lain. Dalam hal ini pemakaian tanda kurung sangat penting karena akan mempengaruhi hasil akhir. Cara penulisan ungkapan sering disebut dengan notasi infix , yang artinya bahwa operator ditulis diantara 2 operator.
      Seorang ahli matematika yang bernama Jan Lukasiewiccz kemudian mengembangkan suatu cara penulisan ungkapan numeris yang kemudian dikenal dengan nama notasi prefix, yang artinya adalah bahwa operator ditulis sebelum kedua operand yang akan disajikan.

Perhatikan contoh dari notasi infix dan prefix berikut ini.

Infix                       Prefix
A+B                       +AB
A+B-C                   -+ABC
(A+B)*(C-D)        *+AB-CD

5. Kelebihan dan kekurangan stack

A. Kelebihan
      penambahan dan penghapusan data dapat dilakukan dengan cepat, yaitu O (1), selama memori masih tersedia, penambahan data bisa terus dilakukan. Dengan demikian tidak ada kekhawatiran terjadinya stack overflow.

B. Kelemahan
      Setiap sel tidak hanya menyimpan value saja, melainkan juga pointer ke sel berikutnya. Hal ini menyebabkan implementasi stack memakai linked list dan memerlukan memori yang lebih banyak dari pada di implementasikan dengan Array. Tiap elemen pada linked list hanya bisa diakses dengan cara sekuensial, sehingga lambat, yaitu O (n).


























Referensi :

http://arna.lecturer.pens.ac.id/Praktikum_ASD/02%20Stack.pdf
http://vandedjoel.blogspot.com/2016/05/makalah-stack-beserta-contoh-programnya.html
http://suputradwipratama274.blogspot.com/2015/06/v-behaviorurldefaultvmlo.html
 

Copyright © Yunitaa's Creations. Template created by Volverene from Templates Block
WP by Simply WP | Solitaire Online