数据结构课程设计报告范文Word文件下载.docx
- 文档编号:17214613
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:15
- 大小:140.79KB
数据结构课程设计报告范文Word文件下载.docx
《数据结构课程设计报告范文Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告范文Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
5.独立完成;
6.每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其它的题目,当然在完成自己的题目之后根据个人兴趣能够继续选做其它的题目;
7.课程设计完成后严格按照报告格式撰写课程设计报告,并于结束后的第三天上交到学习委员统一交给老师;
8.课程设计的成绩由两部分组成:
程序检查成绩(40%,每个功能占程序分的20%)+报告检查成绩(40%)+平时考核(20%)
五、实现思路
链表是一种动态数据结构,她的特点是用一组任意的存储单元(能够是连续的,也能够是不连续的)存放数据元素。
链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。
Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。
能够看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变
量,用来存放下一个结点的地址。
实际上,链表中的每个结点能够用若干个数据和若干个指针。
结点中只有一个指针的链表称为单链表,这是最简单的链表结构。
再c++中实现一个单链表结构比较简单。
例如,可定义单链表结构的最简单形式如下
classlink
{
public:
elemtypedata;
link*next;
};
这里用到了结构体类型。
其中,*next是指针域,用来指向该结点的下一个结点;
Data是一个整形变量,用来存放结点中的数据。
当然,Data能够是任何数据类型,包括结构体类型或类类型。
在此基础上,我们在定义一个链表类list,其中包含链表结点的插入,删除,输出等功能的成员函数。
voidprint(link*head);
//链表结点的输出
link*Locate(link*head,elemtypex);
//链表的的查询
voidinsert(link*head,elemtypex,elemtypey);
//链表结点的插入
voiddeletel(link*head,elemtypex);
//链表结点的删除
v
oidchange(link*p,elemtypex,elemtypey);
//链表的修改
由于链表中的各个结点是由指针链接在一起的,其存储单元文笔是连续的,因此,对其中任意结点的地址无法向数组一样,用一个简单的公式计算出来,进行随机访问。
只能从链表的头指针(即head)开始,用一个指针p先指向第一个结点,然后根据结点p找到下一个结点。
以此类推,直至找到所要访问的结点或到最后一个结点(指针为空)为止。
流程图:
Public:
N
Y
q!
=NULL
q->
data==x
data=y
q=q->
next
link*q
主函数流程图
3…
4…
5…
6…
7…
N
…….
六、实现过程
#include<
iostream.h>
windows.h>
stdlib.h>
#defineelemtypeint
classlink
classlinklist
protected:
link*head;
link*rcreat()
{
link*s,*p,*r;
elemtypei;
cout<
<
"
输入多个结点数值(用空格分隔),为0是算法结束"
;
cin>
>
i;
p=r=newlink;
p->
next=NULL;
while(i)
{
s=newlink;
s->
data=i;
r->
next=s;
r=s;
cin>
}
r->
returnp;
}
voidprint(link*head)
link*p;
p=head->
next;
while(p->
next!
=NULL)
p->
data<
->
p=p->
cout<
data;
endl;
link*Locate(link*head,intx)
p=head;
intj=0;
while((p!
=NULL)&
&
(j<
x))
{p=p->
j++;
}
voiddeletel(link*head,elemtypex)
link*p,*q;
q=head;
(p->
data!
=x))
q=p;
if(p==NULL)cout<
要删除的结点不存在"
else
q->
next=p->
delete(p);
voidinsert(link*head,intx,elemtypey)
link*p,*s;
s=newlink;
s->
data=y;
if(head->
next==NULL)
head->
s->
p=Locate(head,x);
if(p==NULL)
插入位置非法"
voidchange(link*p,elemtypex,elemtypey)
link*q;
q=p->
while(q!
if(q->
data==x)q->
q=q->
intcount(link*h)
intn=0;
p=h->
while(p!
n++;
p=p->
returnn;
voidmain()
intn,act;
charm;
elemtypex,y;
linklista;
p=a.rcreat();
a.print(p);
loop1:
cout<
请选择要进行的操作:
\ne:
查找;
f:
删除;
g:
插入;
h:
修改;
i:
统计;
q:
退出;
c:
清屏。
\n"
cin>
m;
if(m=='
e'
)//根据提示选择操作
{act=1;
f'
)
{act=2;
g'
{act=3;
h'
{act=4;
i'
{act=5;
q'
{act=6;
c'
{act=7;
switch(act)
case1:
请输入要查找的元素值"
x;
q=a.Locate(p,x);
if(q==NULL)cout<
x<
不在表中。
找不到!
elsecout<
在表中,已找到!
gotoloop1;
break;
case2:
请输入要删除的元素"
y;
a.deletel(p,y);
case3:
请输入插入位置的元素(将待插元素插入到它的后面)"
请输入待插元素值"
a.insert(p,x,y);
case4:
请输入要修改前后的元素值"
x>
a.change(p,x,y);
case5:
n=a.count(p);
链表中结点个数为:
n<
case6:
system("
CLS"
);
//清屏
gotoloop2;
case7:
loop2:
七、实验总结(分析程序的得与失)
1、经过运行本程序能够进行链表的创立、插入、删除、修改、统计等功能,已具备链表试验的功能,基本达到了题目的要求。
2、在编写程序的过程中,对字符的判断做标记,用switch语句选择运用,使结构更加清晰,能够用goto语句进行循环。
使程序的可执行性更强。
3、本程序还是有一定缺陷,比如运行界面不够美观、但基本达到了人机交互的功能达到要求
4、对本程序自我感觉人机交互做的比较好,能够做到根据选择进行操作,主要依靠循环进行实现,同时我也加入了清屏功能,使操作更加人性化。
5、本程序的但还是比较单一,功能不是很完善,能够对界面进行设计,是其更加美观。
八、心得体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
经过本次为期一周的课程设计课,我有很多感触,从我拿到题目开始到完全做出程序,我经历了一个波折的一周,可是这周我受益匪浅,明白把理论用到实践中的不容易。
这是第二次做C的课程设计,比第一次稍微好一点,遇到问题都自己花时间去查找资料,知道从什么地方入手,但在实验中发现自己有很多的不足,对课本理解的不够深刻,对一些课外的知识要多接触,与拓展。
虽然有太多的困难,可是在艾老师的指导下课程设计还是顺利的完成了。
在整个课程设计的过程中老师非常耐心的给我们辅导,扮演着很重要的角色,特别是教我一些课外的知识。
在此非常感谢我的指导老师。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 范文