#include <stdio.
h>
#include<conio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_N 100
// Static stack implementation
int staticStack[MAX_N];
int staticTop = -1;
// Dynamic stack implementation
struct DynamicStack {
int *data;
int cap;
int top;
};
void initializeDynamicStack(struct DynamicStack *stack, int
cap) {
stack->data = (int *)malloc(cap* sizeof(int));
stack->cap = cap;
stack->top = -1;
}
int isDynamicStackEmpty(struct DynamicStack *stack) {
return stack->top == -1;
}
int isDynamicStackFull(struct DynamicStack *stack) {
return stack->top == stack->cap- 1;
}
void pushDynamic(struct DynamicStack *stack, int value) {
if (isDynamicStackFull(stack)) {
printf("Dynamic Stack Overflow\n");
return;
}
stack->data[++stack->top] = value;
}
int popDynamic(struct DynamicStack *stack) {
if (isDynamicStackEmpty(stack)) {
printf("Dynamic Stack Underflow\n");
return -1;
}
return stack->data[stack->top--];
}
// Function to reverse a string
void reverseString(char *str) {
int length = strlen(str);
for (int i = 0; i < length / 2; i++) {
char temp = str[i];
str[i] = str[length - i - 1];
str[length - i - 1] = temp;
}
}
// Function to check if a number is palindrome
int isPalindrome(int num) {
int originalNum = num;
int reversedNum = 0;
while (num > 0) {
int digit = num % 10;
reversedNum = reversedNum * 10 + digit;
num /= 10;
}
return originalNum == reversedNum;
}
int main() {
int choice;
struct DynamicStack dynamicStack;
initializeDynamicStack(&dynamicStack, MAX_N);
do {
printf("Menu:\n");
printf("1. Push element into Static Stack\n");
printf("2. Pop element from Static Stack\n");
printf("3. Push element into Dynamic Stack\n");
printf("4. Pop element from Dynamic Stack\n");
printf("5. Display Dynamic Stack\n");
printf("6. Reverse a String\n");
printf("7. Check for Palindrome Number\n");
printf("8. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1: {
int value;
printf("Enter a value to push into Static Stack: ");
scanf("%d", &value);
if (staticTop < MAX_N - 1) {
staticStack[++staticTop] = value;
printf("Element pushed into Static Stack.\n");
}
else {
printf("Static Stack Overflow\n");
}
break;
}
case 2: {
if (staticTop >= 0) {
int poppedValue = staticStack[staticTop--];
printf("Popped element from Static Stack: %d\n",
poppedValue);
}
else {
printf("Static Stack Underflow\n");
}
break;
}
case 3: {
int value;
printf("Enter a value to push into Dynamic Stack: ");
scanf("%d", &value);
pushDynamic(&dynamicStack, value);
printf("Element pushed into Dynamic Stack.\n");
break;
}
case 4: {
if (!isDynamicStackEmpty(&dynamicStack)) {
int poppedValue = popDynamic(&dynamicStack);
printf("Popped element from Dynamic Stack: %d\n",
poppedValue);
}
else {
printf("Dynamic Stack Underflow\n");
}
break;
}
case 5: {
printf("Dynamic Stack contents:\n");
for (int i = dynamicStack.top; i >= 0; i--) {
printf("%d\n", dynamicStack.data[i]);
}
break;
}
case 6: {
char str[100];
printf("Enter a string: ");
scanf(" %99[^\n]", str); // Read up to 99 characters
(excluding newline)
reverseString(str);
printf("Reversed string: %s\n", str);
break;
}
case 7: {
int num;
printf("Enter a number: ");
scanf("%d", &num);
if (isPalindrome(num)) {
printf("%d is a palindrome number.\n", num);
}
else {
printf("%d is not a palindrome number.\n", num);
}
break;
}
case 8: {
printf("Exiting the program.\n");
break;
}
default:
printf("Invalid choice. Please enter a valid option.\n");
}
}
while (choice != 8);
return 0;
}
OUTPUT: