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: