提高篇-数据结构与算法
文章平均质量分 85
小豆角
一个喜欢刨根问底的程序媛
展开
-
golang构造N叉树
package mainimport ( "fmt" "strconv" "sync")type Spaninfo struct { AppNames []string `json:"appNames"` ContainErr bool `json:"containErr"` Attrs map[string]interface{} `json:"attrs"` Cspa.原创 2021-12-01 19:14:51 · 1278 阅读 · 0 评论 -
数据结构之栈的顺序存储结构https://www.jianshu.com/p/5b8e17232df2
栈的定义栈是一种特殊的线性表,因为它相对于一般线性表,对它的操作有限制,栈只允许在栈顶(线性表的固定一端)进行插入、删除和读取元素,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈的示意图top为表示栈顶的指针,当栈空是...转载 2019-06-15 13:27:52 · 520 阅读 · 0 评论 -
数据结构之复杂度分析-1
数据结构是内存的范畴,所谓算法,也是指的是,如何高效使用内存。数据结构的基础是数组,通过使用程序,改变了数据之间的连接方式,构造成了不同的数据结构。数组把循环计数器的值与数组索引对应起来了。时间或者空间复杂度:我们运行一个程序,比较关注程序的执行时间和内存占用。大 O 复杂度表示法n表示数据规模的大小T(n):代码的执行时间时间复杂度分析法则:...原创 2019-06-10 21:05:00 · 176 阅读 · 0 评论 -
二叉树的基本概念以及常用操作
1.二叉树:根 root :结点:Node :度Degree:结点的儿子个数,比如二叉树的度<=2叶子-leaf :度为0的结点层次level:比如根节点层次为1深度depth:结点的最大层次森林forest: m(>0)棵不会相交的树的集合2.二叉树的基本性质:第level层的节点数最多为:2^(level-1)其中level>=1深度为...原创 2019-06-25 20:56:23 · 219 阅读 · 0 评论 -
数据结构与算法复杂度之数学基础
有这几种复杂度:1.常量级:O(1)2.对数级:O(logn) ---等比数列3.线性阶:O(n) 或者两个数据规模的O(n)+O(m)4.线性对数阶:O(nlogn)5.平方阶:O(n^2) O(n^3)... k次阶O(n^k)6.指数阶:O(2^n)7.阶乘阶:O(n!)---------------------------------1....原创 2019-06-22 16:30:57 · 362 阅读 · 0 评论 -
递归-3种应用在go中
递归应用场景:1.数据定义是递归的-斐波那契数列,2.数据规模大-小解决方式一样-数组或者链表,常需要返回值,3.数据结构是递归的-二叉树;递归是一种特殊函数,了解递归之前先了解透函数--参数-函数的头&返回值-函数的尾&函数内变量的作用域,作用域一般都在本栈中-但go有内存逃逸分析。使用递归,要么是问题的解决是递归的,要么是数据的结构是递归的。操作相同,需要考虑栈与栈之间...原创 2019-06-24 19:41:39 · 195 阅读 · 0 评论 -
go语言版本-二叉树-创建二叉树+遍历二叉树+求取二叉树深度+反转二叉树+拷贝二叉树
type treeNode struct { id int left *treeNode right *treeNode}//第i层最多有m=2^(i-1) 个元素 每一层铺满这个数目再换层//共n层可以有的元素个数总和是 2^n-1 func newTree(ints ...int) *treeNode { num := len(ints) if num &l...原创 2019-07-20 17:25:46 · 240 阅读 · 0 评论 -
go语言算法版--冒泡排序和二分查找-吃透二分查找
//二分查找 返回找到num的index 时间复杂度是logn// 循环次数 1 2 3 。。。 x// n数 n/2 n/4 n/8 ... n/(2^x)//也就是当n个数为1,需要经历的查找次数与n的关系是 n/(2^x) = 1 -->x=lognfunc binarySearch(ints []int, num int) int { l...原创 2019-07-21 16:19:48 · 122 阅读 · 0 评论 -
[算法总结] 二分查找
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找。二分查找很好写,却很难写对,据统计只有10%的程序员可以写出没有bug的的二分查找代码。出错原因主要集中在判定条件和边界值的选择上,很容易就会导致越界或者死循环的情况。下面对二分查找及其变形进行总结:1. 最基本的二分查找public int ...转载 2019-07-21 16:46:38 · 167 阅读 · 0 评论 -
数据结构之有序线性表的链式存储结构 https://www.jianshu.com/p/89d879f74add
之前写了线性表的顺序存储结构和有序线性表的顺序存储结构以及线性表的链式存储结构,今天接着写有序线性表的链式存储结数据结构之线性表的顺序存储结构数据结构之有序线性表的顺序存储结构数据结构之线性表的链式存储结构有序线性表是在之前的基础上构建的,相对于之前的线性表的操作,有序线性表增加了如下操作:void insert(Object obj);//向有序线性表中插入元素 ,插入后仍为...转载 2019-06-15 13:26:24 · 675 阅读 · 0 评论 -
数据结构之线性表的链式存储结构 https://www.jianshu.com/p/00140434660f
之前写了线性表的顺序存储结构和有序线性表的顺序存储结构,今天接着写线性表的链式存储结构数据结构之线性表的顺序存储结构数据结构之有序线性表的顺序存储结构实现的接口还是之前定义的接口线性表操作接口链接节点类链接节点类链接线性表初始化初始化单链表插入方法add插入方法代码修改方法modify修改方法代码删除方法remove删...转载 2019-06-15 13:25:37 · 363 阅读 · 0 评论 -
go实现树结构
//tree结构type treenode struct { value int left, right *treenode}func (node *treenode) print() { if node == nil { fmt.Println("nil=node") } else { fmt.Println(node.value) }}func (...原创 2019-04-25 21:03:08 · 2440 阅读 · 0 评论 -
递归算法以及递归VS循环
循环 VS 递归: 用循环能实现的,递归都能实现 循环省空间 递归能实现的,循环不一定能 递归浪费栈空间 递归的本质,循环调用自己,我也可以说递归就是函数的循环循环 for关键字 边界(初始条件 +结束条件) 循环体 循环变量(:每个循环的不同部分)递归 递归方法名 边界(起始条件+结束条件) 递归体 递归变量(:每个...原创 2019-04-23 14:06:15 · 983 阅读 · 0 评论 -
数据结构与算法基础
数据结构分为数据的逻辑结构和物理结构,通常我们说的是逻辑结构。同一种逻辑结构有不同的物理实现原创 2019-04-07 10:32:08 · 551 阅读 · 0 评论 -
go-位图
type BitMap struct { bytes []byte nbits int}func(bm *BitMap)set(k int){ if k>bm.nbits { return } byteIndex := k/8//8 是因为go中byte占1个字节即8个位 bitIndex := uint(k%8)...原创 2019-06-15 13:08:48 · 311 阅读 · 0 评论 -
数据结构的由来https://www.jianshu.com/p/7db18d3d5d05
美国心理学家提出了一个六度分离理论。指的是 ‘’你和任何一个陌生人之间所间隔的人不会超过五个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”根据这个理论,你和世界上的任何一个人之间只隔着五个人,不管对方在哪个国家,属哪类人种,是哪种肤色。图片发自简书App由此可见,我们生活在一个如蜘蛛网般错综复杂的世界,我们每个人并不是单独的个体,而是和其他人有联系的。在当今这个大数据时...转载 2019-06-15 13:14:46 · 993 阅读 · 0 评论 -
数据结构之集合的顺序存储结构https://www.jianshu.com/p/f8a7d52787eb
集合的定义昨天我们聊了 数据结构的由来与分类 ,根据数据之间关系的不同,我们把数据结构分为了四类逻辑结构,其中第一类就是集合结构。今天我们就来详细的讲一下集合结构。集合是数据逻辑结构中的一种,它是由一个或者多个没有任何关系的数据元素聚集而成,集合中各个数据元素之间不存在任何逻辑依赖关系。跟数学中的集合一样,集合中不会有相同的数据元素。下图可是个集合示意图(各个美女都处在同一个篮子里,但...转载 2019-06-15 13:17:13 · 1376 阅读 · 0 评论 -
数据结构之集合的链式存储结构https://www.jianshu.com/p/5a6e4640b3a5
前面讲了 ‘’谈谈数据结构之集合的顺序存储‘’,今天接着讲集合的链式存储,链式存储不像顺序存储要求存储的地址空间是连续的,链式存储的地址空间是任意的。但是所有任意的地址空间必须可以串联起来,不能中断,只要某一个地址没有被串联,那么,它后面的数据也就丢失了。链式存储的示意图如下:链式存储结构图其中每个节点的地址是任意的,每个节点包含两部分:数据部分和指向下一节点地址的指针(由于集合之间元...转载 2019-06-15 13:21:33 · 666 阅读 · 0 评论 -
数据结构之线性表的顺序存储结构https://www.jianshu.com/p/9bb102eb7f3f
之前讲了集合的顺序存储结构和链式存储结构,今天接着聊下一个基本的数据结构--线性表,线性表是线性数据结构的一种表现形式数据结构之集合的顺序存储结构数据结构之集合的链式存储结构线性表的定义线性表是同一类型数据的一个有限序列,线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的顺序存储要求地址空间是连续的,地址必须一个接...转载 2019-06-15 13:22:36 · 446 阅读 · 0 评论 -
数据结构之有序线性表的顺序存储结构 https://www.jianshu.com/p/9be27627740f
有序线性表定义指线性表中的元素按值或者关键字的大小先后有序(升序或者降序)。之前讲了线性表的顺序存储结构 数据结构之线性表的顺序存储结构有序线性表是在之前的基础上构建的,相对于之前的线性表的操作,有序线性表增加了如下操作:void insert(Object obj);//向有序线性表中插入元素 ,插入后仍为有序Object Delete(Object obj);//按值删除...转载 2019-06-15 13:23:30 · 687 阅读 · 0 评论 -
go的channel实现归并排序
func main() { ch1 := create([]int{1, 3, 6})//待排序的管道1 ch2 := create([]int{2, 5, 9})//待排序的管道2 ch := merge(ch1, ch2) for c := range ch { fmt.Println(c) } for { runtime.GC() }}func create(a...原创 2019-04-26 14:04:47 · 813 阅读 · 2 评论