Stack using C

Posted: December 3, 2011 in Algorithm..., Komputaa... -___-", Tutorial
Tags: ,

Stack merupakan salah satu bentuk penyimpanan data (sering kita dengar sebagai struktur data). Stack berbeda seperti array yang hanya dapat menyimpan data secara statis (dengan ukuran tetap). Pada stack, kita dapat menambah data tanpa batasan jumlah.

Stack, seperti artinya yaitu tumpukan, merupakan jenis penyimpanan data yang menambah data dibelakang data yang paling akhir. Untuk proses pengambilan data, akan dilakukan juga pada data yang paling akhir (inilah yang membedakan stack dengan queue yang proses pengambilan datanya dilakukan pada data yang paling depan). Anggap saja sebuah tumpukan piring cucian. Ketika kita menambah piring pada tumpukan, kita akan menambahnya pada bagian paling atas. Dan apabila kita ingin mengambil piring tersebut, kita hanya dapat mengambil piring yang terletak paling atas.

Stack memiliki 2 fungsi utama, yaitu push dan pop. Push merupakan fungsi untuk menambahkan data baru pada Stack. Sedangkan pop berfungsi untuk mengambil data paling akhir dari tumpukan.

Pada postingan ini akan saya sertakan fungsi2 yang terdapat pada Stack dengan menggunakan bahasa C. Here we go…

1. Push

void push(struct node **s, int nilai){
struct node *temp;
temp=(struct node*)malloc(sizeof(struct node));
temp->data=nilai;
temp->p=*s;
*s=temp;
}

*penjelasan : karena push merupakan fungsi untuk menambah data baru pada Stack, maka kita membutuhkan sebuah node baru yang nantinya akan diisikan data dan dimasukkan kedalam stack. *s merupakan pointer yang menunjuk pada elemen teratas Stack. Node->p akan menunjuk ke node yang berada paling atas di dalam stack (temp->p=*s;) kemudian node paling atas akan diisikan node baru yang telah ditambahkan (*s=temp;).

2. Pop

int pop(struct node **s){
struct node *temp;
int nilai;
if(*s != NULL){
temp=*s;
nilai=temp->data;
*s=temp->p;
free(temp);
return nilai;
}
else{
return -1;
}
}

*penjelasan : pop merupakan fungsi untuk mengambil data teratas pada Stack. Untuk itu kita butuh mengecek apakah elemen teratas ada isinya atau tidak. Bila tidak ada, maka fungsi ini akan mengembalikan nilai -1. Ketika ternyata stack memiliki elemen didalamnya, maka *s (elemen teratas) diharuskan untuk menunjuk elemen dibawahnya (temp=*s;*s=temp->p;). Setelah itu, perlu dilakukan dealokasi memory agar node yang telah dilepas tidak tertinggal di memory (free(temp);).

3. Show

void tampilkanStack(struct node *d){
int nilai;
if(d==NULL){
printf(“Stack kosong…\n”);
return ;
}
printf(“Isi stack : \n”);
while(d!=NULL){
nilai=d->data;
printf(“%d\n”,nilai);
d=d->p;
}
}

4. Create

void create(struct node **s){
*s=NULL;
}

*penjelasan : untuk membuat stack baru, kita cukup mengisikan nilai NULL pada elemen teratas pada stack.

5. Reverse Content

void reverseStack(struct node **d){
struct node *temp;
create(&temp);
int nilai;
if(*d==NULL){
printf(“Stack kosong…\n”);
return ;
}
while(*d!=NULL){
push(&temp,pop(d));
}
*d=temp;
}

*penjelasan : algoritma untuk fungsi ini, didasarkan pada perilaku stack yaitu mengambil nilai pada elemen teratas stack, oleh karena itu, kita cukup membuat sebuah stack baru yang nantinya akan diisikan oleh stack lama dengan proses pengambilan data dari akhir ke awal (secara terbalik). Setelah itu, pointer yang menunjuk ke stack lama ke stack yang baru.

6. Sort Stack

void sortStack(struct node **d){
struct node *temp;
create(&temp);
int array[10000];
int index=0;
int nilai;
while(*d!=NULL){
array[index++]=pop(d);
}
for(int a=0;a<index-1;a++){
for(int b=a+1;b<index;b++){
if(array[a]<array[b]){
int tem=array[a];
array[a]=array[b];
array[b]=tem;
}
}
}
for(int a=0;a<index;a++)push(&temp,array[a]);
*d=temp;
}

*penjelasan : pada fungsi ini, saya menggunakan metode brute force untuk melakukan sorting. Yaitu dengan cara mengambil data satu per satu dari stack kemudian dimasukkan ke array. Proses sorting akan menggunakan bubble sort. Dan setelah data diurutkan, data-data tersebut akan dimasukkan ke stack baru yang nantinya, seperti pada proses sebelumnya, pointer yang menunjuk ke stack lama akan dipindahkan ke stack yang baru.

Berikut adalah pemanggilan fungsi2 tersebut dari fungsi Main () :

int main(){
struct node *palingAtas;
create(&palingAtas);
tampilkanStack(palingAtas);
push(&palingAtas,nilai);
pop(&palingAtas);
sortStack(&palingAtas);
reverseStack(&palingAtas);
system(“pause”);
return 0;
}

Comments
  1. […] Recent Comments LunaLight on My Girlfriend is Gumiho O…wahyu asyari m on My Girlfriend is Gumiho O…Mirai e (Towards The… on Every Ending is a New Beginnin…LunaLight on Quick Tutorial : Menghubungkan…LunaLight on p:ajax-primefaces-2.2M1-is-not… « Stack using C  |   […]

Leave a comment