数据结构与算法
初学数据结构与算法
codewen77
心之所向
展开
-
枚举解决称硬币问题
问题描述: 有12枚硬币。其中有11枚真币和1枚假币。假币和真 币重量不同,但不知道假币比真币轻还是重。现在, 用一架天平称了这些币三次,告诉你称的结果,请你 找出假币并且确定假币是轻是重 (数据保证一定能找 出来)。 输入: 每组数据有三行,每行表示一次称量的结果。银币标号 为A-L。每次称量的结果用三个以空格隔开的字符串表示: 天平左边放置的硬币 天平右边放置的硬币 平衡状态。其 中平衡状态用...原创 2020-02-18 11:52:45 · 482 阅读 · 0 评论 -
赫夫曼编码和解码
赫夫曼编码基本介绍: 赫夫曼编码的基本过程: 先将要进行编码的字符串(“Keep doing it and then you will succeed”)转为字节数组,然后通过字节数组创建出所有的节点,并将节点放入List集合中 //每个节点的属性 private Byte content;//节点的内容(一个字节) private int value;//节点的权值 priva...原创 2020-02-05 11:50:52 · 448 阅读 · 0 评论 -
排序算法之选择排序
原理: 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。 举例: 数组array有5个元素{3, 9, -1, 10, -2},从小到大排序 原理分析:本质就是5个元素中找四个最小的往前放,这样最后一个数一定是最大的且位置确定的 第一次循环: 假定...原创 2020-01-28 21:55:59 · 855 阅读 · 0 评论 -
排序算法之冒泡排序
原理: 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 举例: 数组array有5个元素{3, 44, 38, 5, 47},从小到大排序 按照原理比较相邻两个数的顺序是否错误 第一次大循环: 3与44顺序正确,此时数组为{3, 44, 38, 5, 47} 44与38顺序错误,...原创 2020-01-27 16:12:41 · 887 阅读 · 0 评论 -
递归回溯解决八皇后问题
问题引入: 解决思路: 创建一个大小为8的数组queens,数组的索引 i (0-7对应1-8行),数组的值queens[i] (表示第i+1行皇后放置的列为queens[i]+1),先放置第一个皇后在第一行,然后利用递归放置下一个皇后到下一行,知道8个皇后放置完毕,只就是一种解法,然后回溯,看第8行是否有其它解法,如果没有就继续回溯到第七行,有的话就用递归找到下一行皇后放置的位置,没有就继续回...原创 2020-01-21 19:12:26 · 367 阅读 · 0 评论 -
环形单链表解决约瑟夫问题
环形单向链表解决约瑟夫问题: 首先要创建一个N个小孩的环形单向链表: 1.创建一个first指针,置为空,再创建一个辅助指针curBoy 2.用for循环创建小孩节点,如果是第一个节点(first指向第一个小孩,并且第一个小孩的next域指向自己,再让辅助指针curBoy指向第一个小孩) 3.用for循环创建小孩节点,如果是第一个节点后的节点(首先让curBoy的next...原创 2020-01-21 14:33:54 · 357 阅读 · 0 评论 -
逆波兰表达式(后缀表达式)实现简单计算器
利用后缀表达式(波兰表达式)计算出结果,只做了整数 大概步骤是: 1.将中缀表达式 (如:(30+4)*5-6)中的数、运算符、括号放入List集合(方便遍历) 2.将集合中的中缀表达式转为后缀表达式 3.通过后缀表达式计算 中缀表达式转为后缀表达式的具体步骤: 1.从左往右扫描中缀表达式 2.扫描到的是数字,直接放入s2中 3.扫描到的是运算符 * a.如果s1栈是空的或栈顶是左括号,直接放...原创 2020-01-20 21:47:37 · 447 阅读 · 0 评论