C++实现栈的回文判断
时间: 2023-11-07 09:10:59 浏览: 200
栈是一种后进先出(Last In First Out)的数据结构,可以利用栈来判断字符串是否为回文字符串。
回文字符串的定义是正着读和倒着读都一样的字符串,例如 "level" 和 "racecar" 都是回文字符串。
以下是 C 语言实现栈的回文判断的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *pStack) {
pStack->top = -1;
}
bool isEmpty(Stack *pStack) {
return (pStack->top == -1);
}
bool isFull(Stack *pStack) {
return (pStack->top == MAX_SIZE - 1);
}
void push(Stack *pStack, char item) {
if (isFull(pStack)) {
printf("Stack overflow\n");
exit(EXIT_FAILURE);
}
pStack->data[++pStack->top] = item;
}
char pop(Stack *pStack) {
if (isEmpty(pStack)) {
printf("Stack underflow\n");
exit(EXIT_FAILURE);
}
return pStack->data[pStack->top--];
}
bool isPalindrome(char *str) {
Stack stack;
int len = strlen(str);
initStack(&stack);
for (int i = 0; i < len; i++) {
push(&stack, str[i]);
}
for (int i = 0; i < len; i++) {
if (pop(&stack) != str[i]) {
return false;
}
}
return true;
}
int main() {
char str[MAX_SIZE];
printf("Enter a string: ");
gets(str);
if (isPalindrome(str)) {
printf("%s is a palindrome string\n", str);
} else {
printf("%s is not a palindrome string\n", str);
}
return 0;
}
```
在上面的代码中,我们定义了一个结构体 `Stack`,包含一个字符数组和一个栈顶指针 `top`。`initStack()` 函数用于初始化栈,`isEmpty()` 函数用于判断栈是否为空,`isFull()` 函数用于判断栈是否已满,`push()` 函数用于将元素压入栈中,`pop()` 函数用于弹出栈顶元素。
`isPalindrome()` 函数用于判断字符串是否为回文字符串,我们先将字符串中的每个字符依次压入栈中,然后再依次弹出栈顶元素与字符串中的字符比较,如果不相等则说明不是回文字符串,返回 `false`,否则返回 `true`。
在 `main()` 函数中,我们获取用户输入的字符串,并在控制台输出判断结果。注意,这里使用 `gets()` 函数获取用户输入,但是该函数存在缺陷,容易导致缓冲区溢出,因此在实际应用中应该使用更加安全的输入函数,例如 `fgets()`。
阅读全文