c++代码 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个程序判定给定的字符向量是否为回文,用栈实现。(提示:将一半字符入栈)
时间: 2023-10-30 16:17:35 浏览: 90
判断字符序列是否是回文
5星 · 资源好评率100%
以下是使用栈实现判断字符串是否为回文的 C 代码:
```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;
}
// 判断栈是否为空
int isEmpty(stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
void push(stack *s, char c) {
if (isFull(s)) {
printf("Stack is full.\n");
exit(1);
}
s->data[++s->top] = c;
}
// 出栈
char pop(stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top--];
}
// 判断字符串是否为回文
int isPalindrome(char str[]) {
int len = strlen(str);
int i;
stack s;
initStack(&s);
for (i = 0; i < len / 2; i++) {
push(&s, str[i]);
}
for (i = (len + 1) / 2; i < len; i++) {
if (str[i] != pop(&s)) {
return 0;
}
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("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;
}
```
上述代码中,我们定义了一个栈结构体,其中 `data` 数组用来存放栈中的元素,`top` 表示栈顶的位置。`initStack` 函数用来初始化栈,`isEmpty` 函数和 `isFull` 函数分别用来判断栈是否为空和已满。`push` 函数和 `pop` 函数分别用来入栈和出栈。
`isPalindrome` 函数用来判断字符串是否为回文。我们首先将字符串前一半的字符入栈,然后依次比较字符串后一半的字符和栈中弹出的字符是否相等。如果全部相等,则字符串为回文,否则不是回文。
在 `main` 函数中,我们通过输入一个字符串来调用 `isPalindrome` 函数判断该字符串是否为回文。如果是回文,则输出 `"is a palindrome."`,否则输出 `"is not a palindrome."`。
阅读全文