欢迎来到天天文库
浏览记录
ID:35342766
大小:64.22 KB
页数:12页
时间:2019-03-23
《数据结构试验(回文判断)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、目录1、实验题目2、实验目的3、实验要求4、算法设计分析5、测试调节6、总结7、代码附录1>实验名称:栈和队列的基本操作及其应用(回文判断)2、实验目的:1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。2、掌握栈和队列的特点,即后进先岀和先进先岀的原则。3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现。3、算法设计分析:(1)栈的初始化:voidInit_stack(SqStack&S){S・base=(char*)malloc(STACK」NIT_S
2、IZE*sizeof(char));if(!S.base)exit(OVERFLOW);S.top二S.base;〃栈顶与栈尾指针指向栈尾S.stacksize=STACK_INIT_SIZE;//return0;}(2)入栈voidPush(SqStack&S,chare){if(S.top-S.base>=S.stacksize)〃首先判满S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREASE)*sizeof(char));if(!S.base)exit(OV
3、ERFLOW);S・top=S.base+S.stacksize;S.stacksize+=STACKINCREASE;}*S.top++=e;〃入一个元素,栈顶指针增加1}(1)出栈:charPop(SqStack&S,char&e){if(S.top=S.base)exit(OVERFLOW);e=^-S.top;〃删除栈顶元素并用e返回其值returne;}(3)回文判断/*voidCompare(SqStack&S){inti,n=0;intt=0;charch[100];charm,e;charp;cout«
4、n请输入您要进行的判断的字符以#作为结束标志:”;for(i=0;i<100;i++){cin»p;if(p!=#)〃作为结束标志{ch[i]=p;}else{n=i;break;}}for(inth=O;hvn;h++)〃入栈{Push(S,ch[h]);Jfor(intw=O;w5、输入的字符串是回文编码「;}else{cout«H输入的字符串不是回文编码!”;}}*/*********************《算法改进》***************************for(i=0;i<100;i++){cin»ch[i];if(ch[i]==#)break;Push(S,ch[i]);n++;for(i=0;ivn/2;i++)〃回文为对称字符,因此只需判断一半即可{m=Pop(S,e);if(m!=ch[i])break;t++;if(t==n/2){coutvv”输入的字符串是回文编6、码!”;}else{cout«n输入的字符串不是回文编码!”;}}(1)测试调节:■5ClassView到FileViewSnStARkS:Configuration:stack一Win32DebugLinkingstack.exe-0error(s),0warning(s)(2)总结:通过对回文判断的代码编写,对栈的更加了解,初始化(开辟空间),入栈、出栈等更加的了解。但是编写这个代码没有用到队列,以后在课下时间,会编写一个更复杂的代码,加以熟悉。总的来说,做这个小程序,对栈确实有了进一步的了解,一些基本的操作也更加7、的熟悉,为以后的课设打下基础。(3)代码附录:#include#include#include#include#defineSTACK_INIT_SIZE100#defineSTACKINCREASE10#defineOVERFLOW0//usingnamespacestd;typedefstructfchar*base;char*top;intstacksize;JSqStack;voidInit_stack(SqStack&S){S.8、base二(char*)malloc(STACK_INIT_SIZE*sizeof(char));if(!S.base)exit(OVERFLOW);S.top=S.base;S・stacksize=STACKINITSIZE;//return0;voidPush(SqStack&S,chare){if(S.top-S.base>
5、输入的字符串是回文编码「;}else{cout«H输入的字符串不是回文编码!”;}}*/*********************《算法改进》***************************for(i=0;i<100;i++){cin»ch[i];if(ch[i]==#)break;Push(S,ch[i]);n++;for(i=0;ivn/2;i++)〃回文为对称字符,因此只需判断一半即可{m=Pop(S,e);if(m!=ch[i])break;t++;if(t==n/2){coutvv”输入的字符串是回文编
6、码!”;}else{cout«n输入的字符串不是回文编码!”;}}(1)测试调节:■5ClassView到FileViewSnStARkS:Configuration:stack一Win32DebugLinkingstack.exe-0error(s),0warning(s)(2)总结:通过对回文判断的代码编写,对栈的更加了解,初始化(开辟空间),入栈、出栈等更加的了解。但是编写这个代码没有用到队列,以后在课下时间,会编写一个更复杂的代码,加以熟悉。总的来说,做这个小程序,对栈确实有了进一步的了解,一些基本的操作也更加
7、的熟悉,为以后的课设打下基础。(3)代码附录:#include#include#include#include#defineSTACK_INIT_SIZE100#defineSTACKINCREASE10#defineOVERFLOW0//usingnamespacestd;typedefstructfchar*base;char*top;intstacksize;JSqStack;voidInit_stack(SqStack&S){S.
8、base二(char*)malloc(STACK_INIT_SIZE*sizeof(char));if(!S.base)exit(OVERFLOW);S.top=S.base;S・stacksize=STACKINITSIZE;//return0;voidPush(SqStack&S,chare){if(S.top-S.base>
此文档下载收益归作者所有