算法的定义从广泛上来说,可以说是完成一件事情的方法或步骤。在计算机的角度说,算法是一组有限的指令集组成的过程。
-- 有限的。算法有五个特性: 确定性,可行性,有穷性,and 输入,输出!必须指出的是,算法可以改变我们程序的运行时间,好的算法可以节省我们很多时间,使我们的程序运行起来更行云流水,得心应手。但是算法不是影响我们程序运行效果的唯一因为,受其他因为影响,比如机器质量,语言,编译程序,程序员的...
一:队列介绍之前的随笔有提过简单提过队列①:队列是一个有序的表可以通过数组和链表来表现;②:遵循先进先出原则二:非环形队列①:若使用数组结构存储队列数据,则队列数组的必须声明一个最大队列容量如maxSize,因为队列的输出输入是分别从前后端来处理,因此需要两个变量来记录队列前后端的下标,如front(head)记录前端,rear(tail)记录后端;②:示意图③:使用细节数据存入非环形数组队列时要有两个步骤③-1:将尾指针往后移...
字典我们翻阅书籍时,很多时候都要查找目录,然后定位到我们要的页数,比如我们查找某个英文单词时,会从英语字典里查看单词表目录,然后定位到词的那一页。计算机中,也有这种需求。一、字典字典是存储键值对的数据结构,把一个键和一个值映射起来,一一映射,键不能重复。在某些教程中,这种结构可能称为符号表,关联数组或映射。我们暂且称它为字典,较好理解。如:键=>值"cat"=>2
"dog"=>1
"hen"=>3我们拿出键cat的值,就是2了...
GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰版权声明:原创作品,谢绝转载!否则将追究法律责任。 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解,但是说起高级点的数据类型,可能我们还是不太清楚,那么今天就跟着我脚步一起学习一下这些高级数据类型数据吧。相信有部分人可能学习过Python,那么...
结构体和方法一、值,指针和引用我们现在有一段程序:package mainimport "fmt"func main() {// a,b 是一个值a := 5b := 6fmt.Println("a的值:", a)// 指针变量 c 存储的是变量 a 的内存地址c := &afmt.Println("a的内存地址:", c)// 指针变量不允许直接赋值,需要使用 * 获取引用//c = 4// 将指针变量 c 指向的内存里面的值设置为4*c = 4fmt.Println("a的值:", a)// 指针变量 c 现在存储的是变量 b 的内存地址c = &bfmt.Printl...
首先,向数据库插入一条bjson数据 首先是定义文档,然后使用admin用户名密码登录,进入test数据库,向test数据库中插入此文档(“表名称和表中的记录”)插入结果,查看mongoVUE如下图所示 从上图可以看出系统自带的三个数据库,local,admin,test,在加入一条记录的时候,会自动生成_id的自动标识。 我们再添加图片,可以使用mongoVUE添加,如下图所示。 Collections:在mongodb中叫做集合,是文档的集合。无模式,可...
这章主要描述如何定义变量、常量、go内置类型及go程序设计中的一些技巧
定义变量go中定义变量的方式很多:使用var关键字是最基本的定义变量的方式,与C语言有些不同,如下:var variable_name type定义多个变量var name1,name2,name3 type定义变量同时初始化var name1 string = "liming"同时初始化多个变量var name1,name2,name3 string = "a", "c", "d"直接忽略类型同时初始化var name1,name2,name3 = "a", "c", "d"最简化的,只适...
本文内容是本人对Go语言的变量、常量、数组、切片、映射、结构体的备忘录,记录了关键的相关知识点,以供翻查。文中如有错误的地方请大家指出,以免误导!转摘本文也请注明出处,多谢! 参考书籍《Go语言圣经》、《Go语言实战》、《Go语言学习笔记》等一、变量 变量是一段或多段用来存储数据的内存;变量总是有固定的数据类型,类型决定了所占内存的长度和存储格式;编译后的代码使用变量的内存地址来访问数据,而不是变量名;简短...
使用标准库一、避免重复造轮子官方提供了很多库给我们用,是封装好的轮子,比如包fmt,我们多次使用它来打印数据。我们可以查看到其里面的实现:package fmtfunc Println(a ...interface{}) (n int, err error) {return Fprintln(os.Stdout, a...)
}func Printf(format string, a ...interface{}) (n int, err error) {return Fprintf(os.Stdout, format, a...)
}func Fprintf(w io.Writer, format string, a ...interface{}) (n i...
二叉查找树
二叉查找树,又叫二叉排序树,二叉搜索树,是一种有特定规则的二叉树,定义如下:它是一颗二叉树,或者是空树。
左子树所有节点的值都小于它的根节点,右子树所有节点的值都大于它的根节点。
左右子树也是一颗二叉查找树。二叉查找树的特点是,一直往左儿子往下找左儿子,可以找到最小的元素,一直往右儿子找右儿子,可以找到最大的元素。
看起来,我们可以用它来实现元素排序,可是我们却使用了二叉堆来实现了堆排序,...
插入排序
插入排序,一般我们指的是简单插入排序,也可以叫直接插入排序。就是说,每次把一个数插到已经排好序的数列里面形成新的排好序的数列,以此反复。
插入排序属于插入类排序算法。
除了我以外,有些人打扑克时习惯从第二张牌开始,和第一张牌比较,第二张牌如果比第一张牌小那么插入到第一张牌前面,这样前两张牌都排好序了,接着从第三张牌开始,将它插入到已排好序的前两张牌里,形成三张排好序的牌,后面第四张牌继续插入...
希尔排序
1959 年一个叫Donald L. Shell (March 1, 1924 – November 2, 2015)的美国人在Communications of the ACM 国际计算机学会月刊发布了一个排序算法,从此名为希尔排序的算法诞生了。
注:ACM = Association for Computing Machinery,国际计算机学会,世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。
希尔排序是直接插入排序的改进版本。因为直接插入排序对那些几乎已经排好序的数...
排序算法
人类的发展中,我们学会了计数,比如知道小明今天打猎的兔子的数量是多少。另外一方面,我们也需要判断,今天哪个人打猎打得多,我们需要比较。
所以,排序这个很自然的需求就出来了。比如小明打了5只兔子,小王打了8只,还有部落其他一百多个人也打了。我们要论功行赏,谁打得多,谁就奖赏大一点。
如何排序呢,怎么在最快的时间内,找到打兔子最多的人呢,这是一个很朴素的问题。
经过很多年的研究,出现了很多的排序算...
选择排序
选择排序,一般我们指的是简单选择排序,也可以叫直接选择排序,它不像冒泡排序一样相邻地交换元素,而是通过选择最小的元素,每轮迭代只需交换一次。虽然交换次数比冒泡少很多,但效率和冒泡排序一样的糟糕。
选择排序属于选择类排序算法。
我打扑克牌的时候,会习惯性地从左到右扫描,然后将最小的牌放在最左边,然后从第二张牌开始继续从左到右扫描第二小的牌,放在最小的牌右边,以此反复。选择排序和我玩扑克时的排序...
栈和队列
一、栈 Stack 和队列 Queue
我们日常生活中,都需要将物品排列,或者安排事情的先后顺序。更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完队就离开了,有些人晚一点,才刚刚进去人群排队。
数据是有顺序的,从数据1到数据2,再到数据3,和日常生活一样,我们需要放数据,也需要排列数据。
在计算机的世界里,会经常听见两种结构,栈(stack)和队列 (queue)。它们是一种收...