用栈判断一个字符是不是回文的C语言代码
时间: 2024-12-08 18:14:37 浏览: 14
在C语言中,我们可以使用两个栈来判断一个字符串是否是回文。首先将字符串的一半字符压入第一个栈,然后将另一半字符压入第二个栈。接下来,我们逐一对两个栈顶的字符进行比较,如果所有字符都匹配,则该字符串是回文;如果不匹配,则不是。下面是简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
// 定义栈结构体
typedef struct {
char* data;
int top;
int size;
} Stack;
// 初始化栈
Stack initStack(int capacity) {
Stack s;
s.data = (char*)malloc(capacity * sizeof(char));
s.top = -1;
s.size = capacity;
return s;
}
// 入栈操作
void push(Stack* s, char c) {
if (s->top == s->size - 1) {
printf("Stack overflow.\n");
return;
}
s->data[++(s->top)] = c;
}
// 出栈操作
char pop(Stack* s) {
if (s->top == -1) {
printf("Stack underflow.\n");
return '\0';
}
return s->data[s->top--];
}
// 判断字符串是否是回文
bool isPalindrome(char str[]) {
Stack stack1, stack2;
int len = strlen(str);
// 将一半字符压入stack1
for (int i = 0; i < len / 2; ++i) {
push(&stack1, str[i]);
}
// 另一半字符倒序压入stack2
for (int j = len - 1; j >= len / 2; --j) {
push(&stack2, str[j]);
}
while (!stack1.is_empty() && !stack2.is_empty()) { // 当两个栈都不为空
if (pop(&stack1) != pop(&stack2)) {
return false;
}
}
return true;
}
int main() {
char test[] = "madam";
bool result = isPalindrome(test);
if (result)
printf("%s is a palindrome.\n", test);
else
printf("%s is not a palindrome.\n", test);
return 0;
}
阅读全文