回文是指正读和反读均相同的字符序列,如”abba”和”abdba”均是回文,但”good”不是回文,试用c语言写一算法利用栈判定给定的字符序列是否为回文。(提示:将一半字符入栈)
时间: 2023-10-30 17:15:50 浏览: 18
```c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define MAX_SIZE 50
int top = -1;
char stack[MAX_SIZE];
void push(char c) {
if (top == MAX_SIZE-1) {
printf("Stack Overflow\n");
} else {
stack[++top] = c;
}
}
char pop() {
if (top == -1) {
printf("Stack Underflow\n");
return '\0';
} else {
return stack[top--];
}
}
bool isPalindrome(char str[]) {
int len = strlen(str);
int mid = len/2;
int i;
for (i = 0; i < mid; i++) {
push(str[i]);
}
if (len % 2 != 0) {
i++;
}
while (str[i] != '\0') {
if (str[i] != pop()) {
return false;
}
i++;
}
return true;
}
int main() {
char str[MAX_SIZE];
printf("Enter a string: ");
fgets(str, MAX_SIZE, stdin);
str[strcspn(str, "\n")] = '\0'; // Remove newline character from fgets
if (isPalindrome(str)) {
printf("%s is a palindrome\n", str);
} else {
printf("%s is not a palindrome\n", str);
}
return 0;
}
```