Berita Dari Hendra

Memberikan Ilmu Yang Bermanfaat

Stack dalam Bahasa C

pada Desember 31, 2012

Stack adalah suatu daftar atau urutan elemen yang elemennya dapat diambil dan ditambah hanya hanya melalui satu jalur saja, yaitu bagian depan list. Contoh dalam kehidupan sehari-hari adalah tumpukan buku di perpustakaan yang tumpukannya dapat ditambah pada bagian paling atas dan mengambilnya dari bagian paling atas pula.
Ada 2 operasi paling dasar yang penting dari stack yang dapat dilakukan, yaitu :
a. Operasi push yaitu operasi menambahkan elemen data pada urutan terakhir (paling atas).
b. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dari stack.
Tumpukan disebut juga “Push Down Back” yaitu penambahan elemen baru (push) dan penghapusan elemen dari tumpukan (pop) Untuk mengimplementasikan stack, bisa menggunakan linked list atau juga array, tergantung pada permasalahan yang dihadapi. Apabila permasalahan yang dihadapi adalah permasalahan tumpukan (stack) dimana jumlah elemen maksimum dibatasi, maka bisa digunakan array. Apabila jumlah elemen maksimumnya tidak dibatasi, maka linked list lebih tepat digunakan. Salah satu konsep yang efektif untuk menyimpan dan mengambil data adalah “terakhir masuk sebagai yang pertama keluar” (Last in First
Out/LIFO). Dengan konsep ini, pengambilan data akan berkebalikan urutannya dengan penyimpanan data.

oke, ga usah kebanyakan teori, kita langsung ke contoh source code:

stack.h
————————————-begin—————————
#define stack_H
#define stack_H

#include
#include
#include
#include
#include

#define nil NULL
#define info(P) (P)->info
#define next(P) (P)->next
#define firstStack(S) ((S).firstStack)
#define lastStack(S) ((S).lastStack)

typedef int infotype;
typedef struct tElmtStack *address;
typedef struct tElmtStack{
infotype info;
address next;
}ElmtStack;
typedef struct{
address firstStack;
address lastStack;
}Stack;

bool stackEmpty(Stack S);
void createStack(Stack *S);
void bacaStack(infotype *x);
void tulisStack(Stack S);
address Alokasi(infotype x);
void Dealokasi(address P);
void Push(Stack *S,infotype x);
void Pop(Stack *S);

bool stackEmpty(Stack S){
return ((firstStack(S)==nil)&&(lastStack(S)==nil));
}

void createStack(Stack *S){
firstStack(*S)=nil;
lastStack(*S)=nil;
}

void bacaStack(infotype *x){
printf(“\nMasukkan data: “);scanf(“%d”,&(*x));
}

void tulisStack(Stack S){
address P;
P=firstStack(S);
printf(“Data Stack:\n”);
while(P!=nil)
{
printf(“%d\n”,info(P));
P=next(P);
}
}

address Alokasi(infotype x){
address P;
P=(address)malloc(sizeof(ElmtStack));
if(P!=nil)
{
info(P)=x;
next(P)=nil;
}
return P;
}

void Dealokasi(address P){
free(P);
}

void Push(Stack *S,infotype x)
{
address P;
P=Alokasi(x);
if(P!=nil)
{
if(stackEmpty(*S))
{
lastStack(*S)=P;
}
next(P)=firstStack(*S);
firstStack(*S)=P;
}
}

void Pop(Stack *S)
{
address P;
P=firstStack(*S);
if(!stackEmpty(*S))
{
if(P==lastStack(*S))
{
Dealokasi(P);
firstStack(*S)=nil;
lastStack(*S)=nil;
}
else
{
firstStack(*S)=next(P);
Dealokasi(P);
}
}
}

Contoh:

teststack.cpp
——————————-begin—————————–
#include
#include”stack.h”

main(){
Stack S;
infotype x;
createStack(&S);

bacaStack(&x);
Push(&S, x);
cout<<”Push\n”<
tulisStack(S);

bacaStack(&x);
Push(&S, x);
cout<<”Push\n”<
tulisStack(S);

bacaStack(&x);
Push(&S, x);
cout<<”Push\n”<
tulisStack(S);

Pop(&S);
cout<<” Pop\n”<
tulisStack(S);

Pop(&S);
cout<<” Pop\n”<
tulisStack(S);

}
———————————-end————————-


Tinggalkan komentar