stack (tumpukan)

May 9, 2007 at 5:06 am | Posted in Informatic | 7 Comments

Definisi stack sebenernya sangat sederhana. Yaitu data yang diletakkan diatas data lainnya. Dalam stack kita bisa menambah,menyisipkan dan menghapus data. Contoh stack dalam kehidupan sehari-hari bisa kita lihat dalam tumpukan piring. Konsep utama stack ini adalah Last In First Out.

Satu hal yang perlu diingat adalah bahwa didalam suatu tumpukan dapat menambah (menyisipkan) data dan mengambil (menghapus) data lewat ujung yang sama yang disebut sebagai ujung atas tumpukan.

Secara sederhana sebuah tumpuykan bisa digambarkan seperti tersaji pada gambar 6.1. Dari gambar tersebut dapat dikatakan bahwa kotak B berada di atas kotak A dan ada di bawah kotak C. Gambar ini hanya menunjukkan bahwa dalam tumpukan hanya dapat menambah atau mengambil sebuah kotak melalui satu ujung, yaitu ujung bagian atas. Dapat dikihat pula bahwa tumpukan merupakan kumpulan data yang sifatnya dinamis, artinya dapat menambah dan mengambil data dari kumpulan data tersebut.


F

E

D

C

B

Gambar 6.1. Tumpukan terdiri 6 kotak

Penyajian stack bisa menggunakan array, namun kurang tepat. Array bisa digunakan kalau elemen stack tidak melebihi batas maksimum. Tipe yang bisa digunakan adalah record. Manipulasi dengan menggunakan record mempunyai dua medan, yaitu medan penyimpanan elemen tumpukan dan medan pencatat posisi ujung atas tumpukan.

3.2.1.a Operasi stack

Dalam Stack terdapat dua operasi, yaitu :

  1. Menyisipkan data (PUSH)

Menambahkan / menyisipkan data ke dalam stack. Kita tidak bisa menambahkan data pada tumpukan yang sudah penuh (overflow).

Algoritma :

 

if t.atas = maxelemen

cout << ”sudah penuh ”;

else

{

// naikkan posisi tumpukan

// tambah isi tumpukan

}

2. Menghapus data (POP)

Menghapus elemen yang ada di posisi paling atas. Menghapus posisi juga akan menghapus elemen. Kita tidak mungkin menghapus elemen ketika tumpukan sudah kosong. (t.atas = 0)

Algoritma :

if t.atas = 0

cout << ”tumpukan kosong ”;

else

{

// kurangi t.atas;

}

contoh program using C++:

 

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));

}

unit tumpukan.cpp

# include <iostream.h>

# include <stdlib.h>

# include <conio.h>

# define alamat Elemen*

# include <tumpukan.h>

// 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;}

 

7 Comments »

RSS feed for comments on this post. TrackBack URI

  1. Mw nnya…pnya tgas ng’knversiin bil.des ke biner tp pke arange!gmm dnx?

  2. maaf gak ada..

  3. maKaci Y……….dah bntu q…

    kpn-kpn bwt contoh programnya queue dunkkkkk………….^_”

  4. makasih ya…….?????????????????

    kamu telah membantu saya.

  5. maz, bisa minta sript untuk membalik kata ato kalimt dengan stack menggunakan C++ cz aq gak tw!

    mohon bantuannya>

  6. Ada stack yg tumpukannya di luar trs masuk ke wadah satu2 n sblkny dari dalam keluar satu2 ga?

  7. thank’s ya pnjlsan singkat anda tentang stack, saya bisa mnylesaikan tugas kuliah saya… ^_^


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

Blog at WordPress.com.
Entries and comments feeds.

%d bloggers like this: