Stack

Arti istilah stack dianggap berkaitan erat dengan pengertian berikut :
Tumpukan, bertumpuk, bertimbun. Stack merupakan tumpukan data yang disimpan pada media penyimpanan.
1. Definisi Dari Operasi Dasar Dari Stack
Stack merupakan suatu kumpulan data yang seolah-olah ada data yang diletakkan di atas data yang lain. Dimana kita dapat menambah (menyisip) data, dan mengambil (menghapus) data lewat ujung yang sama, yang disebut sebagai ujung atas tumpukan (top of stack).
Stack bersifat LIFO (Last In First Out), yang berarti data yang terakhir masuk ke dalam stack akan menjadi data pertama yang dikeluarkan dari stack. Secara sederhana sebuah stack dapat kita ilustrasikan sebagai berikut:

2. Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori. Karena stack dapat direpresentasikan menggunakan array maka suatu stack memiliki beberapa bagian yaitu:
a. Top yang menunjuk posisi data terakhir.
b. Elemen yang berisi data yang ada dalam stack. Bagian inilah yang berbentuk array.
c. Maks_elemen yaitu variabel yang menunjuk maksimal banyaknya elemen dalam stack.

Contoh pendeklarasian dalam bahasa C adalah:
Deklarasi Kelas stack generic
#include
#include
#include
#define MAX 20
//definisi tipe generik
template
//definisi kelas temstack
class temstack {
protected:
static unsigned stacknum; //jumlah objek stack
unsigned number; //jumlah elemen stack
object data[MAX];
public:
temstack();
virtual ~temstack();
unsigned len(void) const {return(number); };
unsigned stacklen(void) const {return(stacknum); };
void push (object);
object pop(void);
#ifdef _CHARPTR
void pop (char * ); //khusus untuk char *
#endif
};
Mendefinisikan Fungsi-fungsi kelas stack generik

//inisialisasi stacknum
template
unsigned temstack::stacknum=0;
//konstruktor
template
temstack::temstack() {
number = 0;
stacknum++;
};
//destruktor
template
temstack::~temstack() {
stacknum–;
};
//definisi fungsi anggota
template
void temstack::push(object gendata) {
if (number < MAX) data[number++] = gendata;
else cout << "stack overflow";
}
#ifdef _CHARPTR
//fungsi spesiifik untuk char *
void temstack::push(char * szdata ) {
if ( number < MAX ) {
//ciptakan salinan string
char *temp = new char [ strlen(szdata)+1 ];
strcpy ( temp, szdata );
//simpan penunjuknya
data[number++] = temp;
}
else cout << "stack overflow";
}
#endif
template
object temstack::pop(void) {
if (number > 0 ) return (data[–number]);
else cout << " stack underflow" ;}
#ifdef _CHARPTR
//fungsi spesifik untuk char *
void temstack::pop( char * szdata) {
if ( number < MAX ) {
//kembalikan salinan string
char *temp = data [–number];
strcpy( szdata, temp );
//hapus salinan tersebut
delete[] temp;}
else cout << " stack underflow" ;}
#endif

3. Stack adalah suatu bentuk khusus dari linier list, dengan operasi penyisipan dan penghapusan dibatasi hanya pada satu sisinya, yaitu puncak stack (TOP).
Aturan penyisipan dan penghapusan elemennya tertentu :
1. Penyisipan selalu dilakukan “di atas “ TOP
2. Penghapusan selalu dilakukan pada TOP

Ilustrasi Stack
Terdapat dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri dari N kotak.
F ATAS

E
D
C
B
A BAWAH

Dapat dilihat bahwa kotak B terletak diatas kotak A dan ada dibawah kotak C. Berdasarkan pada stack tersebut dapat disimpulkan bahwa penambahan dan pengambilan sebuah kotak hanya dapat dilakukan dengan melewati satu ujung saja, yaitu bagian atas.
Kotak F adalah kotak paling atas sehingga jika ada kotak lain yang akan disisipkan maka kotak tersebut akan diletakkan pada posisi paling atas (diatas kotak F). Demikian juga pada saat pengambilan kotak, kotak F akan diambil pertama kali.

Menyisipkan menghapus

F ATAS

E
D
C
B
A BAWAH

Perbandingan Antara Stack Dengan Linked List VS Stack Dengan Array
Berikut ini adalah perbandingan algoritma pada operasi-operasi dasar dari Stack Dengan Linked List dan Stack Dengan Array, dengan menggunakan bahasa pemrograman Pascal :
Stack Dengan Linked List Stack Dengan Array
operasi : create()
procedure create;
begin
top := nil ;
end; procedure create;
begin
top := 0;
end;
operasi : empty()
function empty : ias an;
begin
empty := false ;
if top = nil then empty := true ;
end; function empty : ias an;
begin
empty := false ;
if top = 0 then empty := true ;
end;
operasi : full()
tidak ada istilah full pada stack.
4.Linier List: sekumpulan elemen bertipe sama, yang mempunyai “keturutan” yang tertentu dan setiap elemen nya terdiri dari dua bagian, yaitu : informasi mengenai elemennya, dan informasi suksesornya :
Tpye ElmtList :

Dengan Info Type adalah sebuah type terdefinisi yang menyimpan informasi sebuah type terdefinisi sebuah elemen list ; Next adalah address ( “alamat” ) dari elemen berikutnya (suksesor). Dengan demikian, jika didefinisikan First adalah alamat elemen pertama list, maka elemen berikutnya dapat diakses secara suksesif dari field mext elemen tersebut. Alamta yang sudah didefinisikan disebut sudah “ di-alokasi”, Didefinisikan suat konstanta Nil, yang artinya alamat yang tidak terdefinikan. Alamat ini nantinya akan didefinikan secara lebih konkret ketika list linier diimplementasi pada struktur data fisik.

Address ElmtList

Info Next
NIL

Leave a comment