《算法与数据结构》课程设计报告

数据结构课程设计是在学完数据结构课程之后的实践教学环节。本实践教学是培养学生数据抽象能力,进行复杂程序设计的训练过程。要求学生能对所涉及问题选择合适的数据结构、存储结构及算法,并编写出结构清楚且正确易读的程序,提高程序设计基本技能和技巧。

一.设计目的

1.提高数据抽象能力。根据实际问题,能利用数据结构理论课中所学到的知识选择合适的逻辑结构以及存储结构,并设计出有效解决问题的算法。

2.提高程序设计和调试能力。学生通过上机练习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

3.初步了解开发过程中问题分析、整体设计、程序编码、测试等基本方法和技能。

二.设计方案

设计方案如下:

1.  单链表的基本操作及应用

首先用InitList_L()函数初始化线性表,构造一个空表,再使用CreateList_L( )函数创建一个想要的线性表。剩余的基本操作ListInsert_L( )插入,ListDelete_L( )删除,LocateElem_L( )查找,即可相应完成。

2.  栈的基本操作及应用

同线性表,首先用InitStack(STACK&S)初始化,构造一个空栈,再使用Push(STACK&S, ElemType e)向栈内压入元素,出栈则使用Pop(STACK &S, ElemType &e),取出栈内元素,用函数GetTop(STACK S, ElemType &e)获取栈顶元素。

3.  数组的基本操作及应用

利用函数CreateSMatrix(TSMatrix&M)创建一个稀疏矩阵,则需要一个数组Triple data[MAXSIZE+1]记录非零元素的行序、列序和数值。再将三元数组中元素的行序和列序和矩阵的行序和列序作比较,不相等的矩阵元素则为零,相等则为稀疏因子的值。再利用函数PrintSMatrix(TSMatrix M)输出稀疏矩阵。

4.  二叉树的基本操作及应用

首先使用函数CreateBiTree(BiTree&T)递归创建二叉树的左子树和右子树,随后利用函数PreOrder(T)、InOrder(T)和PostOrder(T)递归先序、中序和后序遍历二叉树的值,再函数Visit(BiTree T)输出二叉树节点的值。计算二叉树的深度,比较二叉树节点左子树和右子树的孩子都为空的时候的记录的值大,即为树的深度。计算二叉树叶子节点的个数,当节点的左右孩子都为空的时候,节点为叶子,则可以使用计数,当节点左右孩子为空,计数加1,知道计算所有的树,总和为叶子的个数。求赫夫曼编码,各字符的编码长度不等,所以按实际长度动态分配空间,从叶子到根逆向处理求得各个叶子节点所表示的字符的赫夫曼编码。

5.  图的基本操作及应用

利用邻接矩阵表示法构造图,网则要记录权值,构造邻接矩阵arcs存储图。访问初始点Vi,并标志其已被访问。此时定义一指向边结点的指针p,并建立一个while()循环,以指针所指对象不为空为控制条件,当Vi的邻接点未被访问时,递归调用深度优先遍历函数访问之。然后将p指针指向下一个边结点。求有向图的拓扑排序,在头结点中增加一个存放顶点入度的数组(indegree)。入度为零的顶点即为没有前驱的顶点,删除顶点及以它为尾的弧的操作,即可换为弧头顶点的入度减1来实现。

 

三.设计流程图

     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四.实现代码(部分)

第一步:设计主菜单。

void main(){

int n;

do{

ShowMainMenu();

printf("请选择:");

scanf("%d",&n);

switch(n){

case 1:LinkList();break;

case 2:Stack();break;

case 3:Array();break;

case 4:BiTree();break;

case 5:Graph();break;

case 6:break;

default:printf("ERROR!");break;

}

}while(n!=6);

}

void ShowMainMenu() {

printf("\n");

printf("*******************算法与数据结构******************\n");

printf("* 1  单链表的基本操作及应用                      *\n");

printf("* 2  栈的基本操作及应用                          *\n");

printf("* 3  数组的基本操作及应用                        *\n");

printf("* 4  树的基本操作及应用                           *\n");

printf("* 5  图的基本操作及应用                          *\n");

printf("* 6  退出                                        *\n");

printf("***************************************************\n");

}

第二步:添加功能函数。

