回文判断教学总结

合集下载

回文判断实验二

回文判断实验二

回文判断实验二洛阳理工学院实验报告系别计算机系班级B13053学号B13053235 姓名李登辉2课程名称数据结构实验日期2014.3.28 实验名称栈和队列的基本操作成绩实验目的:熟悉掌握栈和队列的特点,掌握与应用栈和队列的基本操作算法,训练和提高结构化程序设计能力及程序调试能力。

实验条件:计算机一台,Visual C++6.0实验内容:1.问题描述利用栈和队列判断字符串是否为回文。

称正读与反读都相同的字符序列为“回文”序列。

要求利用栈和队列的基本算法实现判断一个字符串是否为回文。

栈和队列的存储结构不限。

2.数据结构类型定义typedef struct{char elem[MAX];int top;}SeqStack; 顺序栈3.模块划分void InitStack(SeqStack *S):栈初始化模块,int Push(SeqStack *S,char x,int cnt):入栈操作int Pop(SeqStack * S,char * x):出栈操作void InitQuene(SeqQuene *Q):队列初始化int EnterQuene(SeqQuene *Q,char x,int cnt):入队操作int DeleteQuene(SeqQuene *Q,char *x,int cnt):出队操作void main():主函数4.详细设计#include<stdio.h>#include<string.h>#define MAX 50#define FALSE 0#define TURE 1//定义栈typedef struct{char elem[MAX];int top;}SeqStack;//定义循环队列typedef struct{char element[MAX];int front;int rear;}SeqQuene;//初始化栈void InitStack(SeqStack *S){S->top = -1;//构造一个空栈}//入栈int Push(SeqStack *S,char x,int cnt){if(S->top == cnt-1)return(FALSE);S->top++;S->elem[S->top] = x;return(TURE);}//出栈int Pop(SeqStack * S,char * x){if(S->top == -1)return(FALSE);else{*x = S->elem[S->top];S->top--;return(TURE);}}//初始化队列void InitQuene(SeqQuene *Q){Q->front = Q->rear = 0;}//入队int EnterQuene(SeqQuene *Q,char x,int cnt) {if((Q->rear+1)%(cnt+1) == Q->front) return(FALSE);Q->element[Q->rear] = x;Q->rear = (Q->rear+1)%(cnt+1);return(TURE);}//出队int DeleteQuene(SeqQuene *Q,char *x,int cnt){if(Q->front == Q->rear)return(FALSE);*x = Q->element[Q->front];Q->front = (Q->front+1)%(cnt+1);return(TURE);}//主函数void main(){int i,cnt,flag;SeqStack s;SeqQuene q;char a[MAX],b[MAX],c[MAX];flag=0;printf("请输入由*结束且小于%d的回文序列:\n",MAX);for(i = 0;i<MAX+1;i++){scanf("%c",&a[i]);if(a[i] == '*')break;}cnt = i;printf("输入了有%d个字符。

最小回文问题课程设计心得体会

最小回文问题课程设计心得体会

课程设计的心得体会
Xxx班xxxx
经过为期一个多星期的课程设计,对回文这个概念有了一个更深的认识,同时,在整个课程设计的过程中,使我更深切的体会到了算法思想对于一个问题的重要性。

在这段时间里,我用了很大一部分的时间来考虑算法,考虑用怎样的方法来实现最小回文数的计算,只用了一小部分的时间来把我的思想用程序写出来。

当然,在调试的过程中也出现了许许多多的错误,但都被调试成功,并最终完成了该问题的要求。

在这次课程设计中,我学会了一个解决问题的方法,那就是从整体出发,一层一层往里深入。

比如求最小回文数,只要求用原字符串减去原字符串与逆序字符串的最大公共序列长度即可。

而该问题的关键接着就是如何求出原字符串与逆序字符串的最大公共序列长度。

对于这个问题,我从拿到题目就开始思考,一直思考了很久都没有找到一个很好的方法,有的是只对一部分字符串适用,有的是不可用程序实现,经过不断的摸索和查阅资料,最后终于找到了一个正确的求原字符串与逆序字符串的最大公共序列长度算法。

从而完成了程序设计。

