Anda di halaman 1dari 5

Modul 21 : Stack

Tujuan :
1. Mahasiswa mampu memahami tipe data stack
2. Mahasiswa mampu membuat program insert data pada stack

Peralatan Pendukung :
1. Modul Praktikum (Cetak)
2. Aplikasi Dev c++

1. Teori Dasar
Stack merupakan sebuah kumpulan data yang diletakkan di atas data lainya, seperti sebuah
tumpukan. Dengan demikian, stack merupakan salah satu struktur data yang menerapkan
prinsip LIFO (Last In First Out). Dimana elemen yang terakhir disimpan dalam stack, menjadi
elemen yang pertama diambil. Untuk meletakkan sebuah elemen pada bagian atas dari
stack, maka dilakukan operasi push. Sedangkan untuk memindahkan sebuah elemen dari
tempat atas tersebut dalam sebuah stack, maka dilakukan operasi pop.

OPERASI PADA STACK


 Create
Merupakan operator yang berfungsi untuk membuat sebuah stack kosong.
 IsEmpty
Merupakan operator yang berfungsi untuk menentukan apakah suatu stack merupakan
stack kosong. Tanda bahwa sebuah stack kosong adalah Top bernilai kurang dari nol (-1).
 IsFull
Merupakan operator yang digunakan untuk memeriksa apakah stack yang ada sudah
penuh. Stack akan penuh jika puncak stack terletak tepat dibawah jumlah maksimum
yang dapat ditampung stack (Top = MAX_STACK-1).
 Push
Merupakan operator yang berfungsi untuk menambahkan satu elemen ke dalam stack
dan tidak dapat dilakukan jika stack dalam keadaan penuh.
 Pop
Merupakan operator yang berfungsi untuk mengeluarkan satu elemen teratas dari
dalam stack dengan syarat stack tidak dalam kondisi kosong.

Hal | 147
 Clear
Fungsi yang digunakan untuk mengosongkan stack dengan cara mengeset Top dengan -
1. Jika Top bernilai kurang dari nol maka stack dianggap kosong.

2. Praktikum
Praktikum 1 : Stack Dengan Menggunakan Array dan Struct
#include <iostream>
#include <stdlib.h> // menggunakan system("cls")
#include <conio.h> // menggunakan getch()
#define MAX 10 // batas stack yang ingin dibuat, boleh lebih
using namespace std;
int top=-1, Stack[MAX];
void push(){
if(top == MAX-1){
cout << ">> Stack sudah Penuh !" << endl;
}else{
top++;
cout << ">> Masukan Data : ";
cin >> Stack[top];
cout << "Pada Index ke " << top << " ";
cout << "Data [" << Stack[top] << "] Telah Ditambah ! " << endl;
}
}

void pop(){
if(top == -1){
cout << ">> Stack Kosong !" << endl;
}else{
cout << "Data [" << Stack[top] << "] pada index ke " << top << "
dalam Stack Diambil !" << endl;
Stack[top--];
}
}

int clearr(){
return top = -1;
}

void Print(){
if (top == -1) {
cout << " Stack : ";
cout << "\n===========================" << endl;
cout << "Empty ! \n===========================" << endl;
}
else {
cout << "Stack : ";
cout << "\n===========================" << endl;
for (int i = top; i >= 0; i--){
cout << " XXXXX[ " << Stack[i] << " ]XXXXX" << endl;
}
cout << "===========================" << endl;
}
}

int main()
{
int choose;
do {
Print();
cout << "\n1. Push"
<< "\n2. Pop"
Hal | 148
<< "\n3. Clear"
<< "\n4. Exit"
<< "\nCodeProgram ismynr.xyz"
<< "\nPergerakan ( TOP ) : " << top
<< "\n\n>> Choose : "; cin >> choose;
switch (choose){
case 1:
push();getch();
break;
case 2:
pop();getch();
break;
case 3:
clearr();
cout << "\nClear Succes" << endl;
getch();
break;
case 4:
cout << "Terima Kasih telah menggunakan program ini :)" <<
endl;
getch();
break;
default:
cout << "Pilihan tidak ada\nMasukan pilihan sesuai dengan
daftar" << endl;
getch();
break;
}
system("cls");
}while(choose !=4);
}

Analisa Program Praktikum 1


1. Dapatkan kita mengakses stack secara acak ? Jelaskan jawaban Anda?
2. Apakah memungkinkan kita membuat stack dimana jumlah tumpukannya tidak terbatas? Dan
bagaimana cara membuat variable stacknya?

Praktikum 2 : Stack Dengan Menggunakan Single Linked List


#include<stdio.h>
#include<stdlib.h>

typedef int ItemType;


typedef struct simpul node;
struct simpul
{
ItemType item;
node *next;
};

struct Stack{
node *TOS;
};

node *baru;

void awal()
{
puts("===================================================");
puts("= PROGRAM STACK DENGAN LINKED LIST =");
puts("===================================================\n");
}
Hal | 149
void allocate_node(ItemType x)
{
baru = (node *) malloc (sizeof(node));
if(baru==NULL)
{
printf("Alokasi Gagal\n");
exit(1);
}
else
{
baru->item=x;
baru->next=NULL;
}
}

void inisialisasi(Stack *s)


{
s->TOS = NULL;
}

int kosong(Stack *s)


{
return s->TOS==NULL;
}

void push(Stack *s)


{
baru->next = s->TOS;
s->TOS = baru;
}

ItemType pop(Stack *s)


{
node *temp;
if(kosong(s))
{
printf("Data Kosong\n");
return ' ';
}
else
{
temp = s->TOS;
s->TOS = s->TOS->next;
return temp->item;
free(temp);
temp=NULL;
}
}

void tampil(Stack *s)


{
Stack bantu;
bantu = *s;
printf("\nData Simpul ==> ");
while(bantu.TOS!=NULL)
{
printf("%d ", bantu.TOS->item);
bantu.TOS = bantu.TOS->next;
}
printf("\n\n");
}

Hal | 150
int main()
{
int pilih, data;
char lagi='y';
Stack ujung;

inisialisasi(&ujung);
while(lagi=='y')
{
system("CLS");
awal();
//tampil(&ujung);
printf("Menu Pilihan : \n");
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Tampilkan Stack\n");
printf("\nPilih No : ");
scanf("%d", &pilih);
switch(pilih)
{
case 1:
printf("Masukkan data : ");
scanf("%d", &data);
allocate_node(data);
push(&ujung);
break;
case 2:
pop(&ujung);
break;
case 3:
tampil(&ujung);
break;
}
fflush(stdin);
printf("Lagi (y/t) ? ");
scanf("%c", &lagi);
}
}
Analisa Program Praktikum 2
Apakah memungkinkan kita membuat struktur data Stack dengan menggunakan Single Linked List
Circular? Berikan penjelasan jawaban Anda

5. Latihan (Menara Hanoi)


Soal : Terdapat tiga buah tiang yaitu A, B, C. Pada tiang A terdapat 3 lempeng cakram. Pindahkanlah
semua lempengan cakram di tiang A ke tiang C dengan syarat : Lempengan yang diatas harus lebih kecil
dari lempengan dibawahnya. Tuliskanlah urutan prosesnya.

6. Tugas
Buatlah program untuk kasus diatas (Menara Hanoi) dimana jumlah lempengannya bisa di inputkan
user.

Hal | 151

Anda mungkin juga menyukai