数据结构&算法
数据结构&算法
XPiedPiperX
Coder Change The World
展开
-
走迷宫算法2(顺序栈 非最短路径)
迷宫用二维数组来表示迷宫:1)0表示可走的格子。2)1表示墙。初始化二维数组: mazeMap := [10][10]int{ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 1, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 1, 1, 0, 0, 1}, {1, 0, 1, 1, 1, 0, 0, 0, 0, 1}, {1, 0, 0,原创 2020-12-30 17:06:32 · 500 阅读 · 1 评论 -
走迷宫算法1(递归 非最短路径)
递归递归的概念简单的说,递归就是函数/方法自己调用自己。每次调用传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归需要遵守的重要原则1)执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)。2)函数的局部变量是独立的,不会相互影响。3)递归必须向退出递归的条件逼近,否则就是无限递归。4)当一个函数执行完毕,或者遇到 return ,就会返回,遵守谁调用,就将结果返回给谁。同时当函数执行完毕或者返回时,该函数本身也会被系统销毁。.原创 2020-12-29 15:37:55 · 592 阅读 · 1 评论 -
哈希表(Hash table)
Google 上机题有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id 性别 年龄 住址...)当输入该员工的 id 时,要求查找到该员工的所有信息。要求:不使用数据库,尽量节省内存,速度越快越好。哈希表这个问题可以用哈希表来解决。哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放.原创 2020-12-29 02:27:00 · 415 阅读 · 0 评论 -
用单向链表模拟队列
示意图入队列:让 rear 指针指向的节点的 Next 指针指向新节点,然后让 rear 指针指向下一个节点。出队列:每次出队列时,都让 font 指针指向 head 节点的下一个节点。然后让 head 指针的 Next 指向 front 指针指向的节点的下一个节点,如图所示:最后从队列中弹出 front 节点。完整代码(Golang)/* 数据结构 队列 链表 创建一个链表模拟队列 实现:数据入队列、数据出队列、显示队列*/package mai.原创 2020-12-28 16:51:39 · 193 阅读 · 0 评论 -
取号机排队取号服务算法(数据结构 队列(Queue))
取号机排队取号服务问题假设某天的取号机最多能取出15个号。一共有2个服务窗口。要求用代码模拟出:1)客户用取号机领取编号。2)模拟服务窗口的职员服务领取到号的客户。情景示意图Golang 代码/* 数据结构 队列 题目一: 1)创建一个数组模拟队列,每隔一定时间[随机],给数组添加一个数。 2)启动两个协程,每隔一定时间(时间随机)到队列取出数据 3)在控制台输出 x 号协程 服务 ---》x 号客户 x 号协程 服务 ---》x 号客户..原创 2020-12-27 18:10:33 · 2250 阅读 · 0 评论 -
Golang 实现单向环形链表
单向环形链表单向环形链表是一种特殊的单向链表。单向链表最后一个节点的 Next 指针指向空。而单向环形链表最后一个节点的 Next 指针指向头节点。如图所示:单向环形链表节点的构建假设把几只猫的信息(编号、名字)构成一个单向环形链表。Golang 代码:type CatNode struct { no int // 猫编号 name string // 猫的名字 next *CatNode // 指向下一只猫的指针}往单向环形链..原创 2020-12-26 17:53:15 · 318 阅读 · 3 评论 -
栈(Stack)的快速入门
Golang 代码:/* 数据结构 栈(Stack) 快速入门案例*/package mainimport ( "errors" "fmt")// 使用数组来模拟一个栈的使用type Stack struct { MaxTop int // 表示栈最大能存放的数据个数 Top int // 栈顶 arr [5]int // 模拟栈的数组}// 入栈func (this *Stack) Push(val int) (err error) {原创 2020-12-21 18:02:37 · 190 阅读 · 0 评论 -
约瑟夫问题(Josephus problem)详解
约瑟夫问题1)设编号为 1,2,3 ... n 的 n 个人围坐一圈。2)约定编号为 k (1 <= k <= n)的人从 1 开始报数,数到 m 的那个人出列。3)它的下一位又从 1 开始报数,数到 m 的那个人又出列,依此类推,直到所有人出列为止。4)由此产生一个出列编号的序列。解题思路1)构建一个结构体 Boy No 为 Boy 的编号。 Next 指针指向下一个 Boy。代码如下:// 小孩的结构体type Boy struct {...原创 2020-12-21 15:52:04 · 9335 阅读 · 0 评论 -
Golang 实现双向链表
Golang 代码:/* 数据结构 双向链表*/package mainimport "fmt"// 定义一个双向链表type DoubleNode struct { no int // 排名 name string // 名字 nickname string // 外号 pre *DoubleNode // 前一个节点 next *DoubleNode // 下一个节点}// 给双向链表加入一原创 2020-12-17 01:06:07 · 272 阅读 · 0 评论 -
Golang 操作单向链表的应用实例
代码:/* 使用带head头节点的单向链表实现-水浒传英雄排行榜管理: 1)完成对英雄人物的增删改查操作。 2)第一种方法:在添加英雄时,直接添加到链表的尾部 3)第二种方法:在添加英雄时,根据排名将英雄插入到指定位置 (如果没有这个排名,则添加失败,并给出提示)*/package mainimport "fmt"// 定义一个 HeroNodetype HeroNode struct { no int // 排名 name string原创 2020-12-16 16:17:51 · 181 阅读 · 0 评论 -
稀疏数组(压缩数组)
如何用代码来表示棋盘?棋盘(11 * 11)如图所示,一个 11 * 11 的围棋棋盘。三枚黑子的位置分别为 (1,2) (2,3) (3,2)一枚白子的位置为 (2,2)传统方式一般会联想到二维数组来表示棋盘,假设:黑棋的值为1。白棋的值为2。没有落子的值为0。用二维数组来表示棋盘和棋子的 Golang 代码:package mainimport "fmt"type Node struct { row int // 行 column in..原创 2020-12-08 15:27:44 · 900 阅读 · 0 评论