数据结构与算法

梁宝兰、徐翔、周艳明、吴舜歆、李瑞芳、陈晨

目录

  • 1 前言
    • 1.1 课程考核说明
    • 1.2 头歌平台注册指南
  • 2 绪论
    • 2.1 数据结构总览
    • 2.2 什么是数据结构
    • 2.3 数据结构求解问题的过程
    • 2.4 算法及其描述
    • 2.5 算法分析基础
  • 3 线性表
    • 3.1 线性表的基本概念
    • 3.2 线性表的顺序存储结构
    • 3.3 顺序表算法设计
    • 3.4 单链表
    • 3.5 单链表的算法设计
    • 3.6 双向链表
    • 3.7 循环链表
    • 3.8 线性表的应用
  • 4 栈和队列
    • 4.1 栈的定义和顺序栈
    • 4.2 链式栈
    • 4.3 队列的定义和顺序队列
    • 4.4 链式队列
    • 4.5 栈和队列的应用——迷宫求解
  • 5 第4章 串
    • 5.1 串的基本概念和存储概念
    • 5.2 串的匹配
  • 6 第5章 数组和广义表
    • 6.1 数组和特殊矩阵
    • 6.2 稀疏矩阵的存储
  • 7 第6章 树和二叉树
    • 7.1 树的定义和基本术语
    • 7.2 二叉树的基本概念
    • 7.3 二叉树的存储
    • 7.4 二叉树的基本运算
    • 7.5 二叉树的遍历
    • 7.6 二叉树遍历的应用
    • 7.7 二叉链表的构造
    • 7.8 二叉树的线索化
    • 7.9 哈夫曼树
  • 8 图结构
    • 8.1 图的基本概念和术语
    • 8.2 图的存储结构
    • 8.3 图的遍历
    • 8.4 最小生成树
    • 8.5 最短路径
    • 8.6 AOV网与AOE网
  • 9 查找
    • 9.1 查找的基本概念和术语
    • 9.2 基于线性表的查找
    • 9.3 基于树的查找
    • 9.4 哈希表
  • 10 内部排序
    • 10.1 排序的基本概念
    • 10.2 插入类的排序
    • 10.3 交换类的排序算法
    • 10.4 选择类的排序
    • 10.5 归并类的排序
    • 10.6 基数排序
    • 10.7 排序比较
  • 11 基于EasyX的实践项目
    • 11.1 初识EasyX
    • 11.2 飞舞的蝴蝶
      • 11.2.1 示例程序1:在窗体中显示一张蝴蝶图片
      • 11.2.2 示例程序2:在窗体先后显示两张蝴蝶图片
      • 11.2.3 示例程序3:蝴蝶在原地不断煽动翅膀
      • 11.2.4 示例程序4:旋转蝴蝶图片显示
      • 11.2.5 示例程序5:图片移动
      • 11.2.6 参考答案:飞舞的蝴蝶
    • 11.3 排序动画
      • 11.3.1 示例程序1:绘制待排序关键字柱状图
      • 11.3.2 示例程序2:柱状条移动动画
      • 11.3.3 示例程序3:待排序元素柱状条移动、交换
      • 11.3.4 示例程序4:简单选择排序算法
      • 11.3.5 参考答案1:堆排序演示
      • 11.3.6 参考答案2:冒泡排序演示
      • 11.3.7 参考答案3:快速排序演示
      • 11.3.8 参考答案4:直接插入排序
    • 11.4 约瑟夫环动画
      • 11.4.1 示例程序1:链表常见操作函数
      • 11.4.2 示例程序2:创建约瑟夫环
      • 11.4.3 示例程序3:绘制约瑟夫环
      • 11.4.4 示例程序4:突出显示一下圆
      • 11.4.5 示例程序5:删除p指针指向的圆
    • 11.5 括号匹配动画
      • 11.5.1 示例程序1:利用Inputbox输入括号串
      • 11.5.2 示例程序2:窗体中输出括号串
      • 11.5.3 示例程序3:栈中字符的输出
      • 11.5.4 示例程序4:字符进栈动画
      • 11.5.5 示例程序5:字符出栈动画
    • 11.6 迷宫搜索动画
      • 11.6.1 示例程序1:对话框输入迷宫行列规模
      • 11.6.2 示例程序2:绘制迷宫矩阵
      • 11.6.3 示例程序3:鼠标点选迷宫障碍点
      • 11.6.4 示例程序4:鼠标点选迷宫入口与出口
      • 11.6.5 示例程序5:深度优先遍历迷宫
    • 11.7 二叉树遍历动画
      • 11.7.1 示例程序1:绘制满二叉树
      • 11.7.2 示例程序2:显示鼠标点击位置
      • 11.7.3 示例程序3:二叉链表存储的二叉树创建
      • 11.7.4 示例程序4:绘制二叉链表结构的二叉树
    • 11.8 图的遍历与求最小生成树动画
      • 11.8.1 示例程序1:根据邻接矩阵存储结构绘制图
      • 11.8.2 示例程序2:鼠标点击窗体创建图的节点
      • 11.8.3 示例程序3:利用鼠标选择绘图窗体中的顶点
      • 11.8.4 示例程序4:求顶点V的未被访问的邻接点
    • 11.9 二叉排序树的插入动画
      • 11.9.1 示例程序1:绘制满二叉树
      • 11.9.2 示例程序2:实现模拟按钮菜单
      • 11.9.3 示例程序3:二叉排序树插入一个节点
      • 11.9.4 示例程序4:二叉排序树的创建
  • 12 综合练习题讲解
    • 12.1 重点应用题讲解
    • 12.2 提问小题讲解
图的遍历与求最小生成树动画

一、 实验目的

  1. 掌握图的逻辑结构与存储结构;

  2. 掌握图的基本操作与最小生成树算法;

  3. 掌握利用C/C++编程语言实现数据结构的编程方法;

  4. 通过上机实践加强利用数据结构解决实际应用问题的能力;

二、 实验相关知识

  1. 图的邻接矩阵存储结构;

  2. 图的深度优先遍历算法,与连通性的判定;

  3. 图的最小生成树的Prim算法;

  4. 使用EasyX做简单的图形处理。

三、 实验内容与要求

利用EasyX实现在窗体中,通过鼠标交互方式,在窗体中绘制图的顶点,并通过鼠标选择边的端点,再利用输入框输入无向边的权重值,从而创建出图,并利用图的邻接矩阵的存储结构存储图信息。创建图后,利用深度优先遍历方法,遍历图中的各节点,若为连通图,则利用Prim算法求图的最小生成树。参考效果如下:


(1)点击鼠标在窗体中创建图的节点(按回车或节点个数等于节点的最大值结束)(已提供)


(2)鼠标选中无向边的两个端点,并利用输入框输入无向边的权重值(权重值为小于10000的整数),两顶点之间若不存在边,则边的权重值,设为无穷(一个大于10000的整数即可)(第一次实验任务点)


(3)从1号节点开始,进行深度优先遍历连通分支,若能遍历所有点,则判定为连通图,可以求最小生成树。(第二次实验任务点)


(4)利用Prim算法从1号节点开始,求图的最小生成树(第二次实验任务点)

四、讲解视频

五、进一步思考

1、如何避免节点的重叠;

2、如何通过鼠标拖拉节点,调整图的绘图形状;

3、在求最小生成树过程中,可否显示closest数组和lowcost数组值的变化情况;

4、如何利用Dijkstra算法求单源点的最短路径。