收藏 分享(赏)

数据结构课程设计回文数问题.doc

上传人:精品资料 文档编号:10696569 上传时间:2019-12-29 格式:DOC 页数:15 大小:145.50KB
下载 相关 举报
数据结构课程设计回文数问题.doc_第1页
第1页 / 共15页
数据结构课程设计回文数问题.doc_第2页
第2页 / 共15页
数据结构课程设计回文数问题.doc_第3页
第3页 / 共15页
数据结构课程设计回文数问题.doc_第4页
第4页 / 共15页
数据结构课程设计回文数问题.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、湖南科技学院课程设计报告课程名称: 数据结构课程设计课程设计题目: 02、回文问题系:专 业:年级、班:姓 名:学 号:指导教师:职 称:2011 年 12 月目录1. 问题描述-32. 具体要求-33. 测试数据-34. 算法思想-35. 模块划分-46. 数据结构-47. 源程序-78. 测试情况-149. 设计总结-1410. 参考文献-15一、 问题描述利用栈跟队列找出一个 TXT 文档中所有的回文单词并输出。回文单词就是单词中字母从前往后拼与从后往前拼得出的单词是一样的,如:AaA、121、1221、d、did 等,从数据结构角度看,栈和队列是特殊的线性表,其特殊性在于栈和队列的基本

2、操作是线性表操作的子集,它们是操作受限的线性表,而栈是一种限定仅在表尾进行插入或删除的线性表,栈的修改是按先进后出的顺序进行的,队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端进行删除,因此可利用栈和队列的这两个性质对一个单词是否为回文单词进行检测,如果是则输出这个单词即可。一句话里可能既包含字母、数字还可能包含标点符号,回文单词的判断是不包含标点符号的 ,但文件输入流读取的时候标点也被一起读取进来了,因此要删除紧跟单词后中的标点符号,单独对各个单词进行判断。二、具体要求此课程设计要求编写程序以实现检测出文档中的回文单词并将其输出的功能,首先要将每一个单词从文档读取出来,其次

3、对每一个单词进行回文判断,主程序用栈和队列实现,以进一步巩固、理解和熟练掌握栈和队列的基本操作;同时对文本文件进行读取数据要利用到文件输入流的知识。三、测试数据用文本文档 data.txt,进行测试,输出回文数,及个数。文本文档中除英文字母,数字,常见标点符号外无其他字符,并且编码采用常见的 ANSI 编码。四、算法思路1、初始化栈和队列,读入 TXT 文本文档,若文档不能正常读入,则输出文档读入错误,若正常读入,文档非空则将文档中的单词逐个读入到字符串中。2、因为标点符号都是紧跟单词后的,故对每个字符串首先得判断最后一个字符 c,若 c 既不是字母也不是数字,字符串的长度减一,即以标点符号结

