diff --git a/stack.c b/stack.c new file mode 100644 index 0000000000000000000000000000000000000000..0b88744112bf9c006157c6808fa913dc6e835e8b --- /dev/null +++ b/stack.c @@ -0,0 +1,105 @@ +#include <stdio.h> +#include <stdlib.h> + +typedef struct Node { + int data; + struct Node* before; +} Node; + +Node* push(Node* node) { + int data; + printf("Data yang ini dimasukkan: "); scanf("%d", &data); + + Node* new = (Node*)malloc(sizeof(Node)); + new->data = data; + new->before = node; + + return new; +} + +Node* peek(Node* node) { + if(node == NULL) { + printf("Stack kosong\n\n"); + return node; + } + printf("Data paling atas pada stack: %d\n", node->data); + return node; +} + +Node* pop(Node* node) { + if(node == NULL) { + printf("Stack kosong\n\n"); + return node; + } + Node* ptr = node; + node = node->before; + free(ptr); + printf("Data paling di stack paling atas telah dibuang\n"); + return node; +} + +Node* erase(Node* node) { + if(node == NULL) { + printf("Stack kosong\n\n"); + return node; + } + while(node->before != NULL) { + Node* ptr = node; + node = node->before; + free(ptr); + } + + free(node); + node = NULL; + return node; +} + +Node* display(Node* node) { + if(node == NULL) { + printf("Tidak ada data\n"); + return node; + } + Node* ptr = node; + int counter = 1; + while(node != NULL) { + printf("%d. %d\n", counter++, node->data); + node = node->before; + } + return ptr; +} + +int main() { + Node* node = NULL; + int option; + do { + printf("Program stack\n"); + printf("0. Display all stack data\n"); + printf("1. Push operation\n"); + printf("2. Peek operation\n"); + printf("3. Pop operation\n"); + printf("4. Delete all data\n"); + printf("5. Keluar\n\n"); + printf("Masukkan pilihan: "); + scanf("%d", &option); + switch (option) + { + case 0: + node = display(node); + break; + case 1: + node = push(node); + break; + case 2: + node = peek(node); + break; + case 3: + node = pop(node); + break; + case 4: + node = erase(node); + break; + } + } while(option != 5); + + return 0; +} \ No newline at end of file