求大神帮忙, 假设称正读和反读都相同的字符序列为”回文”,试写一个算法判别读入的一个以’@’为结束符的字符序列是否是“回文”。用c++编写,跪求完整代码
1 回答
望远
TA贡献1017条经验 获得超1032个赞
#include<stdio.h> #include<stdlib.h> #define MAX 50 typedef char ElemType; typedef struct linknode { ElemType data; struct linknode *next; }LiStack; //初始化链栈 LiStack InitStack(LiStack *s) { s=(LiStack *)malloc(sizeof(LiStack)); s->next=NULL; return *s; } //出栈 ElemType pop(LiStack *s,ElemType *e) { LiStack *p; if(s->next==NULL) { return false; } p=s->next; *e=p->data; s->next=p->next; free(p); return *e; } //入栈 void push(LiStack *s,ElemType e) { LiStack *p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; p->next=s->next; s->next=p; } //判断是否是回文序列 bool Match(LiStack *l,char str[],int length) { char c; int i; bool flag=true; for(i=0;i<length;i++) { if(str[i]!=pop(l,&c)) { flag=false; break; } } printf("\n"); return flag; } void main() { LiStack l; int i=0,length; char str[MAX],c; l=InitStack(&l); printf("请输入一行字符串以@结尾:\n"); scanf("%c",&c); while(c!='@') { if(c!='\0'&&c!='\n') { str[i++]=c; push(&l,c); } scanf("%c",&c); } str[i]='\0'; length=i/2; if(Match(&l,str,length)) { printf("是回文序列!!\n"); } else { printf("不是回文序列!!\n"); } }
运行结果:
刚好实验报告就是这个,不过是用c语言写的,哈哈~~
- 1 回答
- 0 关注
- 1668 浏览
添加回答
举报
0/150
提交
取消