#include #include #include // Struktur stack #define MAX 100 typedef struct { char data[MAX]; int top; } Stack; // Fungsi untuk inisialisasi stack void initStack(Stack *s) { s->top = -1; } // Fungsi untuk mengecek apakah stack penuh int isFull(Stack *s) { return s->top == MAX - 1; } // Fungsi untuk mengecek apakah stack kosong int isEmpty(Stack *s) { return s->top == -1; } // Fungsi untuk memasukkan elemen ke dalam stack void push(Stack *s, char c) { if (isFull(s)) { printf("Stack penuh!\n"); return; } s->data[++s->top] = c; } // Fungsi untuk mengeluarkan elemen dari stack char pop(Stack *s) { if (isEmpty(s)) { printf("Stack kosong!\n"); return -1; // Mengembalikan nilai invalid jika stack kosong } return s->data[s->top--]; } // Fungsi untuk membalikkan string menggunakan stack void reverseString(char *str) { Stack s; initStack(&s); // Menyimpan setiap karakter string ke dalam stack for (int i = 0; str[i] != '\0'; i++) { push(&s, str[i]); } // Mengambil karakter dari stack dan menuliskannya kembali ke string int i = 0; while (!isEmpty(&s)) { str[i++] = pop(&s); } } int main() { char str[MAX]; printf("Masukkan string: "); fgets(str, sizeof(str), stdin); // Menghapus newline karakter jika ada str[strcspn(str, "\n")] = 0; reverseString(str); printf("String setelah dibalik: %s\n", str); return 0; }