用栈判断给定的字符串是否是回文 c语言版
时间: 2024-10-10 16:05:52 浏览: 71
可以使用栈来判断一个给定的字符串是否是回文。具体方法如下:
1. 首先创建一个栈,将字符串中的每个字符依次压入栈中。
2. 然后从字符串的第一个字符开始遍历,每次取出栈顶的字符进行比较。如果相同,则继续比较下一个字符;如果不同,则说明该字符串不是回文。
3. 当栈为空时,说明该字符串是回文。
下面是用C语言实现的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void InitStack(Stack* s) {
s->top = -1;
}
void Push(Stack* s, char c) {
if (s->top >= MAX_SIZE - 1) {
printf("Stack overflow!\n");
return;
}
s->top++;
s->data[s->top] = c;
}
char Pop(Stack* s) {
if (s->top == -1) {
printf("Stack underflow!\n");
return '\0';
}
char c = s->data[s->top];
s->top--;
return c;
}
int IsPalindrome(char* str) {
Stack s;
InitStack(&s);
int len = strlen(str);
for (int i = 0; i < len; i++) {
Push(&s, str[i]);
}
for (int i = 0; i < len; i++) {
if (Pop(&s) != str[i]) {
return 0;
}
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("Please enter a string: ");
scanf("%s", str);
if (IsPalindrome(str)) {
printf("%s is a palindrome.\n", str);
} else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
```
阅读全文