数据结构课程设计
----个人设计报告
专
班
姓
学
业:
级:
名:
号:
指导教师:
日
期:
1
目录
1 课程设计目的 ....................................... 3
2 课程设计内容和要求 ................................. 3
3 任务完成情况 ....................................... 3
4 设计报告 ........................................... 4
4.1 顺序表 .................................................................................................................................. 4
4.1.1 设计目的 .................................................................................................................. 4
4.1.2 设计内容及要求......................................................................................................4
4.1.3 需求分析 .................................................................................................................. 4
4.1.4 概要设计 .................................................................................................................. 5
4.1.5 详细代码 .................................................................................................................. 6
4.1.6 使用说明 .................................................................................................................. 6
4.1.7 测试结果与分析......................................................................................................6
4.1.8 参考文献 .................................................................................................................. 8
4.2 链表 ...................................................................................................................................... 9
4.2.1 设计目的 .................................................................................................................. 9
4.2.2 设计内容及要求......................................................................................................9
4.2.3 需求分析 .................................................................................................................. 9
4.2.4 概要设计 .................................................................................................................. 9
4.2.5 详细代码 ................................................................................................................ 12
4.2.6 使用说明 ................................................................................................................ 12
4.2.7 测试结果与分析....................................................................................................12
4.2.8 参考文献 ................................................................................................................ 14
4.3 树和二叉树 ........................................................................................................................ 15
4.3.1 设计目的 ................................................................................................................ 15
4.3.2 设计内容及要求....................................................................................................15
4.3.3 需求分析 ................................................................................................................ 15
4.3.5 详细代码 ................................................................................................................ 17
4.3.6 使用说明 ................................................................................................................ 17
4.3.7 测试结果与分析....................................................................................................18
4.3.8 参考文献 ................................................................................................................ 20
5 体会与感想 ........................................ 21
附录: .............................................. 22
设计一(顺序表)的代码......................................................................................................22
设计二(链表)的代码 ..........................................................................................................30
设计三(树和二叉树)的代码 ..............................................................................................38
2
1 课程设计目的
1、 学习获取知识的方法;
2、 提高发现问题、分析问题和解决实际问题的能力;
3、 加强创新意识和创新精神;
4、 加强团队的分工与合作;
5、 掌握面向实际背景思考问题的方法。
2 课程设计内容和要求
内容:
前言
第一章 顺序表
第二章 链表
第三章 树和二叉树
个人基本任务:
完成第1,2,3章,其中选做题可不做。
3 任务完成情况
任务完成情况介绍,如表 3-1.
表 3-1 任务完成情况表
完成任务名称
顺序表
链表
树和二叉树
3
4 设计报告
4.1 顺序表
4.1.1 设计目的
熟悉顺序表的应用
4.1.2 设计内容及要求
本程序用 C 语言编写,完成以下功能:
1)实现二路归并排序算法。
2)实现快速排序算法。
3)实现堆排序算法。
4)实现冒泡排序和选择排序算法
5)删除线性表中所有值为 item 的数据元素
6)五种排序方法性能测试
4.1.3 需求分析
本程序用 C 编写,完成 5 种排序和性能测试,删除线性表中所有值为 item 的
数据元素等功能,并且需要一个菜单让用户自主选择执行的功能。
① 输入的形式和输入值的范围:
输入的元素是整形,输入值的范围是 0-9,输入-1 结束。
2 输出的形式:
在每次选择菜单后,输出相应的结果,并且询问下次操作的项目。
3 程序所能达到的功能:
完成 5 种排序和性能测试,删除线性表中所有值为 item 的数据元素。每次操作结
束后,都会有菜单方便用户进行下一步的操作。
4 测试数据:
A.菜单显示为:
请输入您要测试的项目:
4
1.顺序存储的线性表 5 种排序算法
» 选择 1
» 显示 请输入元素个数
» 输入 整数
» 输出 5 种排序方法排序后的元素
2.删除线性表中所有值为 item 的数据元素
» 选择 2
» 显示 请输入元素个数
» 输入 整数
» 显示 依次输入元素,按空格分开
» 输入 整数
» 显示 请输入 item 的值(整数)
» 输入 整数
» 输出 剩下的元素
3.性能测试
» 选择 3
» 输出 5 种排序(有序/随机元素)的时间
0.退出管理系统
» 选择 0
» 退出当前程序
4.1.4 概要设计
1) 为了实现上述程序功能,需要定义顺序表的抽象数据类型:
typedef struct list
{
int key;//关键字项
}RedType;//记录类型
typedef struct
{
RedType r[MAXSIZE];//r[0]闲置或用作哨兵单元
int length; //顺序表长度,参加排序元素的实际个数
}SqList;//顺序表类型
2) 本程序包含 16 个函数:
1
2
void
void
InitialRandom(SqList *L)ContactList
Initial(SqList *L)
5
3
4
5
6
7
8
void Merge(RedType SR[], RedType TR[],int i,int m,int n)
void Msort(RedType SR[] ,RedType TR1[] ,int s ,int t)
void Mergesort(SqList *L )
void choice(SqList *L)
void bubble(SqList *L)
void quicksort(SqList *L,int start,int end)
void Heapsort(SqList *L)
9
10 void HeapAdjust(SqList *L,int s,int m)
11 void out(SqList *L)
12 int Delete(SqList *L, int item)
13 void OrderInitial(SqList *L)
14 void
15 void Performance()
16 int main()
InOrderInitial(SqList *L)
4.1.5 详细代码
见附录一
4.1.6 使用说明
程序执行后出现如图 4.1-2 的菜单:
菜单共有四个选项,选择不同的选项会出现相应的提示进行下一步操作:
图 4.1-2 菜单
选择 1:顺序存储的线性表 5 种排序算法
选择 2:删除线性表中所有值为 item 的数据元素
选择 3:性能测试
选择 0:退出
4.1.7 测试结果与分析
1. 顺序存储的线性表 5 种排序算法,如图 4.1-3:
6
图 4.1-3
实验结果:生成随机数,用 5 种方法从小到大排序
2. 删除线性表中所有值为 item 的数据元素,如图 4.1-4:
实验结果:分三类讨论,分别是删除第一个,最后一个,当中元素
3. 性能测试,如图 4.1-5:
图 4.1-4 删除元素
7
如图 4.1-5 一万元素性能测试
如图 4.1-6 五十万元素性能测试
实验结果:分别生成有序和无需的元素,用 5 种排序方法分别排序,并输出时间
注意:VS6.0 中 10 万元素以上就会溢出,特别是快速排序只能在 1 万元素时实现,否则
栈会溢出,故在 50 万测试时把快速排序的函数用“//”注释掉,因此时间为 0。
4. 输入 0 退出
4.1.8 参考文献
[1] 严蔚敏等著, 数据结构(C 语言版), 清华大学出版社
[2] 高一凡著, 数据结构算法解析, 清华大学出版社
8