这次课程设计虽然没有用到数据结构与算法一书里的相关数据结构,但是其算法思想还是离不开这本书的,因为老师在给我们上课时着重强调算法思想的重要性,所以我从算法思想出发,完成了该程序的任务要求,但并不否认,c语言基础也是非常重要的,因为光有算法思想,不能用c语言进行表达,不能使其运行,就等于是做无用功。

在课程设计过程中,我复习了数组的相关使用方法,加深了对for循环语句的理解和while循环语句的使用。

通过这次课程设计,我知道了自己在逻辑思维上还不够敏锐,不能很好的理清思路;在c语言基础知识上还有待加强,在以后的学习中,我会不断努力,不断提升自己这一方面的能力。

回文数的判断方法

回文数的判断方法

回文数的判断方法
嘿,朋友们!今天咱来聊聊回文数这个有意思的玩意儿。

啥是回文
数呢?简单说,就是顺着读和倒着读都一样的数呗!就好像照镜子似的,对称得很呢!
那怎么判断一个数是不是回文数呢?这可得有点小技巧啦!比如说121,你看,从前往后读是 121,从后往前读还是 121,那它就是回文
数呀!可要是像 123 这样的,从前往后和从后往前读就不一样啦,那
它肯定就不是回文数咯。

咱可以把数字想象成一群排队的小人儿,回文数呢,就是前后对称
站着的那些小人儿。

你想想,如果队伍前后看起来都一样,那不就是
回文数嘛!比如说 11,就两个小人儿面对面站着,多整齐呀,它就是
回文数。

那如果数字大一点呢?比如说 12321,咱也可以一点点来分析呀。

先看最前面的 1 和最后面的 1,一样吧?再看中间的 2 和 2,也一样吧?那它就是回文数啦!这就好像你在检查两队小人儿是不是站得一模一样。

还有一种方法哦,咱可以把数字拆成单个的数字,然后一个一个对比。

就像给小人儿编号,然后看看前后编号对应的小人儿是不是同一个。

这多有趣呀!
你说要是遇到特别大的数字怎么办呢?嘿,那也不怕呀!咱就耐心点,一个一个数字去对比呗。

就像你要在一大群小人儿里找出对称的那些,可能得花点时间,但总能找出来的呀!
哎呀,回文数的判断方法是不是挺简单的呀?你学会了吗?只要你用心去观察,去分析,就一定能轻松判断出一个数是不是回文数啦!别小看这小小的回文数,它里面可藏着不少乐趣呢!以后看到数字的时候,就可以自己在心里琢磨琢磨,这个数是不是回文数呀?说不定还能发现一些有趣的规律呢!你说是不是呀?。

数据结构C语言版判断回文数实验报告

数据结构C语言版判断回文数实验报告

数据结构C语言版判断回文数实验报告实验目的:1. 了解回文数的定义和判断方法2. 掌握C语言中字符串的处理方法3. 学习如何使用栈来判断字符串是否为回文数实验原理:回文数是一个正整数,它的各位数字倒过来排列后仍然是同一个数。

比如121、12321就是回文数,而123、56789就不是回文数。

判断一个字符串是否为回文数,可以将字符串中的每一个字符逐个压入栈中,然后再依次将栈中的字符弹出,与原字符串中的字符逐个比较。

实验步骤:1. 定义一个栈结构体,其中包含一个整型数组和一个顶部指针变量。

顶部指针变量用于指向栈顶的位置。

```c#define MAXSIZE 100 // 定义栈中最大元素数量typedef struct {int data[MAXSIZE]; // 栈中元素数据int top; // 栈顶指针} Stack;```2. 定义一个函数用于判断字符串是否为回文数。

函数接收一个字符串指针作为参数。

首先计算字符串的长度,然后将字符串中的每一个字符压入栈中。

接着依次将栈中的字符弹出,与原字符串中的字符逐个比较。

如果两者不同,则说明该字符串不是回文数,函数返回0并退出。

如果所有字符都比较完成后没有发现不同,说明该字符串是回文数,函数返回1并退出。

// 将字符串中的每一个字符压入栈中for (int i = 0; i < len; i++) {s.data[++s.top] = str[i];}return 1;}```3. 在主函数中,首先要输入一个字符串,然后调用is_palindrome函数进行判断,最后输出判断结果。

实验结果:测试数据:输入:"12321"请输入一个字符串:12321该字符串是回文数"abcde""aabbabbaa"分析:实验结果验证了判断回文数的方法和字符串操作的正确性,同时掌握了使用栈来判断字符串是否为回文数的方法,有助于更好地理解栈的概念和应用。

