用c语言写出代码,回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)。
时间: 2024-10-25 09:11:12 浏览: 36
你可以使用C语言编写一个简单的算法来判断一个字符串是否是回文。以下是使用栈来实现这个功能的示例代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
// 定义栈结构体
typedef struct {
char* data;
int top;
int size;
} Stack;
// 初始化栈
void stack_init(Stack* s, int capacity) {
s->data = (char*)malloc(capacity * sizeof(char));
s->top = -1;
s->size = 0;
}
// 入栈操作
void push(Stack* s, char c) {
if (s->top == s->size - 1) {
s->data = realloc(s->data, (s->size * 2) * sizeof(char));
}
s->data[++(s->top)] = c;
s->size++;
}
// 出栈操作
char pop(Stack* s) {
return s->data[s->top--];
}
// 判断字符串是否为回文
bool is_palindrome(const char* str) {
Stack palindrome_stack;
stack_init(&palindrome_stack, 50); // 预设一个较大的栈容量
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
push(&palindrome_stack, str[i]);
}
// 比较栈顶元素和原字符串的剩余部分
for (int i = len / 2; i < len; i++) {
if (pop(&palindrome_stack) != str[i]) {
return false;
}
}
return true;
}
int main() {
const char* test_str1 = "abba";
const char* test_str2 = "good";
printf("%s is a palindrome: %d\n", test_str1, is_palindrome(test_str1));
printf("%s is a palindrome: %d\n", test_str2, is_palindrome(test_str2));
return 0;
}
```
在这个代码中,我们首先初始化一个栈,并将输入字符串的一半字符依次压入栈中。然后逐个从栈顶取出字符并与另一半字符串的对应位置比较。如果任何时候发现不匹配,则返回false;全部比较完毕后,如果没有发生错误,则说明字符串是回文,返回true。
阅读全文