2、 回文是指正读和反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文,试用c语言写一个算法借用顺序栈判定给定的字符向量是否为回文。
时间: 2023-10-30 08:12:40 浏览: 45
以下是使用顺序栈实现判断回文的 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 init(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, char ch) {
if (is_full(s)) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = ch;
}
char pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
int is_palindrome(char *str) {
Stack s;
int len = strlen(str);
int i;
init(&s);
for (i = 0; i < len / 2; i++) {
push(&s, str[i]);
}
if (len % 2 == 1) {
i++;
}
while (i < len) {
if (pop(&s) != str[i]) {
return 0;
}
i++;
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("Enter a string: ");
fgets(str, MAX_SIZE, stdin);
str[strlen(str) - 1] = '\0'; // remove newline character
if (is_palindrome(str)) {
printf("The string is a palindrome.\n");
} else {
printf("The string is not a palindrome.\n");
}
return 0;
}
```
该程序中定义了一个结构体 `Stack` 作为顺序栈,其中包含一个字符数组 `data` 和一个整型变量 `top` 表示栈顶位置。`init` 函数用于初始化栈,`is_empty` 和 `is_full` 函数分别用于判断栈是否为空和是否已满,`push` 和 `pop` 函数分别用于入栈和出栈操作。
函数 `is_palindrome` 判断给定的字符串是否为回文。首先将字符串前半部分入栈,然后从字符串中点开始依次与栈顶元素进行比较,如果不相等则不是回文,否则是回文。如果字符串长度为奇数,则从中点位置的下一位开始比较。
在 `main` 函数中,用户输入一个字符串,调用 `is_palindrome` 函数判断是否为回文,然后输出结果。