随笔分类 - 数据结构
摘要:递归 1、递归的概念 简单说,递归就是函数/方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 2、简单案例 2.1、分析下面代码的输出 func test(n int){ if n > 2{ n-- test(n) } fmt.println(n)
阅读全文
摘要:栈 栈是一个先入后出的有序列表,栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端,为变化的一端,称为栈顶,另一端为固定的一端,称为栈底。 最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。
阅读全文
摘要:排序 冒泡排序 func BubbleSort(s []int)[]int{ for i := 0; i < len(s); i ++ { for j := i + 1; j < len(s); j ++{ if s[i] > s[j]{ s[i],s[j] = s[j],s[i] } } } re
阅读全文
摘要:链表 单向链表 定义一个HeroNode // 定义一个HeroNode type HeroNode1 struct{ no int name string nickname string next *HeroNode } 给链表添加一个节点 方式一:直接在链表最后加入 func InsertHer
阅读全文
摘要:队列 队列介绍 队列是一个有序列表,可以用数组或是链表来实现。 遵循先入先出的原则,即先存入队列的数据,要先取出,后存入的要后取出。 数组模拟队列 队列本身是有序列表,因为队列的输出,输入是分别从前后端来处理的,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着数据输出而
阅读全文
摘要:稀疏数组 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法: 记录数组一共有几行几列,有多少个不同的数值; 把具有不同值的元素的行数列数及值记录在一个小规模的数组中,从而缩小程序规模。 实际问题 如下面的二维数组,我们可以假设成是一个棋
阅读全文
摘要:队列Queue:什么是队列? 对列是一种有次序的数据集合,其特征是新数据项的添加总发生在一端(通常称为“尾rear”端),而现存数据项的移除总发生在另一端(通常称为“首front”端) 当数据项加入队列,首先出现在队尾,随着队首数据项的移除,它逐渐接近队首。新加入的数据项必须在数据集末尾等待,而等待
阅读全文
摘要:表达式转换 中缀表达式 我们通常看到的表达式像这样:A*B,很容易知道这是A乘以B,这种操作符介于操作数中间的表示法,称为“中缀”表示法。 但有时候,中缀表示法会引起混淆,如“A+B*C”,是A+B然后再乘以C呢?还是B乘以C再加A呢? 为了解决上面的问题,人们引入了操作符“优先级”的概念来消除混淆
阅读全文
摘要:线性结构之栈 在说栈的前提下,我们先来说说什么是线性结构,线性结构是一种有序数据项的集合,其中每个数据项都有唯一的前驱和后继,除了第一个没有前驱,最后一个没有后继,新的数据项加入到数据集中时,只会加入到原有某个数据项之前或者之后,具有这种性质的数据集,就成为线性结构。 线性结构总有两端,在不同的情况
阅读全文
摘要:算法分析 什么是算法分析 问题:如何对比两个程序?看起来写法不同,但解决同一个问题的程序,哪个“更好”? 程序和算法的区别 算法是对问题解决的分步描述 程序则是采用某种编程语言实现的算法,同一个算法通过不同的程序员采用不同的编程语言,能产生很多程序。 累计求和问题 我们来写一个累加求和的程序,就是从
阅读全文