02 2020 档案
摘要:1. 算法描述归并排序是将两个或两个以上的有序表合并成一个新的有序表。2. 算法代码: /** * 归并排序 **/ func MergeSort(data []int) { count := len(data) if count <= 1 { return } mid := count / 2 M
阅读全文
摘要:选择排序的基本方法:每次都从待排序对象中选出排序码最大或最小的对象,依次排列,一共进行n-1次即可将n个对象排序完成。选择排序的实施方案:1. 直接选择排序2. 堆排序 一、直接选择排序1. 算法代码: /** * 直接选择排序 **/ func SelectSort(data []int) { f
阅读全文
摘要:交换排序的基本方法:两两比较待排序对象的排序码,如果发生逆序,则交换之,直到所有对象都排好序为止。交换排序的实施方案:1. 冒泡排序2. 快速排序 一、冒泡排序1. 算法代码: /** * 冒泡排序 **/ func BubbleSort(data []int) { for i := 0; i <
阅读全文
摘要:插入排序的基本方法:每一步将一个待排序的对象,按其排序码大小,插入到前面已经排好序的一组对象的适当位置上,直到所有对象全部插入为止。插入排序的实施方案:1. 直接插入排序2. 折半插入排序3. 希尔排序 一、直接插入排序1. 算法代码: /** * 直接插入排序 **/ func InsertSor
阅读全文
摘要:本文主要以一个带权有向图为例,讲解图相关的一些算法实现(Go语言),包括图的顶点和边的插入与删除操作,还有图的深度优先遍历和广度优先遍历,以及图的一些引申应用:最小生成树、从源点到其余各点的最短路径、拓扑排序。 一、图的概念图是由顶点集合及顶点间的关系(边)集合组成的一种数据结构。关于图的更多基本术
阅读全文
摘要:一、概念哈夫曼树又称最优树,是一类带权路径长度最短的树。 二、实现哈夫曼树最经典的应用就是根据每种字符在单词中出现的频率构造一棵哈夫曼树,使用它对文章进行编码、解码,从而使得文章的二进制编码最短。下面就以此问题为例,讲解哈夫曼树的实现。此问题主要需要支持以下三个方法:1. 构造哈夫曼树(1)将所有需
阅读全文
摘要:一、什么是堆1. 定义设有n个数据元素组成的序列{a1, a2, ..., an},这些数据元素是一棵完全二叉树中的节点,如果对于所有节点,父节点数据总是大于子节点数据,则称该序列为大根堆(最大堆),反之,若父节点数据总是小于子节点数据,则称为小根堆(最小堆)。2. 应用一般用于比较快速的取得一个数
阅读全文
摘要:关于二叉排序树的相关概念,可以查看上一篇文章——树的概念。本文将使用Go语言代码实现二叉排序树的增删查操作,同时以它为例,实现二叉树的前、中、后序遍历与层次遍历等操作。 一、二叉排序树的结构定义 1. 结构定义 /** * 二叉排序树节点结构 **/ type SearchBinTreeNode s
阅读全文
摘要:一、二叉树1. 定义二叉树的每个节点最多只有两棵子树,且子树有左右之分,次序不能颠倒。2. 几种特殊的二叉树(1)满二叉树(完美二叉树):所有非叶子节点均有两个子节点,所有叶子节点必须在同一层上。节点数达到最大值。 (2)完全二叉树:若设二叉树的深度为h,除第h层外,其它各层的节点数都达到最大值,第
阅读全文
摘要:一、什么是队列1. 定义:队列是只允许在一端(队头)删除,在另一端(队尾)插入的线性表。2. 特性:先进先出。 图示: 二、队列的应用1. 在程序设计中,凡是要按照先来先处理的原则操作的问题都可以利用队列来解决。2. 打印缓冲。3. 分时系统的管理。 三、队列的实现队列可使用数组或单向线性链表实现,
阅读全文
摘要:一、什么是栈1. 定义:只允许在一端(栈顶)进行插入和删除操作的线性表。2. 特点:先进后出。 图示: 二、栈的应用1. 只要实际问题符合先进后出的特点,即可使用栈进行解决。2. 栈在计算机科学领域具有广泛的应用,例如,在编译和程序执行过程中,就需要利用栈进行语法检查、计算表达式的值、实现函数或过程
阅读全文