2.回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈。一些基本操作,如栈初始化、栈空、入栈、出栈、求字符串长度等函数可直接调用)
时间: 2023-04-04 11:04:44 浏览: 224
我可以回答这个问题。可以使用栈来判断给定的字符向量是否为回文。具体步骤如下:
1. 初始化一个栈。
2. 将字符向量的前一半字符依次入栈。
3. 如果字符向量长度为奇数,则跳过中间的字符。
4. 依次将字符向量的后一半字符与栈中的字符进行比较,如果不相同则不是回文,否则继续比较。
5. 如果比较完所有字符后都相同,则是回文。
以下是示例代码:
#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;
}
int is_empty(Stack *s) {
return s->top == -1;
}
void push(Stack *s, char c) {
s->data[++s->top] = c;
}
char pop(Stack *s) {
return s->data[s->top--];
}
int palindrome(char *str) {
int len = strlen(str);
Stack s;
init(&s);
int i;
for (i = 0; i < len / 2; i++) {
push(&s, str[i]);
}
if (len % 2 == 1) {
i++;
}
for (; i < len; i++) {
if (pop(&s) != str[i]) {
return 0;
}
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("请输入一个字符串:");
scanf("%s", str);
if (palindrome(str)) {
printf("%s 是回文\n", str);
} else {
printf("%s 不是回文\n", str);
}
return 0;
}
阅读全文