1、回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈。) 要求用c语言
时间: 2023-06-11 17:07:03 浏览: 47
以下是用 C 语言编写的回文判断算法,使用栈实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
if (s->top < MAX_SIZE - 1) {
s->data[++s->top] = c;
}
}
char pop(Stack *s) {
if (s->top >= 0) {
return s->data[s->top--];
}
return '\0';
}
int isPalindrome(char *str) {
int len = strlen(str);
int mid = len / 2;
Stack s;
init(&s);
for (int i = 0; i < mid; i++) {
push(&s, str[i]);
}
int i = (len % 2 == 0) ? mid : mid + 1;
while (str[i] != '\0') {
char c = pop(&s);
if (c != str[i++]) {
return 0;
}
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("Enter a string: ");
fgets(str, MAX_SIZE, stdin);
str[strcspn(str, "\n")] = '\0'; // 去掉字符串末尾的换行符
if (isPalindrome(str)) {
printf("%s is a palindrome.\n", str);
} else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
```
该算法的思路是:将字符串的一半字符入栈,然后比较栈中的字符和字符串的另一半字符是否相等。如果相等,则字符串是回文;否则,字符串不是回文。