goang_数据结构--------------
文章平均质量分 66
田园园野
我坚持,我坚信
展开
-
遍历二叉树(递归,非递归都有)
主要描述一下非递归,递归在下面的总的代码里有:因为非递归都用到了栈,先贴一下栈的代码const stackSize int = 22 //栈的容量type TreeNode struct { //树结点 Left *TreeNode Value int Right *TreeNode}type Stack struct { ...原创 2018-05-09 17:39:03 · 941 阅读 · 0 评论 -
堆排序
一、概念堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。堆排序中的堆指选择排序中的无序区间,利用了大根堆(或小根堆)堆顶记录的 关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。二、演示过程1、初始化大顶堆(对应上图的建大顶堆)2、将大...原创 2018-05-08 15:28:36 · 1383 阅读 · 0 评论 -
golang ----------- 平衡二叉树-AVL树
平衡二叉树的旋转:有4类,每类中又有两类1、右旋转:当插入的结点为失衡点的左孩子的左孩子,如下图所示,A,B是一种情况,虚线部分表示不存在。这两种情况都是右旋转,代码一样2、左旋转:当插入的结点为失衡点的右孩子的右孩子,如下图所示,A,B是一种情况,虚线部分表示不存在。这两种情况都是右旋转,代码一样3、先右旋转,再左旋转:当插入的结点为失衡点的右孩子的子孩子(左右孩子都行),如下图所示,A,B是一...原创 2018-05-14 21:46:24 · 1879 阅读 · 0 评论 -
golang ----------- 二叉排序树
二叉排序树又叫二叉搜索树,二叉查找树主要在删除时:分两种情况:1、如果被删除结点只有一个子结点,就直接将A的子结点连至A的父结点上,并将A删除2、如果被删除结点有两个子结点,将该结点右子数内的最小结点取代A。代码:package mainimport "fmt"type BST struct { left *BST value int right *BST}//查找元素fun...原创 2018-05-14 17:07:02 · 782 阅读 · 0 评论 -
golang ----------- 选择排序
从未排序的序列a[i+1:]中选择最小的值,存入a[i]代码:func ChooseSort(a []int){ for i:=0; i<len(a);i++ { for j:=i+1;j<len(a);j++{ if a[j] < a[i] { a[j],a[i] = a[i],a[j] } } } fmt.Println(a)}测试:fun...原创 2018-05-07 20:08:11 · 228 阅读 · 1 评论 -
golang ----------- 快速排序
在数组a中,设置一个值key为枢轴。在调整的过程中,设立两个指针low和high;之后逐渐减小high,增加low(low<=high);并保证a[low]<key,a[high]>key;否则进行记录的交换代码:func QuickSort(a []int){ if len(a) <= 1{ return } key := a[0] /...原创 2018-05-07 19:53:10 · 816 阅读 · 5 评论 -
golang ----------- 希尔排序
尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行 插入排序。如将下面数组进行排序:1、d =len(a)/2=3,036一组,14一组,25一组,如下排序后如下:2、d=d/2=1,只剩全体一组了注意:当数组为偶数时,1~8;开始d=4,15 26 37 48分四组 当数组为奇数时: 1~9;开始d=4,159 26 37 48也分四组,(注意159三个数一组)代码:...原创 2018-05-07 18:51:30 · 340 阅读 · 0 评论 -
B树 插入 删除 图文 代码实现 golang实现
一、B树的定义B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。一颗m阶的B树定义如下:1、每个结点最多有m-1个关键字。2、根结点最少可以只有1个关键字。3、非根结点至少有Math.ceil(m/2)-1个关键字。4、每个结点中的关键字都按照从小到大的顺序排列,每个关键字...原创 2018-05-20 15:14:14 · 3426 阅读 · 4 评论 -
golang ------------ 表插入排序
一、表插入排序优点为了减少在排序过程中进行的“移动”记录的操作,必须改变排序过程中采用的存储结构。利用静态链表进行排序,并在排序完成之后,一次性的调整各个记录相互之间的位置,即将在各个记录都调整到它们所应该在的位置。二、表结构type Node struct{ value int next int}var NL []Node //NL为此记录表表结构就是一个静态链表,它可以用一个数组来...原创 2018-05-07 10:58:09 · 322 阅读 · 0 评论 -
golang ----------- 折半插入排序
折半插入排序是直接插入排序的升级,在查找插入点时,使用折半查找,代码如下:func HalfInsertSort(a []int){//折半插入 var j,low,high int for i := 1;i<len(a);i++ { a[0] = a[i] low = 1 high = i-1 for low <= high { //在a[1:i-1]中折半...原创 2018-05-06 17:29:07 · 219 阅读 · 0 评论 -
golang ----------- 直接插入排序
时间复杂度:最好的情况:比较次数:n-1; 移动次数:0最坏情况:(n+2)(n-1)/2; 移动次数:(n+4)(n-1)/2一 、插入算法通过比较和插入来实现排序,流程如下:首先对数组的前两个数据进行从小到大的排序将第3个数据与排好的两个数据进行比较,将第3个数据插入到合适的位置然后,将第4个数据插入已排好的前3个数据中不断重复上述过程,直到把最后一个数据插入合适的位置,完成排序。简...原创 2018-05-06 16:51:35 · 447 阅读 · 0 评论 -
golang ----------- 冒泡排序及其优化
1、普通方法:func BubbleSort(a []int){ for j := 0 ;j<len(a)-1; j++ { for i := 0; i<len(a)-j-1; i++ { if a[i] > a[i+1] { a[i],a[i+1] = a[i+1],a[i] } } } fmt.Println(a)}2、优化1:里...原创 2018-05-06 14:05:36 · 556 阅读 · 0 评论 -
golang ----------- 二叉树的建立
1、由标明空子树的先跟遍历序列建立一颗二叉树的操作算法var i = -1func HaveEmptyCreate(arr []int) *TreeNode{ i=i+1 if i >= len(arr){ return nil } var t TreeNode if arr[i] != 0 { t = TreeNode{nil,arr[i],nil} t.Left ...原创 2018-05-09 21:09:14 · 3214 阅读 · 0 评论 -
golang ----------- 复制二叉树
二叉树的复制:package mainimport "fmt"type TreeNode struct { Left *TreeNode Value int Right *TreeNode}//建立二叉树func TreeCreate(i int,arr []int) *TreeNode{ t := &TreeNode{nil,arr[i],nil} if i&l...原创 2018-05-09 18:56:16 · 381 阅读 · 0 评论 -
红黑树 插入 删除 代码实现 思想 与2-3-4树的联系 golang实现
介绍红黑树之前,要先了解其他几种树(二叉树,二叉排序树,平衡二叉树),红黑树就是在其他树的变形(特别是平衡二叉树,要先明白平衡二叉树,读者要先去了解一下)。一、红黑树介绍:1、性质:性质1、每个节点是红色或黑色性质2、根节点是黑色性质3、每个叶子结点(NIL)是黑色【这里的叶子结点,是指为空(NIL或NULL)的叶子结点!】性质4、如果一个节点是红色的,则它的子结点必须是黑色的性质5、从一个节点到...原创 2018-05-24 10:59:25 · 933 阅读 · 0 评论