在程序合适的位置添加相应的函数实现各功能模块。

1、在语句printf("* 1  单链表的基本操作及应用   *\n”)添加实现单链表操作的函数。

StatusCreateList_L(LinkList&L, int n)//创建线性表

{

InitList_L(L);

int i;

cout << "输入要插入的链表个数:";

cin >> n;

ElemTypee;

for (i = 1; i <= n; i++)

{

cin >> e;

ListInsert_L(L,i, e);

}

return OK;

}

2、在语句printf("* 2  栈的基本操作及应用     *\n");添加实现栈基本操作的函数:

void Push(STACK&S, ElemType e)  //压栈

{

SLinkList p;

p =(SLinkList)malloc(sizeof(LNode));

if (!p) exit(OVERFLOW);

p->data = e;

p->next = S.top;

S.top = p;

}

3、稀疏矩阵

StatusCreateSMatrix(TSMatrix&M)

{

cout << "请输入稀疏矩阵的行数、列数和非零元个数:" <<endl;

cin >> M.mu;

cin >> M.nu;

cin >> M.tu;

for (int i = 1; i <= M.tu; i++)

{

cout << "请按行序输入非零元素的值、行标和列标:" <<endl;

cin >> M.data[i].e;

cin >> M.data[i].i;

cin >> M.data[i].j;

}

return OK;

}

4、二叉树

intCreateBiTree(BiTree &T) {

char data;

//按次序输入二叉树中结点的值(一个字符),‘#’表示空树

cin >> data;

if (data == '#') {

T = NULL;

}

else {

if (!(T =(BiTNode*)malloc(sizeof(BiTNode))))

exit(OVERFLOW);

//生成根结点

T->data = data;

//构造左子树

CreateBiTree(T->lchild);

//构造右子树

CreateBiTree(T->rchild);

}

return 0;

}

5、图的基本操作

Status CreateUDG(ALGraph&G)         //构造无向图

{

G.kind =1;

cout<< "请输入无向图的顶点数和边数:" << endl;

cin>> G.vernum >> G.arcnum;

int i, e;

cout<< "输入每个顶点的值:" << endl;

for (i =1; i <= G.vernum; i++)

{

cin>> e;

G.vertices[i- 1].data = e;

G.vertices[i- 1].firstarc = 0;

}

int v1,v2;

for (i =0; i < G.arcnum; i++)

{

cout<< "请输入第" << i << "条弧所关联的两个点的位置:" << endl;

cin>> v1 >> v2;

ArcNode*q= (ArcNode*)malloc(sizeof(ArcNode));

q->adjvex= v2 - 1;

q->nextarc= G.vertices[v1 - 1].firstarc;

G.vertices[v1- 1].firstarc = q;

q =(ArcNode*)malloc(sizeof(ArcNode));

q->adjvex= v1 - 1;

q->nextarc= G.vertices[v2 - 1].firstarc;

G.vertices[v2- 1].firstarc = q;

}

return OK;

}

五.实现结果

展示二叉树部分运行结果:

1、创建二叉树ABC##DE#G##F###

2、  计算树的深度

3、遍历二叉树

4、赫夫曼编码

 

 

六.心得总结

指导老师意见:

成绩:                  教师签名:

年    月    日

数据结构课程设计实验报告相关推荐

  1. 湖北汽车工业学院c语言程序设计 汽车零部件采购管理程序,湖北汽车工业学院c语言课程设计实验报告(采购信息管理系统).docx...

    湖北汽车工业学院c语言课程设计实验报告(采购信息管理系统) C语言课程设计 商品销售信息管理系统 #include #include #include #include structproduct// ...

  2. 西工大计算机操作系统实验报告,西工大计算机操作系统课程设计实验报告bh05xh5...

    <西工大计算机操作系统课程设计实验报告bh05xh5>由会员分享,可在线阅读,更多相关<西工大计算机操作系统课程设计实验报告bh05xh5(7页珍藏版)>请在人人文库网上搜索. ...

  3. c语言课程设计实验报告模板,[C语言课程设计实验报告模板.doc

    [C语言课程设计实验报告模板 <程序设计基础> 课程设计报告 课程设计题目 通讯录管理系统 指导教师:____李 萍____ 班 级:__ 0903班_ _ __ 学生姓名:2009100 ...

  4. c语言实验与课程设计 李开,华中科技大学C语言课程设计实验报告及源代码.doc...

    华中科技大学C语言课程设计实验报告及源代码 课 程 设 计 报 告 题目: 航班时刻表信息查询系统 课程名称: C语言程序设计 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术 ...

  5. 2019春第二次课程设计实验报告

    2019春第二次课程设计实验报告 一.实验项目名称: 贪吃蛇游戏编写: 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现的目标是对小蛇移动的控制, 同时对小蛇数据的保存,如何实现转弯的效 ...

  6. 2109春第一次课程设计实验报告

    2019春第一次课程设计实验报告 一.实验项目名称: 飞机游戏的编写 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现控制飞机的移动功能,增加其实用度, 同时还实现发射子弹和出现敌机的操 ...

  7. c语言图形时钟编程,C语言图形时钟课程设计实验报告.doc

    C语言图形时钟课程设计实验报告.doc 目录 1.系统功能要求 . 2. 数据结构设计及 说明 . 3.程序结构(画流程图) . 4.各模块的功能 . 5.试验结果(包括输入数据和输出结果) . 6. ...

  8. 2019春第一次课程设计实验报告

    2019春第一次课程设计实验报告 一.实验项目名称 反弹球消砖块 二 .实验项目功能描述 用c语言编写一个反弹球小游戏,可以自己改变游戏的各项数据,可以通过键盘的 "a",&quo ...

  9. c语言时钟报告,C语言图形时钟课程设计实验报告

    C语言图形时钟课程设计实验报告 目录1.系统功能要求.2. 数据结构设计及说明.3.程序结构(画流程图) .4.各模块的功能.5.试验结果(包括输入数据和输出结果) .6.体会.7.参考文献.8.附录 ...

  10. matlab数字图像处理课程设计报告,数字图像处理课程设计实验报告.doc

    数字图像处理课程设计实验报告 数字图像处理课程设计 题 目:数字图像处理及Huufman(或小波变换)编码仿真实现 学生姓名: 学 院:信息工程学院 系 别:电子信息工程系 专 业:电子信息工程 班 ...

最新文章

  1. Xcode消除编译器警告
  2. 微软成功抵御峰值高达 2.4Tbps 的 DDoS 攻击
  3. 从源码来理解slf4j的绑定,以及logback对配置文件的加载
  4. 一个栈输入序列为1,2,3,4,5,则下列序列中不可能是栈的输出序列是?
  5. C/C++ http协议发送字段,文件,单个和多张图片
  6. Java中基础数据类型分类
  7. 安全专家教你如何利用Uber系统漏洞无限制的免费乘坐?
  8. 信息学奥赛一本通(1050:骑车与走路)
  9. Building Apps for Windows Phone 8.1教程下载地址整理
  10. EF并非我们想象的那么智能
  11. 阿里云linux上安装,卸载mysql与重新安装配置Mysql
  12. 统计学(贾俊平《第七版》) 导论部分
  13. VS2019 + QT5.12调试时无法显示Qt相关变量如QString具体值
  14. java ppt转图片,怎么用POI将PPT的内容转换为图片
  15. Azure架设Discuz论坛笔记
  16. Linux驱动-platform设备驱动
  17. 鲲鹏生态跑出加速度 中原数字经济再续新动能
  18. 如何用PS制作一个小泡泡呢?
  19. 请描述你对测试的了解, 内容可以涉及测试流程, 测试类型, 测试方法, 测试工具等。
  20. python读写文件的语句_用Python读写文件指南

热门文章

  1. Windows官方镜像大全---【内附网盘链接】
  2. VMware许可证过期解决方案
  3. Android中AppCompat简介
  4. 非常详细的Maven安装与配置教程
  5. Hadoop大数据技术原理与应用课后习题答案汇总
  6. Alex 的 Hadoop 菜鸟教程: 第22课 分布式日志收集组件:flume
  7. WebStorm汉化包下载(以及Android Studio,IntelliJIDEA等的汉化包下载)
  8. Go程序设计语言pdf
  9. java 文件夹删除_Java删除文件夹和文件
  10. HFSS阵列天线设计与仿真2