- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验二网络134康阳11
实验二 栈和队列的基本操作及其应用
一、实验目的
1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。
2、掌握栈和队列的特点,即后进先出和先进先出的原则。
3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现。
二、实验内容
本次实验提供4个题目,每个题目都标有难度系数,*越多难度越大,学生可以根据自己的情况选做,其中题目一是必做题,其它选作!
题目一:回文判断(*)
[问题描述]
对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。
[基本要求]
(1)数据从键盘读入;
(2)输出要判断的字符串;
(3)利用栈和队列对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。
回文 栈的输出与队列的输出相同;也就是每一个输出的字符都是相同的。若有一个不同,就不是回文。在一个循环中判断。有一个不同就跳出循环,不是回文。循环结束,是回文。
[测试数据]
由学生任意指定。
算法设计
利用栈和队列对给定的字符串判断其是否是回文。是回文则栈和队列的输出结果相同。由于栈是后进先出,队列是先进先出,所以栈和队列输出的完全相同,则给定的字符串是回文。所以可以将给定的字符串先进栈,再进队,然后一个一个字符比较输出,有一个字符不相同就不是回文。
本程序包含模块
1)主函数
int main()
{
分别对栈和队列进行初始化;
While循环分别将字符串进栈和进队;循环里有一个整形变量,整型变量作为循环的判断条件,字符变量作为数据存入栈和队列;
For循环比较输出,判断是否是回文;
}
2)栈和队列的存储结构
typedef struct Stacknode //构造栈
{
char Zdata;
struct Stacknode *Znext;
}StackNode;
typedef struct QueueNode //构造队列
{
char Qdata;
struct QueueNode *Qnext;
}QueueNode;
typedef struct //指向队列
{
QueueNode *front, *rear;
}LinkQueue;
typedef struct //指向栈的指针
{
StackNode *top;
}LinkStack;
3)进栈和出栈函数
void Push(LinkStack s, char x) //进栈操作
int Pop(LinkStack s, char a) //出栈操作
需判断栈是否为空
4)进队和出队函数
void InQueue(LinkQueue *q) //进队操作
int OutQueue(LinkQueue *q, char b) //出队操作
需判断队是否为空
调试分析
在进行栈和队列的构造以进栈出栈和进队出队操作时,出栈和出队会遇到指针的指向问题。
再主函数中while循环往栈和队列输入数据,遇到了判断条件的决定问题。不知如何用字符当做判断条件,最终做出以整型做出修改作为判断条件,但是需要多次输入。然后在if语句中进行字符的输入和进栈进队。
在回文判断的核心处,初始想法是比较输出的字符,但是输出总是出现问题,最后做出的修改是定义一个计数器,比较出栈和出队函数执行结果,若为真则计数器加一。若为假则直接跳出循环,输出不是回文的结果。最后比较计数器和字符数量,若相等则是回文。
算法仍有欠缺,在判断条件和回文判断处应有更合理的修改
实验结果
进入操作页
进栈和进队操作,进栈数与进队数相等进栈为abcba,进队相同
最后分别是栈和队的输出。aabbccbbaa由此可判断栈和队的输出相等,是回文
进栈和进队操作,进栈数与进队数相等进栈为abcb,进队相同
最后分别是栈和队的输出。ba,且栈和队都只输出一次,证明第一个字符就不想等,由此可判断栈和队的输出不相等,不是回文
题目三:舞伴问题(**)
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。
【实验提示】
先入队的男士或女士亦先出队配成舞伴。因此该问题具体有典型的先进先出特性,可用队列作为算法的数据结构。在算法中,假设男士和女士的记录存放在一个数组中作为输入,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还是女队。当这两个队列构造完成之后,依次将两队当前的队头元素出队来配成舞伴,直至某队列变空为止。此时,若某队仍
文档评论(0)