还剩5页未读,继续阅读
文本内容:
西安邮电学院数据结构实验报告回文序列判断班内序号学生姓名指导教师2022/10/13
一、实验目的2
二、实验内容2
三、数据结构及算法思想2
四、模块划分
2、对各个模块进行功能的描述
12、模块之间关系及其相互调用的图示23
五、详细设计及运行结果
3、设计源代码
13、运行结果27
六、调试情况,设计技巧及体味
71、熟悉并掌握栈的的创建、入栈和出栈等基本用法并能运用栈完成一些特定的任务
2、熟悉并掌握队列的的创建、入队和出队等基本用法并能运用队列完成一些特定的任务
3、运用栈和队列实现对“回文”序列的判断
二、实验内容编写一个算法,判断一次读入一个以@结束符的字母序列,是否为形如‘序列1序列2,模式的字符序列其中序列1和序列2中都不含字符且序列2是序列1的逆序列例如,a+bb+a是属于该模式的字符序列,a+bb-a则不是
三、数据结构及算法思想运用栈和队列算法,在序列挨次输入时将序列分别入栈和入队列,利用栈FILO和队列FIFO的特点,通过出栈和出队列实现序列顺序和逆序的比较,根据题目描述的回文序列判断并输出结果
四、模块划分、对各个模块进行功能的描述1本次设计共分为六个模块,分别是初始化模块、输入模块、入栈模块、入队模块、判断模块、输出模块各个模块功能如下表表格1模块功能描述初始化模块栈、队列等初始化输入模块字母序列输入入栈模块将输入序列入栈入队模块将输入序列入队判断模块将序列正、逆比较输出模块判断结果输出、模块之间关系及其相互调用的图示2开始结束图1
五、详细设计及运行结果、设计源代码:1#includestdio.hM#include,^conio.h^#includemalloc.hH typedef struct NODEchardata;struct NODE*next;}LinkStack;typedef struct Node chardata;structNode*next;}LinkQueueNode;typedefstructLinkQueueNode*front;LinkQueueNode*rear;JLinkQueue;void InitStackLinkStack*top top-next=NULL;}char PushLinkStack*top,char aLinkStack*temp;temp=LinkStack*mallocsizeofLinkStack;iftemp==NULLreturnO;temp-data=a;temp-next=top-next;top-next=temp;return1;char PopLinkStack*top{LinkStack*temp;char a;temp=top-next;iftemp==NULLreturnO;top-next=temp-next;a=temp-data;freetemp;return a;}int LengthStackLinkStack*topLinkStack*temp;int count=0;temp=top-next;whiletemp!=NULL{count++;temp=temp-next;}returncount;void lnitQueueLinkQueue*qq-front=LinkQueueNode*mallocsizeofLinkQueueNode;q-rear=LinkQueueNode*mallocsizeofLinkQueueNode;q-rear=q-front;q-front-next=NULL;char EnterQueueLinkQueue*q,char aLinkQueueNode*NewNode;NewNode=LinkQueueNode*mallocsizeofLinkQueueNode;ifNewNode!=NULL NewNode-data=a;NewNode-next=NULL;q-rear-next=NewNode;q-rear=NewNode;return1;}else returnO;char OutQueueLinkQueue*qLinkQueueNode*temp;char a;ifq-rear==q-frontreturnO;temp=q-front-next;q-front-next=temp-next;ifq-rear==tempq-rear=q-front;a=temp-data;freetemp;return a;void mainchar a[1OO],flag1=0,flag2=0,n,m;int i=O,t=O;LinkStack*top=LinkStack*mallocsizeofLinkStack;LinkQueue*q=LinkQueue*mallocsizeofLinkQueue;InitStacktop;InitQueueq;printfplease inputa stringend of@:\nH;whilea[i-1]!=64scanf,%c,,,a[i];i++;fort=0;ti;t++ifa[t]!=64Pushtop,a[t];EnterQueueq,a[t];}t=LengthStacktop;ift%2==0printfCInput wrong!;else fori=0;it;i++n=Poptop;m=OutQueueq;ifn!=mflag1=1;ifi t/2n!=38flag2=1;==ifflag1||flag2printfHThis isnot palindrome sequence!;elseprintfThis ispalindrome sequence!,1;getch;、运行结果
22.
1、回文字符序列输入・回文•E:\program\C\\hiuv7en.exeplease inputa stringend of@qwertyytrewq©This ispalindromesequence]
22.2非回文字符序列输入F回外*E:\p rog ram\C\h iuwen.exeplease inputa stringend of@qwerttreq@[This isnot palindromesequence]
六、调试情况,设计技巧及体味通过这次数据结构试验,我学习了链栈的建立及其一些基本的操作方法和队列的建立及对其的一些基本操作,充分理解了栈和区别和联系,栈和队列都可以通过链表实现,区别在于对其操作的节点位置不同,更重要的是通过这次实践操作学会了完成一个设计的基本方法和步骤,拿到一个问题不能急于开始书写代码要将问题理清晰、找清思路、分好模块再开始敲代码,代码只是实现一个功能的工具,惟独好的解决问题的思路,才干做出好的程序写完一个程序,只是完成一个设计的一小部份,后期的调试和验证也是重要的一部份,这次设计完成代码后编译都没错,但运行结果却不正确,通过调试后才的找出错误,运行成功,但经过一些数据的验证却又发现问题,再经过改正和完善代码才完成整个设计所以一个设计的完成是需要不断的改进、调试和验证的,其中耐心和细心更是不可缺少的。
个人认证
优秀文档
获得点赞 0