Share to World

Icon

everything for share

Stack dan aplikasinya dengan C++

PENGERTIAN STACK
Secara sederhana stack bisa diartikan dengan sebagai tumpukan dari benda atau data yang seolah-olah diletakkan di atas data yang lain dimana data yang pertama kali masuk akan terakhir. Didalam suatu stack kita dapat menambah data (PUSH) dan menghapus data (POP) lewat ujung yang sama.

Secara sederhana sebuah stack bisa digambarkan sebagai tumpukan buku yang disimpan dengan cara ditumpuk keatas. Dimana buku yang pertama kali disimpan atau ditumpuk ada di paling bawah dan yang selanjutnya ditumpuk diatasnya. Dan ketika kita melakukan pengambilan buku ototmatis buku yang terkahir ditumpuk atau disimpan terakhir akan mejadi yang pertama diambil, istilah ini kemudian disebut FILO (First In Last Out) dan bertambah atau berkurangnya data melalui satu ujung yang sama yaitu ujung atas tumpukan (Top of Stack).

Dibawah ini saya berikan beberapa contoh aplikasi stack menggunakan bahasa pemrograman C++ yang saya kutip dari berbagai sumber:

///////////////////////////////////////////////////////////// // //
// Implimentation Of STACK using LINKLIST //
// Created By //
// Kaustubh Bhoyar //// // //////////////////////////////////////

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define NULL 0

main()
{ struct node{
int data,n;
struct node *link;};

int n,item;

typedef struct node node;
node *temp,*sp=NULL;
while(1){
//clrscr(); //This program is designed using VC++ Compiler if you are using the Turbo C compiler then you may use clrscr() here
printf(“Please select your choice\n1. PUSH\n2. POP\n3. Search\n4. Display\n5. Ex!t\n”);
scanf(“%d”,&n);

switch(n) {
case 1:
printf(“Enter the data to PUSH into Stack\n”);
scanf(“%d”,&item);
temp=(node *) malloc(sizeof(node));
temp->data=item;
temp->link=sp;
sp=temp;
break;
case 2:
if(sp==NULL)
{
printf(“\nSTACK underflow\n”);
getch();
}
else
{
item=sp->data;
sp=sp->link;
printf(“\nPOP Successful Removed Data Is %d”,item);
getch();
}
break;
case 3:
if(sp==NULL)
{
printf(“\nSTACK underflow\n”);
}
else
{
temp=sp;
printf(“\nEnter data to search from Stack”);
scanf(“%d”,&item);
n=0;
while(temp->data!=item)
{
if(temp->link==NULL)
goto print;
temp=temp->link;
n++;
}
print:
if(temp->data==item)
{
printf(“Data %d Found In Stack at position %d”,item,n+1);
}
else
{
printf(“Data not present in Stack”);
}
getch();
break;
case 4:
if(sp==NULL)
{
printf(“\nSTACK is empty\n”);
}
else
{
temp=sp;
printf(“\n%d”,temp->data);
while(temp->link!=NULL)
{
temp=temp->link;
printf(“\n%d”,temp->data);
}
}
getch();
break;
case 5:
exit(0);
break;
}
}
}
}

Contoh lain:

//Nama file unit tumpukan.h
# include <iostream.h>
# include <stdlib.h>
# include <conio.h>

# define alamat Elemen*

// inisialisasi data dan fungsi yang dibutuhkan
typedef char tInfo;
typedef struct Elemen{
tInfo Info;
alamat Berikut;} tElemen;

typedef struct tTumpukan{
alamat atas;} Tumpukan;

void inisialisasi(Tumpukan* T);
void Push(Tumpukan* T, tInfo info);
void Pop(Tumpukan* T, tInfo* Info);
int tumpukanKosong (Tumpukan T);

//insisialisasi tumpukan
void inisialisasi(Tumpukan* T)
{
T->atas = NULL;
T->bawah = NULL;
}

//Operasi Push
void Push(Tumpukan* T, tInfo info)
{ alamat P;
P = new Elemen;//(alamat) malloc(sizeof(alamat));
P->Info = info;

if (tumpukanKosong(*T)){
P->Info = info;
P->Berikut=NULL;
T->atas =P;
}
else{
P->Info = info;
P->Berikut = T->atas;
T->atas =P;
}
}

// Operasi Pop
void Pop(Tumpukan* T, tInfo* Info)
{ alamat P;
P = T->atas;
*Info = P->Info;
T->atas = T->atas->Berikut;
free(P);
}

// inisialisasi tumpukan kosong
int tumpukanKosong(Tumpukan Q)
{ return ((Q.atas==NULL)); }

//Nama file unit tumpukan.cpp
# include <iostream.h>
# include <stdlib.h>
# include <conio.h>
# include <tumpukan.h>

# define alamat Elemen*

// untuk menampilkan atau mencetak tumpukan
void tampilTumpukan(Tumpukan T)
{ alamat P = T.atas;
cout << “Isi stack : “;
while ((P!=NULL)) {
cout << P->Info << ” – “;
P = P->Berikut;
}
cout << “\n”;
}

// untuk mencetak menu utama
void cetakMenu(){
cout << “***CONTOH TUMPUKAN***“;
cout << “\n 1. Tambah elemen\n”;
cout << “ 2. Hapus elemen\n”;
cout << “ 3. Cetak tumpukan\n”;
cout << “ 4. Selesai\n\n”;
}

// program utama
int main()
{ Tumpukan T;
int selesai;
int pilMenu;
tInfo elm;
inisialisasi(&T);
selesai = 0;
do{
clrscr;
cetakMenu();
cout << “Menu yg dipilih : “;
cin >> pilMenu;
switch(pilMenu) {
case 1 : cout << “\nMasukkan elemen yg ditambahkan : “;
cin >> elm;
Push(&T,elm);
break;
case 2 : if (tumpukanKosong(T)){
cout << “\nTumpukan kosong kosong, tidak bisa dihapus\n”;
}
else{
Pop(&T, &elm);
cout << “\nElemen yang dihapus : ” << elm << “\n”;
}
break;

case 3 : tampilTumpukan(T);
break;
default : selesai = 1;
}
}
while ( !selesai );

return 1;
}

Referensi:

1. http://planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=5671&lngWId=3
2. http://ienx.wordpress.com/2007/05/09/stack-tumpukan/
3. http://www.hatma.info

Advertisements

Filed under: Pemrograman C++

One Response

  1. Teguh pratama says:

    wan aya tugas statistika terapan kelompok, yang 4 orang itu.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Pages

%d bloggers like this: