算法判断给定字符序列是否为回文,将一半字符入栈,用C语言
时间: 2024-10-07 20:06:08 浏览: 35
C语言判断回文字符串代码.rar
5星 · 资源好评率100%
在C语言中,我们可以使用栈数据结构来判断一个字符序列是否是回文。回文是指正读反读都一样的字符串,例如 "level" 或 "madam"。以下是简单的步骤:
1. 定义一个栈结构体,通常可以使用数组或者链表实现,这里我们假设使用数组。
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct {
char stack[MAX_SIZE];
int top;
} Stack;
void push(Stack *s, char c) {
if (s->top < MAX_SIZE - 1) {
s->stack[s->top++] = c;
} else {
printf("Stack overflow\n");
return;
}
}
bool isPalindrome(Stack *s, char* str) {
int i = 0, j = strlen(str) - 1;
// 将字符串前半部分推入栈
while (i < j) {
push(s, str[i++]);
}
// 检查后半部分是否等于栈顶元素的逆序
while (i <= j) {
if (str[i] != s->stack[--s->top]) {
return false;
}
i++;
}
return true;
}
```
使用这个函数的方法是:
```c
int main() {
Stack s;
char str[] = "madam";
if (isPalindrome(&s, str)) {
printf("%s is a palindrome.\n", str);
} else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
```
在这个示例中,我们将字符串的一半字符依次压入栈,然后逐个比较栈顶元素和剩余字符是否相等。如果所有字符匹配,则该串是回文,否则不是。
阅读全文