#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;
}