判断回文(队列和栈综合运用)
#include<stdio.h>
#include<stdlib.h>
#define MAX 250
//定义栈数据类型
typedef struct stack{
int *a;
int top;
} stack;
//定义队列
typedef struct opt{
int *b;
int length;
} opt;
//获取字符串长度
int getlen(char data[]){
int i=0;
while(data[i]) i++;
return i;
}
//初始化栈
void init_stack(stack *S){
S->a = (int *)malloc(sizeof(int)*MAX);
S->top = -1;
}
//初始化队列
void init_opt(opt *O){
O->b = (int *)malloc(sizeof(int)*MAX);
O->length = 0;
}
//栈:插入
int ins_stack(stack *S,char ins[]){
int len_ins = getlen(ins);
for(int i=0;i<len_ins;i++){
S->a[i] = ins[i];
S->top ++;
}
return 0;
}
//队列:插入
int ins_opt(opt *O,char ins[]){
int len_ins = getlen(ins);
for(int i=0;i<len_ins;i++){
O->b[i] = ins[i];
O->length ++;
}
}
//判断回文
int judge(stack *S,opt *O){
int j = O->length;
for(int i=0;i<O->length;i++){
if(O->b[i] == S->a[S->top]){
S->top --;
}else{
return 0;
}
}
return 1;
}
int main(){
stack S;
opt O;
char data[MAX];
printf("请输入需要判断的字符串(回文):");
scanf("%s",&data);
//初始化
init_stack(&S);
init_opt(&O);
//插入数据
ins_stack(&S,data);
ins_opt(&O,data);
//判断回文
if(judge(&S,&O)) printf("是回文\n");
else printf("不是回文!\n");
}