2、判断一个栈是不是“回文” 分析:对于栈的话,只需要将字符串全部压入栈,然后依次将各字符出栈,这样得到的就是原字符串的逆置串,分别和原字符串各个字符比较,就可以判断了。请用C语言写出其代码
时间: 2024-10-02 09:01:28 浏览: 36
为了判断一个栈是否形成"回文"(即正序读和反序读都一样的字符串),你可以使用C语言编写以下函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
char stack[MAX_SIZE];
int top = -1;
// 将字符串s压入栈
void push(char s[]) {
int i;
for (i = 0; s[i] != '\0'; i++) {
stack[++top] = s[i];
}
}
// 检查栈顶元素是否等于字符串s的倒数第一个元素
bool isPalindromeHelper(char* s, int start, int end) {
if (start >= end)
return true;
else if (stack[top] != s[end])
return false;
else
return isPalindromeHelper(s, start + 1, end - 1);
}
// 判断整个字符串是否是回文
int isPalindrome(char* s) {
push(s);
return isPalindromeHelper(s, 0, strlen(s) - 1);
}
int main() {
char str[] = "madam";
int result = isPalindrome(str);
if (result)
printf("The string is a palindrome.\n");
else
printf("The string is not a palindrome.\n");
return 0;
}
```
这个程序首先定义了一个字符数组栈`stack`和一个指针`top`用于跟踪栈顶位置。`push()`函数将输入的字符串压入栈。`isPalindromeHelper()`是一个递归辅助函数,它检查字符串从开始到结束(包括中间)的每个字符对是否匹配。`isPalindrome()`函数首先将字符串压入栈,然后调用`isPalindromeHelper()`。
在`main()`中,我们传入一个例子字符串"madam"并检查它是否为回文。如果结果为真,则说明它是回文,否则不是。
阅读全文