4、束的字符串最后一个字符不压入栈跟队列,不参与回文单词的判断。3、调用出栈与出队列函数,逐个比较出栈与出队列字符是否一样,用count 记录栈中出来的与队列出来的相同字符的个数,若 count=str .length()则说明该字符串从栈中出来跟从队列出来完全一样,即字符串完全对称,为回文单词,输出,回文单词加一个,否则什么也不做。4、读取至文本文档最后时,程序结束,关闭文本文档,同时销毁队列。5、假设文本文档中除英文字母,数字,常见标点符号外无其他字符,并且编码采用常见的 ANSI 编码。五、模块划分函数功能:void initStack(SqStack/构造一个空栈 svoid clearS

5、tack(SqStack/清空栈bool isEmpty(SqStack/判断栈是否为空bool isFull(SqStack/判断栈是否满void push(SqStack/插入元素 e 为 s 的新的栈顶元素(进栈)char pop(SqStack/若栈不空,则删除 s 的栈顶元素(出栈)void initQueue(LinkQueue/构造一个空队列 qbool isEmpty(LinkQueue q);/判断队列是否为空void destroyQueue(LinkQueue/销毁队列void insertElem(LinkQueue/ 插入元素 e 为 q 的新的队尾元素(进队列)ch

6、ar deleteElem(LinkQueue/若队列不空,则删除 q 的对头元素(出队列)六、数据结构定义栈:struct SqStack /定义栈char baseMAXSIZE;int top;定义队列:struct QNode /定义队列结点char data;QNode* next;struct LinkQueue/ 定义队列QNode* front;QNode* rear;图示:栈图示:队列,插入元素抽象数据类型栈定义如下ADT stack数据对象:D= | i=1,2,n,n 0ai,ElenSt数据关系:R1=| , D,i=2,n;1i1ia约定 端为栈顶, 端为栈底n基本操

7、作:InitStack(isFull(push(1i1ia约定 端为队列尾, 端为队列头na1a基本操作:initQueue(struct SqStack /定义栈char baseMAXSIZE;int top;void initStack(SqStack/构造一个空栈 svoid clearStack(SqStack/清空栈bool isEmpty(SqStack/判断栈是否为空bool isFull(SqStack/判断栈是否满void push(SqStack/插入元素 e 为 s 的新的栈顶元素(进栈)char pop(SqStack/若栈不空,则删除 s 的栈顶元素(出栈)#end

8、if / SQSTACK_H_INCLUDEDSqStack.h#include#include#include#include“SqStack.h“using namespace std;void initStack(SqStackvoid clearStack(SqStackbool isEmpty(SqStackbool isFull(SqStackvoid push(SqStackvoid initQueue(LinkQueueif (!q.front)exit(1);q.front-next=NULL;void destroyQueue(LinkQueuedelete q.front

9、;q.front=q.rear;void insertElem(LinkQueuep-data=e;p-next=NULL;q.rear-next=p;q.rear=p;char deleteElem(LinkQueuechar e=p-data;q.front-next=p-next;if (q.rear=p) /若队列中只剩一个元素q.rear=q.front;/删除最后一个元素,链队为空,则需同时使队尾指针指向头结点delete p;return e;bool isEmpty(LinkQueue q)return q.front=q.rear;main.cpp#include#inclu

10、de#include#include#include“SqStack.h“#include“LinkQueue.h“using namespace std;int main()string str;int i,sum=0;LinkQueue q;SqStack s;initStack(s);if(isEmpty(s)coutstr;i=str.length();char c=stri-1;if (c=a|c=A|c=Z);elsei-;for (int j=0; ji; j+)push(s,strj);insertElem(q,strj);for (int k=0; ki; k+)if (po

11、p(s)=deleteElem(q)count+;if (count=i ni; n+)coutstrn;cout“ “;sum+;infile.close();coutendl;cout“此文本文档中共有回文单词:“sum“个“ endl;cout“*“endl;clearStack(s);if(isEmpty(s)cout“栈销毁成功!“endl;destroyQueue(q);if(isEmpty(q);cout“队列销毁成功!“endl;return 0;八、测试情况测试结果分析对于语句中的一般回文单词能正常输出,句末跟标点符号连在一起的回文单词也能通过程序把字符串末尾的标点给去掉并正

12、常输出,而字符串中的连接符可以作为回文单词的组成部分一起输出。九、设计总结本次课程设计我本来打算做第一个的,后来还是不得不做第二个,但最后我还是将第一个和第二个一起做了,我觉得回文数检查太简单,所以也没有花多大功夫去做,只是利用了栈和队列的性质,将字符压入栈与队列中,然后压出,判断是否相等,相等就输出。设计时本来想弄复杂点的,最后还是觉得没必要,既然简单的几行代码就能实现,何必去画蛇添足呢?简单就行,于是简单的编了出来。利用压栈和出栈判断有一个缺点,就是如果单词开头存在“”或者 时,无法进行判断,这样导致计算出来的结果不够准确。在顺利的完成了设计,我明白了在编写程序的时候,应该尽量使界面简洁大方,布局统一。变量类型的定义,程序可以设计的很简单,够用就好,这样程序就可以尽可能的减少对系统资源的占用。当然这样在设计时也免不了存在着一些不足。十、参考文献1. 谭浩强 C+程序设计 清华出版社 2. 严蔚敏, 吴伟民. 数据结构. 清华大学出版社, 2007.4

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报