[实验题目] 回文判断
对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。
[基本需求]
1.数据从键盘读入;
2.输出要判断的字符串;
3.利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。
[算法设计]
在做程序时先确定分三个函数:建立栈,入栈,出栈。
建立栈方面首先要建立结构体typedef struct Stack ,并定义相关的指针*base和*top,然后再建立一个空的栈InitStack(SqStack & S),建立好后首先要申请空间,并判断该栈是空的。
然后在编写出栈程序pop(SqStack &S,char e)和入栈程序push(SqStack &S,char e)。最后编写主函数。在主函数中对字符串进行判断,按出栈字符的顺序同该字符串字符逐个进行比较,若有一个字符不同则该字符串不是回文,并输出NO.
同时并判断字符串是否以比较完,若比较完则进行判断,否则继续比较。
相关常量及结构定义:
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10 # define OK 1 # define ERROR 0 typedef int SElemType; //栈类型定义
typedef struct SqStack { SElemType *base; SElemType *top; int stacksize; }SqStack; 设计相关函数声明:
判断函数:int IsReverse()
栈:int InitStack(SqStack &S )
int Push(SqStack &S, SElemType e )
int Pop(SqStack &S,SElemType &e)
int StackEmpty(s)
[测试数据]
输入:ASDDSA# 输出:YES 输入:JKL# 输出:NO
[实验总结]
这次实验做的还算可以,比较上次的实验有着很大的提高;但也
出现了一些相关的问题,经过同学们的帮助和指导,也都得到了解答。通过这次实验,又明白了许多道理,知道要想学好数据结构这门课,必须付出自己的努力和汗水,这样才能学有所得,相信在以后的实验中,自己会做得更加得心应手,更加的顺利。
[附录](原代码)
#include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct Stack //结构体 { int stacksize; char *base; char *top; }SqStack; int InitStack(SqStack & S) //建立栈 { S.base = (char *)malloc(STACK_INIT_SIZE*sizeof(char)); if(!S.base)exit(0); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 1; } int push(SqStack &S,char e) //入栈 { if(S.top-S.base>=S.stacksize) { S.base =(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char)); if(!S.base)exit(0); S.top=S.base +S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return 1; } int pop(SqStack &S,char e) //出栈 { if(S.top == S.base) return error; e=*(--S.top); return e; } void main() { SqStack S; InitStack(S); int i; int t=0,n=0; char m,e; char ch[100]; cout<<\"请输入字符串:\"< push(S,ch[i]); } t++; for(i=0;i 因篇幅问题不能全部显示,请点此查看更多更全内容