Struktur Data – Stack dan Implementasinya

Mahir Koding – Sebelah mengenal cukup jauh tentang linked list, kali ini kita akan membahas salah satu konsep dalam penggunaan linked list, yaitu Stack. Stack bisa dalam bahasa indonesia berarti tumpukan. Jika dimaknai secara langsung, stack mempunyai sifat LIFO (Last In First Out). Maksudnya, setiap data yang terakhir masuk, itu yang akan di panggil duluan atau keluar duluan.

Analogi paling simple misalnya pada saat kita bersekolah dulu, pasti ada waktunya untuk mengumpul PR/Jawaban Ujian. Biasanya, guru akan memeriksa jawaban mulai dari yang paling atas. Maka dari itu, sudah bisa dipastikan bahwa siswa yang mengumpul terakhir akan diperiksa pertama kali. 

  • Last In = Jawaban yang terakhir dikumpul
  • First Out = Pertama kali yang akan diperiksa guru
Struktur Data - Stack dan Implementasinya

http://techwelkin.com/wp-content/uploads/2016/04/lifo-stack-push-pop-techwelkin.png

Untuk stack, kita akan mengenal 2 jenis operasi yakni :

  • Stack/Push
  • UnStack/Pop

Push dan Pop sudah dijelaskan dalam materi dasar linked list. Untuk kasus ini, kita akan menggunakan Push & Pop Head karena data yang akan dimasukkan akan selalu berada di paling atas.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>

struct book{
	char studentname[30];
	struct book *next, *prev;
}*head, *tail, *current;

void print(){
	if(head!=NULL){
		current=head;
		while(current!=NULL){
			printf("%s -> ", current->studentname);
			current=current->next;
		}
	}else{
		printf("No Data");
	}
	printf("\n\n");
};

void pushHead(char name[]){
	current = (struct book *)malloc(sizeof book);
	strcpy(current->studentname, name);
	current->next = current->prev = NULL;

	if(head==NULL){
		head=tail=current;
	}else{
		head->prev=current;
		current->next=head;
		head=current;
	}
}

void popHead(){
	if(head==NULL){
		printf("No Data");
	}else if(head==tail){
		current=head;
		head=tail=NULL;
		free(current);
	}else{
		current=head;
		head=head->next;
		head->prev=NULL;
		free(current);
	}
}

void main(){
	int menu;
	char studentname[30];
	print();
	do{
		do{
			system("cls");
			print();
			printf("1. Stack\n");
			printf("2. UnStack\n");
			printf("3. Exit\n");
			printf("Choose : "); scanf("%d", &menu); fflush(stdin);
		}while(menu<1 || menu>3);
		switch(menu){
			case 1 : 
				printf("Input Student Name : "); scanf("%s", studentname); fflush(stdin);
				pushHead(studentname);
				break;
			case 2 : 
				popHead();
				break;
		}
	}while(menu!=3);
}

Source code secara lengkap bisa dicek ke github saya, di link ini.

Jika ada pertanyaan yang kurang jelas silahkan berkomentar di bawah. Atau, jika ingin request tutorial juga dapat ke halaman ini. Dukung terus Mahir Koding agar dapat selalu mengupdate artikel dengan share dan like artikel ini. Terima Kasih.