数据结构顺序表课程设计资料Word下载.docx
- 文档编号:21391557
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:23
- 大小:184.14KB
数据结构顺序表课程设计资料Word下载.docx
《数据结构顺序表课程设计资料Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构顺序表课程设计资料Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
姓名:
汪敏新
指导教师:
武卫东
说明:
结论(优秀、良好、中等、及格、不及格)作为相关教环节考核必要依据;
格式不符合要求;
数据不实,不予通过。
报告和电子数据必须作为实验现象重复的关键依据。
学术诚信声明
本人声明:
所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。
与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名:
日期:
年月日
课程设计任务书
课程设计名称
XXXX课程设计
专业
学生姓名
班级
学号
题目名称
起止日期
年
月
日起至
日止
课设内容和要求:
参考资料:
教研室审核意见:
教研室主任签字:
指导教师(签名)
日
学生(签名)
课程设计总结:
课程设计课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。
在设计过程中,和同学们相互探讨,相互学习,相互监督。
我学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世,这次课程设计对我来说受益良多。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程“千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。
我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找,在用的时候难免出现这样那样的错误。
如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。
解决的这个问题的办法是调整。
一个系统的菜单和提示信息非常重要。
如果没有这些用户根本不知道怎么用你设计的这个系统。
在设计的调试过程中也无法顺利的完成调试工作。
有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。
回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,虽然只有几天,但可以学到很多的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识都用上。
本次课程设计结束了,对于我的影响很大。
我通过这次实践学到了许多知识。
学到了设计一个简单的系统。
要注意哪些方面。
也使我知道自己哪些方面做得还不够。
1问题分析和任务定义
1.1题目
顺序表结构和算法。
1.2内容
1、设计出顺序表结构的相关函数库,以便在程序设计中调用。
2、实现顺序表的各种基本函数以及常用函数。
3、给出1-2个例子,通过调用自己的库函数来实现问题的求解。
4、设计顺序表的相关函数,以便在程序调用中调用,进行顺序表中元素的插
入、查找、取出、删除等操作。
1.3要求
1、设计软件的系统功能模块及各模块的程序流程图。
2、采用模块化编程,系统中的各项功能分别用函数编写。
3、学生独立完成系统的设计,编码和调试工作并通过指导老师的检查。
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
SqLlength_L(L)
初始条件:
返回L中数据元素个数
SqLget(L,i)
判断第i个数据元素值是否存在,存在则返回1;
否则,返回0;
3.2详细设计和编码
3.2.1类型定义
typedefstruct
{Datatypedata[maxlen];
intlast;
}Sequenlist;
/*将data和len封装成一个结构体*/
3.2.2顺序表初始化
Sequenlist*SqLsetnull()
{
Sequenlist*L;
L=(Sequenlist*)malloc(sizeof(Sequenlist));
L->
last=-1;
return(L);
}
3.2.3子函数输出函数
voidprint(Sequenlist*L)
inth;
printf("
显示结果为:
"
);
for(h=0;
h<
L->
last+1;
h++)
{
%d"
L->
data[h]);
}/*输出顺序表中所有元素*/
\n"
}
判表满
intSqLempty(Sequenlist*L)
if(L->
last+1>
=50)
return
(1);
else
return(0);
插入函数
intSqLinsert(Sequenlist*L,Datatypes,inti)
intj;
if(SqLempty(L)==1)
printf("
表满溢出\n"
elseif(i<
1||i>
last+2)
位置出错\n"
for(j=L->
last;
j>
=i-1;
j--)
L->
data[j+1]=L->
data[j];
/*节点往后移动一个位置*/
data[i-1]=s;
/*插入新元素s*/
last++;
/*last仍指向最后一个元素*/
return
(1);
取数函数
intSqLget(Sequenlist*L,inti)
intx;
if(i<
last+1)
{
取数出错!
"
return(0);
x=L->
data[i-1];
return
(1);
更新函数
intSqLupdate(Sequenlist*L,inti,ints)
其中用switch来做选择操作,从而实现个子函数对应的功能。
4相关函数的描述
4.1本函数包含的十个函数
•主函数main()
•初始化顺序表函数SqLsetnull()
•显示顺序表内容函数print()
•插入元素函数SqLinsert()
•删除元素函数SqLdelete()
•查找元素函数SqLlocate()
•取值函数SqLget()
•判表满
4.1.1各函数之间的调用关系
4.2主函数的代码
main()
{说明一个单链表L;
初始化L;
建立L;
显示L;
4.3用法说明
程序执行后,首先输出:
“请输入表长:
”n
输入表长后,输出:
“请输入n个元素值:
”
输入n个元素值后,输出:
“请选择:
任意选择指定操作的某一操作序号:
如3
“输入需要删除的元素”
然后程序自动执行结果并显示出来
5算法的程序流程图
图二-顺序表的程序流程图
6程序测试结果
执行情况如下:
请正确输入4个元素:
1234
请选择:
1:
显示所有元素
2:
增加一个元素
3:
按数值删除某个元素
4:
按位置删除某个元素
5:
按位置更新
6:
按数值更新
7:
按位置查找某元素
8:
按值查找某元素
9:
退出程序
3
需要删除的元素:
4
显示结果为:
123
测试结果如下图所示:
图三插入一个数字
图四删除一个数字图五更改一个数字
7参考文献
【1】严蔚敏、陈文博,数据结构应用算法教程【M】.北京:
清华大学出版社,2011.5
【2】张小莉、王淼、罗文劼,数据结构与算法【M】.北京:
机械工业出版社,2014.4
8附录(程序清单)
#include<
stdio.h>
stdlib.h>
typedefintDatatype;
typedefstructSequenlist
Datatypedata[50];
Sequenlist*L;
L=(Sequenlist*)malloc(sizeof(Sequenlist));
last=-1;
for(h=0;
h<
last+1;
h++)
L->
if(L->
last+1>
=50)
intSqLinsert(Sequenlist*L,Datatypes,inti)
if(SqLempty(L)==1)
elseif(i<
1||i>
last+2)
for(j=L->
j>
=i-1;
j--)
L->
data[j+1]=L->
data[i-1]=s;
return
(1);
intSqLdelete(Sequenlist*L,inti)
last<
0)
顺序表空!
1||(i>
last+1))/*检查空表及删除位置的合法性*/
参数出错!
for(j=i;
j<
=L->
j++)
data[j-1]=L->
last--;
intSqLupdate(Sequenlist*L,inti,ints)
if(i<
last+1)
x=L->
data[i-1];
voidSqLlocate(Sequenlist*L,intx)
inti,z=0;
for(i=0;
i<
i++)
if(L->
data[i]==x)
{
printf("
该元素的位置为:
%d"
i+1);
z=1;
}
if(z==0)
不存在此元素!
voidDelete_x(Sequenlist*L,intx)
intj,k,z=0;
for(j=0;
j<
j++){
data[j]==x){
for(k=j;
k<
k++){
L->
data[k]=L->
data[k+1];
/*向前移动一个位置*/
}
j--;
/*返回到删除的位置*/
voidUpdate_x(Sequenlist*L,intx)
intj,k,z=0,t=1;
data[j]==x)
将第%d次出现的数%d更改为:
t,x);
scanf("
&
k);
data[j]=k;
t++;
intmain()
inti,j,t,s,h,m,n,flag=1;
L=SqLsetnull();
请输入表长:
scanf("
i);
last=i-1;
请输入%d个元素值:
i);
/*确定表长*/
for(t=0;
t<
i;
t++)
scanf("
data[t]);
/*输入表中元素*/
while(flag)/*使用标识flag*/
请选择:
1:
显示所有元素\n"
2:
增加一个元素\n"
3:
按数值删除某个元素\n"
4:
按位置删除某元素\n"
5:
按位置更改\n"
6:
按数值更改\n"
7:
按位置查找(取)元素\n"
8:
按值查找一个元素\n"
9:
退出程序\n"
/*输入顺序表元素之后显示选项*/
j);
switch(j)/*当输入数字j时自动调用函数库中的函数实现功能*/
case1:
{print(L);
break;
case2:
输入需要插入的数值和位置:
%d%d"
s,&
h=SqLinsert(L,s,i);
if(h)
{
printf("
插入之后的线性表:
/*显示插入元素后的顺序表*/
print(L);
break;
case3:
输入需要删除的元素:
s);
Delete_x(L,s);
/*显示删除元素后的顺序表*/
print(L);
case4:
输入需要删除的数值位置:
h=SqLdelete(L,s);
删除之后的线性表:
case5:
输入需要更改的位置和更改后的数据:
m,&
n);
h=SqLupdate(L,m,n);
/*显示更新元素后的顺序表*/
case6:
输入需要更改的数"
m);
Update_x(L,m);
case7:
取出第n个元素:
h=SqLget(L,i);
所取的数据元素为:
%d\n"
data[i-1]);
/*输出所取元素*/
else
输入序号超出范围!
/*输入不合法报错*/
case8:
输入需要查找的数值:
SqLlocate(L,s);
case9:
flag=0;
程序结束,按任意键退出!
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 顺序 课程设计 资料