数据结构课程设计报告.docx
《数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告
西安郵電學院
数据结构课程设计报告
题目:
魔王语言
系部名称
:
通信工程系
专业名称
:
通信工程
班级
:
学号
:
学生姓名
:
指导教师
:
时间
:
2010年12月6日至2010年12月10日
魔王语言实验报告
一、课程设计目的
熟悉栈、队列、数组、链表,结构体等结构的使用,包括链表或数组的插入、删除,栈和队列的出栈、入栈、出队、入队操作。
学会递归的用法。
二、课程设计内容
魔王语言问题描述:
有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂,但他的语言上可以逐步解释成人能懂得语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:
(1)ab1b2……bn;
(2)(cd1d2……dn)cdncdn-1……cd1c
基本要求:
用以下两条具体规则(具体规则数量不定)和上述规则形式
(2)实现。
设大写字母表示魔王语言解释的词汇,小写字母表示人的语言的词汇;希腊字母可以用大写或小写字母代换的变量。
魔王语言可含人的词汇。
(1)BtAtA
(2)Asae
示例:
魔王说:
B(ehnxgz)B
解释成人类语言:
tsaedsaeezegexenehetsaedsae
若每个小写字母含义如下表所示:
t
d
s
a
e
z
g
x
n
h
天
地
上
一只
鹅
追
赶
下
蛋
恨
则魔王说的话是:
天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅
三、需求分析
该程序主要实现魔王语言倒人类语言的转化,将抽象精练的魔王语言通过程序的操作,依据定义的规则转化为人类可以理解的语言。
具体操作有去括号、大写换小写、将小写转换为对应的中文汉字。
四、概要设计
1.系统结构图(功能模块图)
2.功能模块说明
(1)去括号操作(Delkuohao1):
运用栈和队列结构来实现规则一的实现,根据设定可以去多重括号。
(2)大写转换小写(ExangeWord1):
运用栈结构来实现大写转换小写的操作,可以实现大写转换小写的嵌套。
(3)小写转换中文(ExplainWord):
根据提前设定好的小写对应的中文汉字,遍历查找后将之存储到数组中并输出。
五、详细设计及运行结果
1、主函数的调用图
2、流程图
(1)去括号操作(Delkuohao1):
I,j=-1
*(MWord+i)!
='@'
*(MWord+i)=='('或其他
*(MWord+i)==')'
入栈PUSH(s,*(MWord+i))
出栈入队M->Word[M->rear]=s->Sword[j]
出队入栈PUSH(s,M->Word[M->frent])
出栈*(MWord+i)=s->Word[i];
输出printf("%c",*(MWord+i));
(2)大写转换小写(ExangeWord1):
k=1
K!
=0
s1->Word[s1->top]<'A'||s1->Word[s1->top]>'Z'
s1出栈,s2入栈PUSH(&s2,s1->Word[s1->top]);
找大写对应的小写(prule+j)->Word==s1->Word[s1->top]&&(prule+j+1)->Word==':
'
(prule+j)->Word!
=':
'
大写解释入栈PUSH(&s2,(prule+j)->Word)
s2出栈,s1入栈PUSH(s1,s2.Word[s2.top])
判断存在大写?
k=0?
大写转换小写后存入*(Man)=s1->Word[i]
(3)小写转换中文(ExplainWord):
I,j
*(Man+i)!
='@'
遍历找小写对应中文for(pTrans=hTrans;*(Man+i)!
=pTrans->Word;pTrans++)
pTrans->Word!
=';'
存储对应中文*(Chin+j)=pTrans->Word
3,运行结果
六、调试情况,设计技巧及体会
这个程序花了我几天的功夫,基本满意,只是还有一些操作没有做到尽善尽美。
比如说文件操作中不可以在程序运行时添加规则,只可以从预先编好的的文件中读出来,还有刚开始用的动态链表,后来又改为了用数组存储。
我觉得再花点时间可以圆满的完成这次没做到的。
说到感受就是当程序没有错误而且可以正确运行结果是的激动心情,毕竟这几天的精力都花上面了。
刚开始夜没有考虑周全,导致后来整体换了结构,而且临时改了算法。
还要感谢编程序时帮助过我的老师和同学战友,没有他们的帮助我是不会做的这样快的。
最深刻的一点就是:
持之以恒,善始善终。
什么事情都可搞定,只要相信自己!
七、参考文献
C语言程序设计(第二版)主编:
王曙燕科学出版社
数据结构主编:
耿国华高等教育出版社
八、附录:
(略)
西安郵電學院
数据结构课程设计报告
题目:
多项式相乘
系部名称
:
通信工程系
专业名称
:
通信工程
班级
:
学号
:
学生姓名
:
指导教师
:
时间
:
2010年12月11日至2010年12月15日
多项式相乘实验报告
一、课程设计目的
通过实现多项式相乘的运算,熟悉数组或动态链表结构的使用,包括动态链表或数组的存储、插入、删除,排序等操作、
二、课程设计内容
用带头结点的动态单链表来表示多项式;在此基础上完成多项式的乘法运算。
要求以动态链表为存储结构、使用到查找和排序等操作;用一个单链表来表示一个一元多项式;在创建多项式的过程中,可以按指数的任意顺序输入,并且可在同一多项式中输入指数相同的多个项;在进行乘法操作之前,输出参与操作的两个多项式。
要求输出的多项式按指数升序排列,同指数的多项合并,项数的正负号显示合理。
对已排序且合并了同指数项的两个多项式实现乘法操作,并输出结果,结果多项式要求以动态链表为存储结构;输出结果多项式要求按指数升序排列,同指数的多项要合并,项数的正负号要求显示合理。
三、需求分析
该程序主要实现两个多项式相乘的操作,包括多项式的排序,合并同指数项,并且正确输出多项式。
要完成这些操作,就需要借助动态链表或者数组来暂时存储需要处理的数据,然后完成相应的操作。
四、概要设计
1.系统结构图(主要功能模块图)
2.功能模块说明
(1)排序操作(PolyClaer):
创建新的带表头结点的链表,遍历原链表,每次找到指数最小的节点,赋给新创建的链表,最后返回新链表的头指针。
(2)合并同指数项(PolyClean):
遍历排序后的链表,找到指数相同的节点,合并为一个节点后释放其中一个节点。
(3)相乘操作(Polycheng):
分别用其中一个多项式去乘另一个多项式的每一项,将相乘的结果存储在新创建的带表头结点的动态链表里,并输出结果。
五、详细设计及运行结果
1、主函数的调用图
2、流程图
(1)排序操作(PolyClaer):
flag=1;
flag!
=0
p->next!
=NULL;
遍历查找最小指数项p->coef!
=0&&p->expMIN=p->exp;
申请新节点存最小指数项q1=(Polynode*)malloc(sizeof(Polynode));
查找到的节点系数赋0t->coef=0;
q->next
遍历查看是否存在未处理项?
q->coef!
=0
flag=1;
返回头结点returnh1;
(2)合并同指数项(PolyClean):
p=h->next
p->next!
=NULL
遍历合并同指数项?
q->exp==p->exp
释放其中一个节点free(p);
p->next!
=NULL
释放合并后节点系数为0的项?
p->coef==0
free(p);
输出多项式p->next!
=NULL
printf("%dx^%d+",p->coef,p->exp);
(3)相乘操作(Polycheng):
新建带表头结点的链表p=h;
遍历多项式1p1->next!
=NULL
i++;
多项式1节点数n1=i;
遍历多项式2p2->next!
=NULL
j++;
多项式2节点数n2=j;
多项式相乘操作i<=n1
j<=n2
相乘并储存q=(Polynode*)malloc(sizeof(Polynode));
遍历输出:
p->next!
=NULL
printf("%dx^%d+",p->coef,p->exp);
返回头结点returnh;
六、调试情况,设计技巧及体会
1、运行结果
2、设计技巧及体会
因为以前上机做过多项式相加,而且思路简洁,所以这个程序没用多少时间就搞定了。
主要思想是设定排序函数和合并同指数函数,这样输入的多项式1、多项式2和相乘后的多项式只需调用这两个函数就完成了实验
最深的体会就是只要思路清晰算法正确,编写程序就不是什么问题。
再加上深厚的c语言和数据结构知识,就可以顺利的完成。
七、参考文献
C语言程序设计(第二版)主编:
王曙燕科学出版社
数据结构主编:
耿国华高等教育出版社
八、附录:
(略)