1、姓 名: 汪敏新指导教师: 武卫东说明:结论(优秀、良好、中等、及格、不及格)作为相关教环节考核必要依据;格式不符合要求;数据不实,不予通过。报告和电子数据必须作为实验现象重复的关键依据。学术诚信声明 本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评
2、分结论并承担相关一切后果。本人签名: 日期: 年 月 日课程设计任务书课程设计名称XXXX课程设计专业学生姓名班级学号题目名称起止日期年月日起至日止课设内容和要求:参考资料:教研室审核意见: 教研室主任签字:指导教师(签名)日学 生(签名)课程设计总结:课程设计课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在设计过程中,和同学们相互探讨,相互学习,相互监督。我学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世,这次课程设计对我来说受益良多。课程设计是我们专业课程知识综合应用的实践训练,着是我们
3、迈向社会,从事职业工作前一个必不少的过程“千里之行始于足下” ,通过这次课程设计,我深深体会到这句千古名言的真正含义。我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找,在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。回
4、顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,虽然只有几天,但可以学到很多的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识都用上。本
5、次课程设计结束了,对于我的影响很大。我通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我知道自己哪些方面做得还不够。 1 问题分析和任务定义1.1题目顺序表结构和算法。1.2内容1、设计出顺序表结构的相关函数库,以便在程序设计中调用。2、实现顺序表的各种基本函数以及常用函数。3、给出1-2个例子,通过调用自己的库函数来实现问题的求解。4、设计顺序表的相关函数,以便在程序调用中调用,进行顺序表中元素的插入、查找、取出、删除等操作。1.3要求1、设计软件的系统功能模块及各模块的程序流程图。2、采用模块化编程,系统中的各项功能分别用函数编写。3、学生独立完成系统的设计,编码
6、和调试工作并通过指导老师的检查。4、按课程设计规范撰写课程设计报告。2系统功能模块结构图 图1-顺序表结构功能模块图3数据结构设计及使用说明3.1 定义线性表抽象数据类型3.1.1基本操作: SqLsetnull (L) 操作前提:L是一个未初始化的线性表 操作结果:将L初始化为一个空的线性表L是一个已初始化的空表建立一个非空的线性表L SqLinsert (L,s,i)线性表L已存在将元素s插入到线性表L的i位置 SqLdelete (L,i)将线性表L中i位置的元素删除, SqLlocate (L,x)在线性表L中查找元素x,若存在,返回元素在表中的序号位置;若不存在,返回-1 SqLle
7、ngth_L(L) 初始条件:返回L中数据元素个数SqLget (L,i)判断第i个数据元素值是否存在,存在则返回1;否则,返回0;3.2详细设计和编码3.2.1类型定义typedef struct Datatype datamaxlen; int last;Sequenlist; /*将data和len封装成一个结构体*/3.2.2顺序表初始化Sequenlist *SqLsetnull()Sequenlist *L;L=(Sequenlist*)malloc(sizeof(Sequenlist); L-last=-1; return(L);3.2.3子函数输出函数void print(Se
8、quenlist *L) int h; printf(显示结果为: ); for(h=0;hlast+1;h+) %d ,L-datah); /*输出顺序表中所有元素*/n 判表满 int SqLempty(Sequenlist *L) if(L-last+1=50) return(1); else return(0);插入函数int SqLinsert(Sequenlist *L,Datatype s,int i) int j; if(SqLempty(L)=1) printf(表满溢出n else if(ilast+2)位置出错n for(j=L-last;j=i-1;j-) L-data
9、j+1=L-dataj;/*节点往后移动一个位置*/datai-1=s; /*插入新元素s*/last+; /*last仍指向最后一个元素*/ return (1);取数函数int SqLget(Sequenlist *L, int i) int x; if(idatai-1; return (1) ;更新函数 int SqLupdate(Sequenlist *L,int i,int s)其中用switch来做选择操作,从而实现个子函数对应的功能。4 相关函数的描述4.1 本函数包含的十个函数 主函数main() 初始化顺序表函数SqLsetnull () 显示顺序表内容函数print()
10、插入元素函数SqLinsert () 删除元素函数SqLdelete () 查找元素函数SqLlocate () 取值函数SqLget () 判表满4.1.1各函数之间的调用关系4.2主函数的代码main() 说明一个单链表 L ;初始化 L ; 建立 L ; 显示 L ;4.3用法说明程序执行后,首先输出:“请输入表长:”n输入表长后,输出:“请输入n个元素值:”输入n个元素值后,输出:“请选择:任意选择指定操作的某一操作序号:如3“输入需要删除的元素”然后程序自动执行结果并显示出来5算法的程序流程图图二-顺序表的程序流程图6程序测试结果执行情况如下:请正确输入4个元素:1 2 3 4 请选
11、择: 1:显示所有元素 2:增加一个元素 3:按数值删除某个元素 4:按位置删除某个元素 5:按位置更新 6:按数值更新 7:按位置查找某元素 8:按值查找某元素 9:退出程序 3 需要删除的元素:4 显示结果为:1 2 3 测试结果如下图所示: 图三 插入一个数字 图四 删除一个数字 图五 更改一个数字7参考文献【1】严蔚敏、陈文博,数据结构应用算法教程【M】.北京:清华大学出版社,2011.5【2】张小莉、王淼、罗文劼,数据结构与算法【M】.北京:机械工业出版社,2014.48附录(程序清单)#includestdlib.htypedef int Datatype;typedef stru
12、ct Sequenlist Datatype data50; Sequenlist *L; L = (Sequenlist*)malloc(sizeof(Sequenlist);last = -1; for (h = 0; h if (L-last + 1 = 50)int SqLinsert(Sequenlist *L, Datatype s, int i) if (SqLempty(L) = 1) else if (ilast + 2) for (j = L- j = i - 1; j-) L-dataj + 1 = L-datai - 1 = s; return (1);int SqLd
13、elete(Sequenlist *L, int i)lastlast + 1) /*检查空表及删除位置的合法性*/参数出错! for (j = i; j j+)dataj - 1 = L-last-;int SqLupdate(Sequenlist *L, int i, int s) if (idatai - 1;void SqLlocate(Sequenlist *L, int x) int i, z = 0; for (i = 0; idatai = x) printf(该元素的位置为:%d, i + 1); z = 1; if (z = 0)不存在此元素!void Delete_x(S
14、equenlist *L, int x) int j, k, z = 0; for (j = 0; j j+)dataj = x) for (k = j; kdatak = L-datak + 1; /*向前移动一个位置*/ j-; /*返回到删除的位置*/void Update_x(Sequenlist *L, int x) int j, k, z = 0, t = 1;dataj = x)将第%d次出现的数%d更改为:, t, x); scanf(, &k);dataj = k; t+;int main() int i, j, t, s, h, m, n, flag = 1; L = Sq
15、Lsetnull();请输入表长: scanf(i);last = i - 1;请输入%d个元素值:, i); /*确定表长*/ for (t = 0; ti; t+) scanf(datat); /*输入表中元素*/ while (flag) /*使用标识flag*/请选择:1:显示所有元素n2:增加一个元素n3:按数值删除某个元素n4:按位置删除某元素n5:按位置更改n6:按数值更改n7:按位置查找(取)元素n8:按值查找一个元素n9:退出程序n /*输入顺序表元素之后显示选项*/j); switch (j) /*当输入数字j时自动调用函数库中的函数实现功能*/ case 1:print(
16、L); break; case 2:输入需要插入的数值和位置:%d %ds, & h = SqLinsert(L, s, i); if (h) printf(插入之后的线性表: /*显示插入元素后的顺序表*/ print(L); break; case 3:输入需要删除的元素:s); Delete_x(L, s); /*显示删除元素后的顺序表*/ print(L); case 4:输入需要删除的数值位置: h = SqLdelete(L, s);删除之后的线性表: case 5:输入需要更改的位置和更改后的数据:m, &n); h = SqLupdate(L, m, n); /*显示更新元素后的顺序表*/ case 6:输入需要更改的数m); Update_x(L, m); case 7:取出第n个元素: h = SqLget(L, i);所取的数据元素为:%dndatai - 1); /*输出所取元素*/ else输入序号超出范围! /*输入不合法报错*/ case 8:输入需要查找的数值: SqLlocate(L, s); case 9: flag = 0;程序结束,按任意键退出! return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1