数据结构与算法

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

目录

  • 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. 二叉树的先、中、后和层序遍历;

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

三、 实验内容与要求

利用EasyX实现分别实现顺序存储结构与二叉链表存储结构的二叉树的构造,并演示二叉树先序、中序、后序、层序遍历的访问过程。

顺序存储存储结构二叉树

1. 在窗体中绘制63(为了演示效果,节点个数不能太多)个节点的完全二叉树,节点使用圆表示;

2. 利用鼠标点选二叉树的节点,选中与非选中顶点之间使用颜色进行区分;(第一次上机任务节点)

3. 通过改变节点的颜色,演示出该二叉树在先序、中序、后序和层序过程中,节点被访问的顺序;

   4. 参考效果如下:

   (1)选二叉树节点

(2)先序遍历二叉树

(3)中序遍历二叉树


(4)层序遍历二叉树


   二叉链表存储存储结构二叉树(选做)

1. 利用弹出的输入框输入二叉树的扩展先序遍历字符串,创建二叉链表;

2. 计算二叉树各节点的中序遍历次序(决定横坐标值),高度值(决定二叉树的纵坐标值)

3. 根据二叉树各节点纵横位置值,绘制二叉树

4. 通过改变节点的颜色,演示出该二叉树在先序、中序、后序和层序过程中,节点被访问的顺序;

   5. 参考效果如下:      

(1)输入二叉树的扩展先序遍历结果,并绘制二叉树


(2)后序遍历二叉树


(3)层序遍历二叉树


四、编程原理讲解

五、进一步思考

1、还有没有其它更好的办法安排节点的位置;

2、如何在遍历的过程中,在提示文字中,输出当前的遍历序列;

3、结合你所了解的二叉树的应用,思考二叉树的实际创建过程;

4、先、中、后序遍历,若不用递归,如何实现。