C 语言 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
时间: 2024-06-18 12:04:51 浏览: 237
要判断一个字符向量是否为回文,可以使用栈来实现。具体做法是将字符向量的前一半字符依次入栈,然后依次将字符向量的后一半字符与栈中弹出的字符比较,如果全部相同,则说明该字符向量是回文。
以下是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, char c) {
if (isFull(s)) {
printf("Stack is full!\n");
exit(1);
}
s->data[++(s->top)] = c;
}
char pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[(s->top)--];
}
int isPalindrome(char *str) {
int len = strlen(str);
Stack s;
initStack(&s);
int i;
for (i = 0; i < len / 2; i++) {
push(&s, str[i]);
}
if (len % 2 == 1) {
i++;
}
while (i < len) {
if (str[i] != pop(&s)) {
return 0;
}
i++;
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("Please input a string:\n");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s is palindrome.\n", str);
} else {
printf("%s is not palindrome.\n", str);
}
return 0;
}
```
阅读全文