回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。
若用C++,可借助STL的容器实现。
输入格式:
输入待判断的字符序列,按回车键结束,字符序列长度<20。
输出格式:
若字符序列是回文,输出“YES”;否则,输出“NO”。
输入样例:
abdba
输出样例:
YES
思路
先将前一半的字符入栈,利用栈“后进先出”的特点,依次出栈并和剩余的字符串比较。文章来源:https://www.toymoban.com/news/detail-781594.html
具体实现代码如下文章来源地址https://www.toymoban.com/news/detail-781594.html
#include <stdio.h>
#include <string.h>
#define MAX 20
// 定义栈
typedef struct {
char data[MAX];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈空
int isEmpty(Stack *s) {
if(s->top == -1)
return 1;
else
return 0;
}
// 判断栈满
int isFull(Stack *s) {
if(s->top == MAX - 1)
return 1;
else
return 0;
}
// 入栈
void push(Stack *s, char c) {
if(isFull(s) == 0) {
s->top++;
s->data[s->top] = c;
}
}
// 出栈
char pop(Stack *s) {
if(isEmpty(s) == 0)
return s->data[s->top--];
return '\0';
}
int main() {
Stack s;
char input[MAX];
int HuiWen = 1; //搞个flag
scanf("%s", input);
int length = strlen(input);
init(&s); // 初始化栈
// 将前一半字符入栈
for (int i = 0; i < length / 2; i++) {
push(&s, input[i]);
}
// 比较栈中字符与后一半字符是否相同
for (int i = (length + 1) / 2; i < length; i++) {
if (input[i] != pop(&s)) {
HuiWen = 0; //对比不一致,置0,表示非回文
break;
}
}
if (HuiWen)
printf("YES\n");
else
printf("NO\n");
}
到了这里,关于7-1 回文判断(数据结构) PTA C语言的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!