您的当前位置:首页正文

回文判断

2024-07-14 来源:榕意旅游网
实验报告

[实验题目] 回文判断

对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“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 #include #include #include #define ok 1 #define error 0

#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<<\"请输入字符串:\"<cin>>ch[i]; if(ch[i]=='#') break;

push(S,ch[i]); } t++;

for(i=0;icout<<\"YES\"<else cout<<\"NO\"<

因篇幅问题不能全部显示,请点此查看更多更全内容