Stack & Queue

Stack & Queue
Stack dan Queue adalah sejenis struktur data yang mengimplementasikan logika di dunia nyata, dimana pada konsep programming, konsep data struktur ini dapat dimplementasikan dengan pengunaan Linked List atau Array.

Stack

Pada data struktur Stack, kita dapat membayangkan sebuah stack itu seperti buku yang di tumpuk. Dimana, untuk mencapai buku yang terletak di urutan paling bawah, kita harus terlebih dahulu memindahkan buku yang dari paling atas menuju ke buku sebelum yang paling bawah, baru kita dapat mengambil buku yang paling bawah. Stack menggunakan konsep Last In, First Out (LIFO), dimana data yang terakhir kali masuk ke data struktur Stack akan keluar duluan.

Berikut ini adalah contoh kodingan saya mengenai Stack:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

char sandwich[100][100] = {
"                                                          //  ",
"                                                         //   ",
"                                         _______________//__  ",
"                                       .(______________//___).",
"                                       |              /      |",
"                                       |. . . . . . . / . . .|",
"                                       \ . . . . . ./. . . . /",
"                                        |           / ___   | ",
"                    _.---._             |::......./../...\.:| ",
"                _.-~       ~-._         |::::/::\::/:\::::::| ",
"            _.-~               ~-._     |::::\::/::::::X:/::| ",
"        _.-~                       ~---.;:::::::/::\::/:::::| ",
"    _.-~                                 ~\::::::n::::::::::| ",
" .-~                                    _.;::/::::a::::::::/  ",
" :-._                               _.-~ ./::::::::d:::::::|  ",
" `-._~-._                   _..__.-~ _.-~|::/::::::::::::::|  ",
"  /  ~-._~-._              / .__..--~----.YWWWWWWWWWWWWWWWP'  ",
" \_____(_;-._\.        _.-~_/       ~).. . \                  ",
"    /(_____  \`--...--~_.-~______..-+_______)                 ",
"  .(_________/`--...--~/    _/           /\                   ",
" /-._     \_     (___./_..-~__.....__..-~./                   ",
" `-._~-._   ~\--------~  .-~_..__.-~ _.-~                     ",
"     ~-._~-._ ~---------'  / .__..--~                         ",
"         ~-._\.        _.-~_/                                 ",
"             \`--...--~_.-~                                   ",
"              `--...--~                                       "
};

struct stacknode{
char in[20];
struct stacknode *next;
}*top;

void pushhead(char insert[20]){
struct stacknode* newnode = (struct stacknode*) malloc(sizeof(struct stacknode));
strcpy(newnode->in,insert);
if(top == NULL)
{
top = newnode;
top->next = NULL;
}
else
{
newnode->next = top;
top = newnode;
}
}
void pophead(){
if(top == NULL)
printf("The Plate is Still Empty");
else
{
struct stacknode* newnode = (struct stacknode*) malloc(sizeof(struct stacknode));
newnode = top;
top = top->next;
free(newnode);
}
}

void printsandwich(){
if(top == NULL)
printf("The Plate is Still Empty");
else
{
struct stacknode* point = (struct stacknode*) malloc(sizeof(struct stacknode));
point = top;
while(point!=NULL)
{
printf("[%s]\n", point->in);
point=point->next;
}
printf("--------------------");
}
}

int main(){
int choice;
do{
system("cls");
char insert[20] = {0};
printf("Sandwich Stacker\n================\n");
printf("1. Add Topping\n");
printf("2. Remove Topping\n");
printf("3. View Sandwich\n");
printf("4. Exit Sandwich Program\n");
printf("[1,2,3,4]>> ");
scanf("%d", &choice);
Sleep(100);
switch(choice){
case 1:{
system("cls");
printf("Please Add a Topping to the Sandwich: ");
getchar();
scanf("%[^\n]", &insert);
getchar();
pushhead(insert);
break;
}
case 2:{
pophead();
break;
}
case 3:{
system("cls");
printsandwich();
printf("\n");
system("pause");
break;
}
}
}while(choice != 4);
system("cls");
for(int i = 0; i < 26; i++){
for(int j = 0; j < 63; j++){
printf("%c", sandwich[i][j]);
Sleep(1);
}
printf("\n");
}
}

Queue

Pada data struktur queue, kita dapat membayangkan suatu antrian pada dunia nyata, misalnya saja kalian sedang mengantri untuk membeli minuman Starbucks, Maka kalian akan mulai mengantri pada barisan yang paling belakang dari suatu antrian.Queue menggunakan konsep First In, First out (FIFO), Dimana, data yang masuk melalui arah satu akan eluar di arah lainnya.

Berikut adalah contoh coding saya pada data struktur Queue ini:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node{
char name[20];
struct node *next;
struct node *prev;
}*head,*curr,*tail;
void push(char input[20]){
curr=(struct node*)malloc(sizeof(struct node));
strcpy(curr->name,input);
if(head==NULL){
head=tail=curr;
head->prev=NULL;
}
else{
tail->next=curr;
curr->prev=tail;
tail=curr;
}
tail->next=NULL;
}
void pop(){
if(head==NULL){
printf("No queue to clear...\n");
printf("Press enter to continue (ENTER) \n");
getchar();
getchar();
}
else if(head->next==NULL){
free(head);
head=tail=NULL;
}
else{
curr=head;
head=head->next;
head->prev=NULL;
free(curr);
}
}
void printlist(){
curr=head;
printf(" ____ ______________________\n|No. | Queue List           |\n|____|______________________|\n");
int t=0;
for(t=0;curr!=NULL;t++){
int len=strlen(curr->name);
printf("| %d. | %s ",t+1,curr->name);
for(int i=0;i<20-len;i++){
printf(" ");
}
printf("|\n");
curr=curr->next;
}
if(t==0)printf("|    | No Queue             |\n");
printf("|____|______________________|\n");
}
int main(){
int menu=0;
while(menu!=3){
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printlist();
printf("Welcome to Sushi Tei Queu System, what do you want to do ?\n");
printf("1. Add Queue (Customer) 2. Seat is Ready for customer(Clear one queue) 3. Exit\n");
char input[20]={0};
scanf("%s",input);
while(strcmp(input,"1")!=0&&strcmp(input,"2")!=0&&strcmp(input,"3")!=0){
printf("Sorry, please input a number (1-3) : ");
scanf("%s",input);
}
menu=input[0]-48;
if(menu==1){
char add[20]={0};
printf("Input Customer name : ");
getchar();
scanf("%[^\n]",&add);
while(add[0]=='\0'){
printf("Input item name (Should be filled) :");
getchar();
scanf("%[^\n]",&add);
}
push(add);
}
if(menu==2){
pop();
}
}
printf("Thanks \n");
}

Komentar

Postingan populer dari blog ini

Heap (Max And Min) & Tries

Linked List : Is it an Array?

Hash and Trees