数据结构课程设计报告Word文档格式.docx
《数据结构课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计报告Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/20/77aac210-97e5-4ddf-b597-3d95ae10f0e0/77aac210-97e5-4ddf-b597-3d95ae10f0e01.gif)
1.2测试数据-1-
2概要设计-2-
2.1ADT描述-2-
2.2程序模块结构-2-
2.3 各功能模块-3-
3 详细设计-4-
3.1结构体定义-4-
3.2类定义-4-
3.4输入保存操作-5-
3.5插入操作-5-
3.6删除操作-7-
3.7查找操作-9-
3.8前序输出操作-10-
3.9后序输出操作-10-
3.10判断是否为空操作-11-
3.11判断是否为满操作-11-
3.12菜单操作-12-
3.13选择操作-12-
3.14主函数操作-15-
4调试分析-16-
5 用户使用说明-17-
6 测试结果-18-
结论-20-
致谢-21-
参考文献-22-
摘要
随着计算机的普及,越来越多的人对C++编程技术有了一定地了解,而要想有更多了解或者精通C++编程,就必须对掌握数据的储存结构。
而静态双向链表又是数据储存结构的典型,它是用数组来实现的。
具体操作是,在数组中增加两个指针域,分别用来指向前一个或后一个数组元素的下标,以达到静态数据指向。
当它创建成功后,可以用来储存已知的数据,进而实现静态访问。
关键词:
计算机;
编程技术;
数组;
静态双向链表;
储存结构。
引言
数据结构是在用计算机处理一些日常问题中发展起来的一门学科,我们主要用它来组织数据和建立适当的数据结构,提高程序的运行的时间效率和空间效率,从而设计出高效实用的程序来解决实际问题。
课程设计是为了让学生用所学到的数据结构知识,设计出一种处理实际问题的算法。
它的意义在于将理论运用于实际,提高学生的动手能力。
本次课程设计题目的任务是使用数组实现静态双向链表对数据的储存,所采用的设计工具为MicrosoftVisualStudio2008。
1需求分析
1.1任务与分析
任务:
静态双向链表的实现。
任务分析:
在数组增加两个指针域,用于存放该元素的上一个和下一个数据元素的下标,从而实现用数组构造出静态双向链表。
1.2测试数据
1、输入测试数据:
图1-1输入测试数据图
2、插入测试数据:
图1-2插入测试数据图
3、查询测试数据:
图1-3查询测试数据图
4、删除测试数据:
图1-4删除测试数据图
2概要设计
2.1ADT描述
ADTDoubleList{
数据对象:
D{list[i]|list[i]属于elemtype,i=1,2,3…n,n>
0}
数据关系:
R={<
list[i],list[i+1]>
|list[i],list[i+1]都属于D,i=1,2,3,…,n}
基本操作:
初始化(DoubleList:
:
DoubleList());
输入保存操作(voidDoubleList:
SaveDatas());
插入操作(voidDoubleList:
InsertData());
删除操作(voidDoubleList:
DeleteData());
查找操作(voidDoubleList:
SearchData());
前序输出操作(voidDoubleList:
FrontPrint());
后序输出操作(voidDoubleList:
PostPrint());
判断是否为空操作(boolDoubleList:
IsEmpty());
判断是否为满操作(boolDoubleList:
IsFull());
菜单操作(voidmenu());
选择操作(voidchoose());
主函数操作(intmain());
}
2.2程序模块结构
2.2.1 结构体定义
structdnode
{
elemtypedata;
intprior,next;
2.2.2 程序各模块间的调用结构图
图2-1程序各模块间的调用结构图
2.3各功能模块
表2.1功能模块表
功能模块
函数原型声明
函数功能
1、输入保存功能模块
voidSaveDatas();
输入数据并保存
2、插入功能模块
voidInsertData();
插入数据
3、删除功能模块
voidDeleteData();
删除数据
4、查找功能模块
voidSearchData();
查找数据
5、前序输出功能模块
voidFrontPrint();
顺序输出数据
6、后序输出功能模块
voidPostPrint();
逆序输出数据
7、判断是否为空模块
boolIsEmpty();
判断是否为空
8、判断是否为满模块
boolIsFull();
判断是否为满
9、菜单模块
voidmenu()
提供选择菜单
10、选择模块
voidchoose()
提供选择功能
3 详细设计
3.1结构体定义
};
3.2类定义
classDoubleList
private:
dnodelist[max];
intlength;
public:
DoubleList();
~DoubleList(){};
voidSaveDatas();
voidInsertData();
voidDeleteData();
voidSearchData();
voidFrontPrint();
voidPostPrint();
boolIsEmpty();
boolIsFull();
3.3初始化
DoubleList:
DoubleList(){
for(inti=0;
i<
max;
i++)
{
list[i].data=0;
}
length=0;
3.4输入保存操作
voidDoubleList:
SaveDatas()
intt;
;
cout<
<
"
请输入数据,输入0时结束"
cin>
>
t;
if(t==0)
break;
list[i].data=t;
list[i].prior=i-1;
list[i].next=i+1;
length++;
if(length==max)
{
cout<
链表春空间已满,不能再输入"
endl;
}
3.5插入操作
voidDoubleList:
InsertData()
intt=-1,a;
dnode*p;
p=newdnode;
while(!
IsFull())
请输入要插入的数据,输入0时结束:
a;
if(a==0)
p->
data=a;
t=-1;
if(length!
=0)
while(t>
length||t<
0)
请输入要插入的位置(1到"
length<
):
cin>
}
for(inti=length;
i>
=t;
i--)
list[i].data=list[i-1].data;
if(i==length)
{
list[i].next=i+1;
list[i].prior=i-1;
}
list[t-1].data=p->
data;
插入成功|"
else
list[0].data=p->
list[0].next=1;
list[0].prior=-1;
length++;
插入成功"
3.6删除操作
DeleteData()
dnodep;
ints;
s=length;
while(!
IsEmpty())
{
cout<
请输入要删除的数据,输入0时结束"
cin>
if(t==0)
break;
p=list[0];
while(p.next!
=length+1)
if(p.data==t)
for(inti=p.prior+1;
length;
list[i].data=list[i+1].data;
if(length==i+1)
{
list[i].next=-100;
list[i].prior=-100;
length--;
cout<
删除成功"
}
p=list[p.prior+1];
if(p.next!
=length)
break;
else
{
=length)
p=list[p.next];
else
p.next++;
}
if(length==s)
没有找到要删除的数据"
3.7查找操作
SearchData()
inti,t;
i=0;
输入要查询的数据,输入0时结束"
i++;
数据"
t<
在"
p.next<
位置"
if(p.next!
p=list[p.next];
p.next++;
if(i==0)
没有找