数据结构与算法

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

目录

  • 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. 使用EasyX做简单的图形处理

三、 实验内容与要求

利用EasyX实现直接插入、简单选择排序、快速排序......等排序算法的动画演示

   1.利用键盘输入10个以内的,1~20的整数(为了更好的演示效果,建议元素个数无需太多,且元素的值不易过大,且为正整数)

   2. 利用柱状条表示元素,且柱状条的高度与元素的大小成正比;

   3. 动画中需要演示出元素比较、交换的过程;

   4. 参考例程,实现直接插入、简单选择排序、快速排序......等排序的动画演示,且录制视频讲作品(突出亮点,特别是例程中未提及的细节的解决),并提交PBL作业;

   5. 参考效果如下:

直接插入排序:                             


简单选择排序:

堆排序演示效果:

四、进一步思考与任务

   1.如何在柱状条的(或下方)显示出待排序元素的数据值

   2.如何区分已有序元素与未有序元素

   3.该如何修改交换函数,实现现柱状条曲线路线的移动或交换 

   4.如何利用对话框输入数据 

   5.其它(希尔排序、快速排序、冒泡排序、堆排序、归并排序、基数排序)的排序算法如何实现演示。