数据实验报告书回文测试.docx
- 文档编号:5163559
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:10
- 大小:236.42KB
数据实验报告书回文测试.docx
《数据实验报告书回文测试.docx》由会员分享,可在线阅读,更多相关《数据实验报告书回文测试.docx(10页珍藏版)》请在冰豆网上搜索。
数据实验报告书回文测试
《数据结构》
实
验
报
告
书
实验内容:
栈和队列的基本操作及其应用
计算机学院计算机科学与技术
计科:
**********
前言
计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习计算机编程仅仅了解计算机语言是不够的,还必须掌握数据的组织、存储和运算的一般方法,这便是数据结构课程中所研究的内容,也是我们编写计算机程序的重要基础,由于它对计算机学科起到承前启后的作用,因此本课程被列为计算机等相关专业最重要的专业基础课;同时数据结构是计算机专业教学的一门核心课程。
计算机各领域都要用到各种数据结构,而且要从事计算机科学与技术工作,尤其是计算机领域的软件开发工作,必须具备较强的数据结构基础。
数据结构课程内容丰富、学习量大,实践性强;隐含在各部分内容中的方法和技术多;算法设计具有动态性和抽象性等特点,看懂听明白与掌握会应用之间有相当大的一段距离。
所以学生必须多实践才能进一步加深对课程的理解,理解和掌握算法设计所需的方法和技术,为整个专业学习打下良好的基础。
栈和队列的基本操作及其应用
回文判断
一、实验目的
1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。
2、掌握栈和队列的特点,即后进先出和先进先出的原则。
3、掌握栈和队列的基本运算,如:
入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现。
[问题描述]
对于一个从键盘输入的字符串,判断其是否为回文。
回文即正反序相同。
如“abba”是回文,而“abab”不是回文。
[基本要求]
(1)数据从键盘读入;
(2)输出要判断的字符串;
(3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。
[测试数据]
由学生任意指定。
算法设计:
首先,先建立两个空栈。
分别命名为S、L。
现将输入的字符串,储存于S栈中。
然后,编写代码。
使得S栈中的字符依出栈,并保存于L栈中。
这样可以使得S栈与L栈中的字符完全相同,但顺序颠倒。
然后依次比较L栈与S栈中的字符是否相同。
如果相同,则说明,所输入的字符。
颠倒顺序后与原字符依然相同。
所以可判断为回文。
否则,就不是回文。
在本代码中,栈的数据结构设计了三个指针。
base指向栈底,top指向栈顶,sel也指向栈顶。
sel的作用是用于将栈S中的元素,依次传给栈L。
从而避免了,在传元素的过程中,栈S的top指针回到base指针上。
导致栈S变为空栈。
最后说明一下。
字符串的输入是一“#”字符为结束标志的。
但这个符号本身不算字符串的一部分。
建立堆栈的数据结构:
typedefstructStick
{
ele*base;
ele*top;
ele*sel;
intstacksize;
}Sqstack;
当然此处定义:
typedefcharele;
初始化所有可能用到的数据:
#defineNULL0
#defineSIZE100
#defineOVER100
堆栈的建立算法:
intInit(Sqstack&S)
{
=(ele*)malloc(SIZE*sizeof(ele));
if(!
exit(0);
=;
=;
=SIZE;
return1;
}
堆栈的建立好以后就可以想法向里面输入字符,并定义以下算法实现向堆栈里面输入字符:
intpush(Sqstack&S,elee)
{
if {
=(ele*)realloc,+OVER)*sizeof(ele));
if(!
exit(0);
=+;
=+OVER;
}
*++=e;
=;
return1;
}
此程序是为实现回文的判断定义以下实现函数comp(Sqstack&S,Sqstack&L):
intcomp(Sqstack&S,Sqstack&L)//对两个堆栈中的字符串进行比较并判断是否为回文
{
intn=1;
if{
=(ele*)realloc,+OVER)*sizeof(ele));
if(!
exit(0);
=+;
=+OVER;
}
=;
while>=
{
*=*;
=;
=+1;
}
=;
=;
while(>=&&>=)
{
if(*!
=*
n=0;
;
;
}
if(n==1)
{
cout<<"YES\n";
}
else
cout<<"NO\n";
returnOK;
}
此函数是本程序的核心所以,主要进行的操作就是本函数。
主函数:
voidmain()
{
charj;
SqstackS,L;
Init(S);
Init(L);
cout<<"请输入以“#”结尾的字符:
\n";
cin>>j;
push(S,j);
while(j!
='#')
{
cin>>j;
push(S,j);
}
cout<<"\n";
comp(S,L);
cout<<"\n";
system("pause");
}
测试调试:
本程序开始运行后出现以下界面:
根据具体所析:
采用以下测试数据,以字母回文、字母非回文、数字回文、数字非回文、字母加数字回文、字母加数字非回文,进行测试:
asdfnmmnfdsa、imksginlkjii、452、、aki56265ika、sdfs5548。
所有测试数据以“#”结尾。
测试一:
成功。
测试二:
成功。
测试三:
成功。
测试四:
成功。
测试五:
成功。
测试六:
成功。
总结:
经过以上的编码测试,可以得出,本实验程序能对字符进行是否为回文的判断。
并最终以YESorNo的形式把结果给输入。
能过本次实验,我算是深入的了解了堆栈的操作及应用,虽然此程序很小,但已足以氢栈的思想给表现,并通过本次实验,熟悉了栈的知识,并在以后的学习当中并加以应用。
最后感谢指导老师:
高老师
附录:
源代码:
#include
#include<>
usingnamespacestd;
#defineNULL0//初始化所有可能用到的参数
#defineSIZE100
#defineOVER100
#defineOK1
typedefcharele;
typedefstructStick//建立堆栈的数据结构
{
ele*base;
ele*top;
ele*sel;
intstacksize;
}Sqstack;
intInit(Sqstack&S)//建立一个堆栈
{
=(ele*)malloc(SIZE*sizeof(ele));
if(!
exit(0);
=;
=;
=SIZE;
returnOK;
}
intpush(Sqstack&S,elee)//向堆栈里输入字符
{
if{
=(ele*)realloc,+OVER)*sizeof(ele));
if(!
exit(0);
=+;
=+OVER;
}
*++=e;
=;
returnOK;
}
intcomp(Sqstack&S,Sqstack&L)//对两个堆栈中的字符串进行比较并判断是否为回文
{
intn=1;
if{
=(ele*)realloc,+OVER)*sizeof(ele));
if(!
exit(0);
=+;
=+OVER;
}
=;
while>=
{
*=*;
=;
=+1;
}
=;
=;
while(>=&&>=)
{
if(*!
=*
n=0;
;
;
}
if(n==1)
{
cout<<"YES\n";
}
else
cout<<"NO\n";
returnOK;
}
voidmain()
{
charj;
SqstackS,L;
Init(S);
Init(L);
cout<<"请输入以“#”结尾的字符:
\n";
cin>>j;
push(S,j);
while(j!
='#')
{
cin>>j;
push(S,j);
}
cout<<"\n";
comp(S,L);
cout<<"\n";
system("pause");
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 实验 报告书 回文 测试