用C语言实现设计一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。
时间: 2024-09-18 09:18:38 浏览: 158
在C语言中,我们可以使用两个栈分别存放字符串的字符,一个从前往后入栈,另一个从后往前入栈。然后依次比较两个栈顶的字符是否相等。如果所有对应位置的字符都相等,则该字符串是对称串;如果不全相等,则不是。
以下是简单的C语言代码实现这个算法:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
// 定义栈结构体
typedef struct {
char stack[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否已满
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 将字符入栈
void push(Stack *s, char c) {
if (!is_full(s)) {
s->stack[++s->top] = c;
}
}
// 出栈并返回顶部字符
char pop(Stack *s) {
if (s->top != -1) {
return s->stack[s->top--];
} else {
printf("Stack is empty.\n");
return '\0';
}
}
// 检查字符串是否对称
int is_palindrome(char str[]) {
Stack forward, backward;
init(&forward);
init(&backward);
// 向前推栈
for (int i = 0; str[i] != '\0'; i++) {
push(&forward, str[i]);
}
// 后退推栈并比较字符
while (!forward.top == backward.top) {
if (pop(&forward) != pop(&backward)) {
return 0; // 对称失败,字符串不是对称串
}
}
return 1; // 如果到达这里,说明字符串是对称的
}
int main() {
char str[] = "radar";
if (is_palindrome(str)) {
printf("%s is a palindrome.\n", str);
} else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
```
阅读全文