首先,我们将数字的每一位依次入栈和入队,然后,依次出栈和出队,并将出栈的数字和出队的数字进行比较。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void initializeStack(Stack *stack) {
stack->top = -1;
}
void push(Stack *stack, int value) {
stack->data[++stack->top] = value;
}
int pop(Stack *stack) {
return stack->data[stack->top--];
}
void initializeQueue(Queue *queue) {
queue->front = -1;
queue->rear = -1;
}
void enqueue(Queue *queue, int value) {
if (queue->rear == MAX_SIZE - 1) {
printf("Queue is full.\n");
return;
}
queue->data[++queue->rear] = value;
}
int dequeue(Queue *queue) {
if (queue->front == queue->rear) {
printf("Queue is empty.\n");
return -1;
}
return queue->data[++queue->front];
}
bool isPalindrome(int number) {
Stack stack;
Queue queue;
initializeStack(&stack);
initializeQueue(&queue);
int temp = number;
while (temp != 0) {
int digit = temp % 10;
push(&stack, digit);
enqueue(&queue, digit);
temp /= 10;
}
while (stack.top != -1) {
int stackDigit = pop(&stack);
int queueDigit = dequeue(&queue);
if (stackDigit != queueDigit) {
return false;
}
}
return true;
}
int main() {
int number;
printf("Enter a number: ");
scanf("%d", &number);
if (isPalindrome(number)) {
printf("%d is a palindrome number.\n", number);
} else {
printf("%d is not a palindrome number.\n", number);
}
return 0;
}