Applications of Stack
INPUT
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_SIZE 1000
struct Stack {
int top;
unsigned capacity;
char* array;
};
struct Stack* createStack(unsigned capacity) {
struct Stack* stack = (struct Stack*)malloc(sizeof(struct Stack));
stack->capacity = capacity;
stack->top = -1;
stack->array = (char*)malloc(stack->capacity * sizeof(char));
return stack;
int isFull(struct Stack* stack) {
return stack->top == stack->capacity - 1;
int isEmpty(struct Stack* stack) {
return stack->top == -1;
void push(struct Stack* stack, char item) {
if (isFull(stack))
return;
stack->array[++stack->top] = item;
char pop(struct Stack* stack) {
if (isEmpty(stack))
return '\0';
return stack->array[stack->top--];
void reverseString(char* str) {
int n = strlen(str);
struct Stack* stack = createStack(n);
for (int i = 0; i < n; i++)
push(stack, str[i]);
for (int i = 0; i < n; i++)
str[i] = pop(stack);
free(stack->array);
free(stack);
void cleanString(char* str) {
int i, j;
for (i = 0, j = 0; str[i]; i++) {
if (isalnum((unsigned char)str[i]))
str[j++] = tolower((unsigned char)str[i]);
str[j] = '\0';
int isPalindrome(char* str) {
char cleaned[MAX_SIZE];
strcpy(cleaned, str);
cleanString(cleaned);
int len = strlen(cleaned);
struct Stack* stack = createStack(len);
for (int i = 0; i < len / 2; i++)
push(stack, cleaned[i]);
if (len % 2 != 0)
len++;
for (int i = len / 2; i < len; i++) {
if (cleaned[i] != pop(stack)) {
free(stack->array);
return 0;
free(stack->array);
free(stack);
return 1;
int main() {
char str[MAX_SIZE];
printf("Enter a string: ");
fgets(str, MAX_SIZE, stdin);
str[strcspn(str, "\n")] = 0
printf("\nOriginal string: %s\n", str);
char reversed[MAX_SIZE];
strcpy(reversed, str);
reverseString(reversed);
printf("Reversed string: %s\n", reversed);
if (isPalindrome(str))
printf("\nThe string is a palindrome.\n");
else
printf("\nThe string is not a palindrome.\n");
return 0;
OUTPUT
Enter a string: Isha
Original string: Isha
Reversed string: ahsI
The string is not a palindrome.