数据结构回文序列判断实验报告简版

数据结构回文序列判断实验报告简版

数据结构回文序列判断实验报告数据结构回文序列判断实验报告1. 实验目的本实验旨在探究如何使用数据结构来判断一个序列是否为回文序列,并通过实验验证算法的正确性和效率。

2. 实验背景回文序列是指正向和反向读取都相同的序列。

判断一个序列是否为回文序列可以在很多场景下使用,比如判断一个字符串是否为回文串,或者判断一个数字列表是否为回文数字。

回文序列判断问题是数据结构中非常经典的问题之一,能够有效地练习和运用数据结构的知识。

在本实验中,我们将使用栈来实现回文序列的判断。

3. 实验原理与方法3.1 栈的原理栈是一种数据结构,具有先进后出(Last in, First out,LIFO)的特点。

栈的操作主要有入栈和出栈两个动作,入栈将元素放置在栈顶,出栈则将栈顶元素弹出。

3.2 回文序列判断算法回文序列判断算法的基本思路是将原序列中的元素逐个入栈,然后逐个出栈与原序列中的元素进行比较,若相同则继续比较下一个元素,否则返回不是回文序列。

1. 将原序列中的元素逐个入栈。

2. 逐一出栈栈顶元素,并与原序列中的元素逐个比较。

3. 若任一对应位置的元素不相同,则返回不是回文序列。

4. 若所有元素都相同,则返回是回文序列。

3.3 实验步骤1. 创建一个空栈。

2. 将原序列中的元素逐个入栈,直到全部入栈完成。

3. 出栈栈顶元素,并与原序列中的元素逐个比较。

4. 若比较结果不相同,则返回不是回文序列。

5. 若比较结果都相同,重复步骤3和步骤4,直到栈为空。

6. 若全部比较结果都相同,则返回是回文序列。

4. 实验结果与分析为了验证回文序列的判断算法,我们选择了几个不同长度的序列进行实验,并记录下了实验结果。

4.1 实验结果案例1:序列:abcba实验结果:是回文序列案例2:序列:12321实验结果:是回文序列案例3:序列:abccbaa实验结果:不是回文序列4.2 分析通过以上实验结果可以发现,我们设计的回文序列判断算法在大多数情况下都能够正确判断出序列是否为回文序列。

数据结构回文序列判断实验报告

数据结构回文序列判断实验报告

数据结构回文序列判断实验报告1.实验目的本实验旨在通过使用数据结构中的栈来判断一个给定的序列是否为回文序列。

2.实验原理回文序列是指正读和反读都相同的序列。

在本实验中,我们使用栈来实现回文序列的判断。

具体原理如下:-将给定的序列逐个字符入栈,直到遇到序列结束符(如空格或结束符号)。

-之后,将栈中的字符逐个出栈,并与序列的对应字符比较。

-如果出栈的字符与序列的对应字符不相同,则该序列不是回文序列;如果全部对应字符相同,则该序列是回文序列。

-需要注意的是,如果序列为奇数个字符,那么中间的字符可以不进行比较。

3.实验步骤本实验的具体步骤如下:1)初始化一个空栈。

2)读入一个字符,并将其入栈,直到遇到序列结束符。

3)读入序列的每一个字符,并将其与栈顶字符进行比较。

4)如果比较结果不相同,则该序列不是回文序列;如果比较结果相同,则继续比较下一个字符。

5)如果栈为空且所有字符都比较完毕,则该序列是回文序列;否则,该序列不是回文序列。

4.实验结果本实验使用了多组样例数据进行测试,以下是部分实验结果:- 输入序列:"aba",输出:是回文序列。

- 输入序列:"abcba",输出:是回文序列。

- 输入序列:"abcca",输出:不是回文序列。

- 输入序列:"abcdcba",输出:是回文序列。

5.实验分析通过对实验结果的分析,可以得出以下结论:-本实验的算法能够正确判断给定序列是否为回文序列。

-由于使用了栈来辅助判断,算法的时间复杂度为O(n),其中n为序列的长度。

6.实验总结本实验通过使用数据结构中的栈,成功判断了一个给定序列是否为回文序列。

通过实验过程,我们深入理解了栈的应用和回文序列的判断原理,并熟悉了实际编程的过程。

