C 语言数据结构 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
时间: 2024-06-18 17:04:51 浏览: 120
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
5星 · 资源好评率100%
C语言中的数据结构包括数组、链表、栈、队列、树等。其中,栈和链表常被用于实现其他数据结构。
针对你的问题,可以使用栈来实现回文字符串的判断。具体步骤如下:
1. 遍历字符串的前一半,将字符一个一个入栈;
2. 如果字符串长度为奇数,中间的字符不需要入栈;
3. 遍历字符串的后一半,将字符一个一个与栈顶元素比较;
4. 如果出现不相同的字符,说明该字符串不是回文,返回false;
5. 如果遍历完整个字符串,都没有出现不相同的字符,说明该字符串是回文,返回true。
下面是C语言的代码实现:
```
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAX_LEN 100
bool isPalindrome(char str[])
{
int len = strlen(str);
int mid = len / 2;
int top = 0;
char stack[MAX_LEN];
int i;
for (i = 0; i < mid; i++) {
stack[top++] = str[i];
}
if (len % 2 == 1) {
i = mid + 1;
} else {
i = mid;
}
while (i < len) {
if (stack[--top] != str[i]) {
return false;
}
i++;
}
return true;
}
int main()
{
char str[MAX_LEN];
printf("请输入一个字符串:");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s是回文字符串\n", str);
} else {
printf("%s不是回文字符串\n", str);
}
return 0;
}
```
阅读全文