回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个程序判定给定的字符向量是否为回文,用栈实现。(提示:将一半字符入栈)
输入格式:
输入任意字符串。
输出格式:
若字符串是回文,输出:xxxx是回文。
若字符串不是回文,输出:xxxx不是回文。
输入样例:
abba
输出样例:
abba是回文。
输入样例:
abdba
输出样例:
abdba是回文。
输入样例:
good
输出样例:
good不是回文。
代码如下:本题采用全入栈方式实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Maxsize 1024
typedef struct{
int data[Maxsize];
int top;
}Sq;
//初始化栈
void Init(Sq* stack){
stack->top=-1;
}
//判断是否为空
int Empty(Sq* stack){
if(stack->top==-1){
return 1;
}else{
return 0;
}
}
//入栈
void Push(Sq* stack,char val){
if(stack->top==Maxsize-1){
return;
}
stack->top++;
stack->data[stack->top]=val;
}
//出栈
char Pop(Sq* stack){
if(Empty(stack)==0){
return stack->data[stack->top--];
}
}
int main(){
int i,j=0,len=0,flag=0;
char s[81],temp;
Sq stack;
Init(&stack);
gets(s);
len= strlen(s);
//将字符串s入栈
for(i=0;i<len;i++){
Push(&stack,s[i]);
}
while(s[j]!='\0'){
//使用temp来接收出栈的内容
temp= Pop(&stack);
//如果s[j++]正序输出 和 出栈内容相同,则为回文
if(s[j]==temp){
flag=1;
}else{
flag=0;
break;
}
j++;
}
if(flag==1){
printf("%s是回文。",s);
}else{
printf("%s不是回文。",s);
}
return 0;
}