同时,我们也认识到了栈在解决一些问题时的便捷性和高效性。

在今后的学习和工作中,我们将更加熟练地运用栈来解决问题。

人教版四年级语文上册《语文园地一·回文联》教学案例及反思二则[名师教学]

人教版四年级语文上册《语文园地一·回文联》教学案例及反思二则[名师教学]

《语文园地一·回文联》教学案例及反思二则《语文园地一·回文联》教学案例及反思之一【教学案例】今天,我上了语文园地一(人教版),“日积月累”中选取了中国传统对联中的几幅精品,其中最有意思的是回文联(如:雾锁山头山锁雾天连水尾水连天),学生们对它的热情也非常的高涨,我认为这是让学生练习写作的一个最佳时间,于是让学生们学着写。

一开始,学生们无从下手,写出的对联总是走不出课本上的束缚,学生似乎找不到能表述的内容,为了激发学生的思维,开拓他们的视角,我首先给他们写了一个:水戏鱼儿鱼戏水蝶恋花儿花恋蝶老师成了第一个敢吃螃蟹的,学生们的顾及全消失了,思维便没有约束,甚至有些不着边际,但正是没有了约束,学生们写出的东西反而妙趣横生:日照镜儿镜照日月映窗台窗映月(王晓港)天高水低水高天地连山脉山连地(刘广璞)高连低处低连高天连山头山连天(王浩然)水爱鱼儿鱼爱水山恋水来水恋山(武翠娟)鼠恋米儿米恋鼠蜂爱蜜来蜜爱蜂(杨智涵)这些对联虽然在韵味和格调上还有些幼稚,但从中可以看出学生对其格式已经有了初步的掌握,而且每幅对联中的事物关系挑取得恰当合理,尤其是最后一幅,更是显示出孩子的童真,使整幅对联增添了许多活泼天真的味道。

如果说着写对联还是“练笔”的话,那么下面的这幅对联就是成熟之作了:天陪霞红霞陪天水伴潮蓝潮伴水(张贤辉)整幅对联选取了两个场景:晚霞、涨潮,而且两者可以融合为一幅美景图。

每联的第一个字“天”和“水”,一上一下,两者相对恰如其分;第二个字“陪”和“伴”意思相近,而且上下组成“陪伴”一词;第三个字“霞”和“潮”都是自然的变化;第四个字“红”和“蓝”也都是色彩,搭配也十分恰当,而且给整幅对联增添了绚丽的色彩。

【教学反思】学生的思维是需要引导的,而老师在必要的时候做示范也是非常重要的。

学生的能力是无极限的,只是缺乏一根导火线。

《语文园地一》教学案例及反思之二【教学案例】伴着铃声,我走进教室,这节课准备给孩子们上语文园地一中的“日积月累”和“趣味语文”(附“日积月累”附内容:“雾锁山头山锁雾,天连水尾水连天”、“绿水本无忧,因风皱面;青山原不老,为雪白头”、“山山水水处处明明秀秀,晴晴雨雨时时好好奇奇”、“重重叠叠山,曲曲环环路;丁丁冬冬泉,高高下下树”)。

C课设(判断回文)报告

C课设(判断回文)报告

目录一、需求分析 (2)二、概要设计 (2)三、详细设计 (4)四、调试分析 (9)五、用户手册 (9)六、测试数据 (10)七、附录 (11)一、需求分析⒈用栈及队列的基本操作完成对字符串是否为回文的判断,其中栈及队列都是作为单独的子函数存在。

⒉通过创建栈和队列来存放字符串,然后分别取出栈和队列里元素,一个个比较,如果到栈和队列到最后一个元素从两边出来的字符都相同,则能说明用户输入的字符串为回文,否则就不是。

⒊用户要从屏幕上输入一串字符,完成对栈及队列的存储。

⒋程序完成对用户输入的字符串进行存储,然后完成对字符串的输出,比较丛栈和队列中出来的字符,然后进行判断。

⒌程序执行命令:⑴接受用户输入字符串;⑵比较判断从栈和队列中出来的字符;⑶输出最后判断的结果。

