线性表与栈题目:
【问题描述】判断某字符串是否为回文(对称)。要求从键盘输入字符串,保存在顺序表中,利用栈判断该字符串是否对称。
【输入形式】字符串,输入回车表示结束。
【输出形式】Y或N
【样例输入】abcdcba
【样例输出】Y
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
// 定义栈结构
typedef struct {
char data[MAX_LENGTH];
int top;
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 压栈
void push(Stack *s, char c) {
if (s->top < MAX_LENGTH - 1) {
s->data[++(s->top)] = c;
} else {
printf("栈已满\n");
}
}
// 弹栈
char pop(Stack *s) {
if (s->top >= 0) {
return s->data[(s->top)--];
} else {
return '\0'; // 栈空返回空字符
}
}
int main() {
char input[MAX_LENGTH];
Stack stack;
initStack(&stack);
printf("请输入一个字符串,回车表示结束: ");
fgets(input, sizeof(input), stdin);
int length = strlen(input);
int i;
// 去除输入字符串末尾的换行符
if (input[length - 1] == '\n') {
input[length - 1] = '\0';
}
length = strlen(input); // 重新计算字符串长度
// 将字符串逐个字符压入栈
for (i = 0; i < length; i++) {
push(&stack, input[i]);
}
// 检查字符串是否为回文
int isPalindrome = 1; // 假设是回文
for (i = 0; i < length; i++) {
if (input[i] != pop(&stack)) {
isPalindrome = 0; // 不是回文
break;
}
}
if (isPalindrome) {
printf("Y\n");
} else {
printf("N\n");
}
return 0;
}