二、概要设计⒈设计栈和队列的抽象数据类型定义:基本操作: 操作结果stinit(s) 构造一个空栈,完成对栈的初始化squinit(q) 构造一个空队列,完成对队列的初始化q stpush(s,c) 完成字符进栈的操作enqueue(q,c) 完成字符进队列的操作stempty(s),quempty(q) 判断栈和队列中是否还有元素stpop(s),dequeue(q) 比较出栈与出队列的字符是否匹配⒉判断字符基本操作:stpop(s)==dequeue(q);初始条件:在子函数中已经定义了栈与队列,而且已经将字符分别输入空的栈和队列中,现在的关键就在于判断从栈和队列里出来的元素是否相同。

操作结果:如果输入到栈和队列元素相同,那么代表输入的字符为回文字符。

3. 本程序模块结构⑴主函数模块void main(){初始化;为栈和队列申请空间;调用栈和队列功能子函数;判断从栈和队列出来的字符是否相同;得出最终的结果;⑵栈模块----实现栈抽象数据类型,完成对栈的初始化,进栈和出栈的操作。

⑶队列模块----实现队列抽象数据类型,完成对队列的初始化,进队列和出队列的操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
系部计算机系I班级I I学号I I姓名课程名称—数据结构I实验日期实验名称回文判断成绩
实验目的:
掌握栈的基本操作:入栈、出栈等在链式或顺序存储结构上的实现。

实验条件:PC机一台、VC++6.0编译环境
实验内容与算法思想:
内容:
输入一字符串判断其是否为回文。

算法思想:
1. 算法中主要用到的函数
①void mai n() //主函数
②int push_seqstack(Seqstack *s,char x) // 进栈
③in t pop_seqstack(Seqstack *s) // 出栈
④int gettop_seqstack(Seqstack *s) 〃取栈顶元素
⑤int Ishuiwe n( char *s) 〃判断是否是回文
2. 函数之间的调用关系
函数之间的调用关系如图1所示:
图1函数之间的调用关系
运行结果:
运行程序输入一段字符串,运行不同的结果如图2、3所示:
图2 不是回文的判断结果
实验总结:
通过前两次的实验,使我对C语言和数据结构有许多认识。

因此,这次实验
在做起来时多少有点思路,但是在实验室当中还是遇到了许多不会的问题,如回文的判断思路、以及函数的调用等等,不过这些问题在老师和同学的帮助下基本完成了这次实验。

这次实验让我学到了很多知识,让我对原来所学的又重新复习了一遍,同时还学到了许多其他新知识。

附:源程序:
#in clude<stdio.h>
#in clude<stri ng.h>
#defi ne OK 1
#defi ne ERROR 0
#defi ne Maxsize 100 typedef struct
{ char elem[Maxsize];
int top;
}Seqstack;
void init_seqstack(Seqstack *s) // 初始化 {
s->top=-1;
}
int push_seqstack(Seqstack *s,char x) // 进栈 {
if(s->top==Maxsize-1)
return ERROR;
}
else
{ s->top++; s->elem[s->top]=x; return OK; }
}
int pop_seqstack(Seqstack *s)
// 出栈 { char x;
if(s->top==-1)
return ERROR;
else
{ x=s->elem[s->top]; s->top--;
}
return x;
print
f( 栈已满 *********** !\n") printf(
栈已空 ********** !\n")
int gettop_seqstack(Seqstack *s)
{ char x; if(s->top==-1)
return ERROR;
}
else
x=s->elem[s->top]; return x;
}
int Ishuiwen(char *s)
//判断是否是回文 {
Seqstack *STK,stack; char *p;
int n; n=strlen(s);
STK=&stack;
init_seqstack(STK); push_seqstack(STK,'#'); if(n%2==0)
{ p=s+n/2;
while(s!=p)
{ push_seqstack(STK,*s);
s++;
}
}
else
{ p=s+(n+1)/2;
while(s!=p-1)
//取栈顶元素
printf(" **********
栈已满 *********** !\n")
{ push_seqstack(STK,*s);
s++;
}
while(STK->top!=-1 &&
gettop_seqstack(STK)!='#')
{ if(*p!=pop_seqstack(STK))
return ERROR;
p++;
}
return OK;
}
void main()
{ char s[100];
printf(" 请输入字符串: ");
gets(s);
int x;
x=Ishuiwen(s);
if(x==1)
printf("%s 是回文 !\n",s);
else
printf("%s 不是回文 !\n",s);。

相关文档
最新文档