
恋上数据结构
文章平均质量分 62
恋上数据结构笔记
结构化思维wz
敬他人,即是敬自己;靠自己,胜于靠他人。
展开
-
【恋上数据结构】回溯 | N皇后问题
N皇后问题 8皇后问题 ❓ 在 8*8 的棋盘上,摆放八个皇后,使其不能互相攻击:任意两个皇后不能处于同一行、列、对角线上。 问有多少种摆法? 回溯解法 首先,缩小问题范围(4皇后问题),理解回溯的思想: 剪枝: 根据限制条件,发现同一行同一列、对角线不能摆放皇后,可以进行剪枝操作。 package 回溯; /** * @ClassName: Quen * @Description: 八皇后问题 * @author: WangZe * @date: 2022/3/14 14:40 */原创 2022-03-14 16:07:35 · 544 阅读 · 0 评论 -
【恋上数据结构】队列 Queue
GItee持续更新 文章目录六、队列(Queue)1.接口设计2.练习-用栈来实现队列3.双端队列(Deque)4.循环队列(Circle Queue) 六、队列(Queue) 队列是一种特殊的线性表,只能在头尾两端进行操作。 先进先出 1.接口设计 队列中的方法总结: 优先使用双向链表,因为动态数组在头操作复杂度较高。 package 栈和队列; import java.util.LinkedList; /** * @ClassName: Queue * @Description: 队列原创 2021-12-30 13:59:11 · 514 阅读 · 1 评论 -
【恋上数据结构】栈 Stack
GItee同步更新 五、Stack 栈 文章目录五、Stack 栈1.栈接口的设计2.手写Stack3.应用实例 栈是一种特殊的线性表,只能在一端进行操作。 往栈中添加元素的操作,一般叫做push入栈 从栈中移除元素的操作,一般叫做pop出栈(只能移除栈顶元素,也叫弹出栈顶元素) 先进后出的原则 1.栈接口的设计 栈中最频繁的操作就是在尾部做一些操作,所以用动态数组和双向链表的复杂度差不多O(1)。 2.手写Stack package 栈和队列; import java.util.Array原创 2021-12-29 15:05:28 · 775 阅读 · 0 评论 -
【恋上数据结构】约瑟夫问题(循环链表解决)
练习-约瑟夫问题 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。 分析: (1)由于对于每个人只有死和活两种状态,因此可以用布尔型数组标记每个人的状态,可用true表示死,false表示活。 (2)开始时每个人都是活的,所以数组初值全部赋为false。 (3)模拟杀人过程,直到所有人都被杀死为止。 为了活到最后,我们只能写个算法来帮我们算了!! 思路: 使用循环链表 用一个指针,用于指向原创 2021-12-29 11:24:42 · 565 阅读 · 0 评论 -
【恋上数据结构】 双向链表(JDK-LinkedList底层)
恋上数据结构——双向链表的实现,gitee同步更新。原创 2021-12-29 09:44:01 · 795 阅读 · 0 评论 -
【恋上数据结构】 链表(手写LinkedList+练习)
用Java写一个LinkedList,LeetCode链表相关练习题。原创 2021-12-27 15:27:58 · 896 阅读 · 0 评论 -
【恋上数据结构】手写ArrayList + Java动态扩容分析
Gitee同步更新代码和笔记: 文章目录一、ArrayList动态扩容分析泛型分析手写ArrayListJDK源码分析 一、ArrayList 动态扩容分析 在Java中,由于数组的大小是固定的,所以扩容会申请一个更大的数组,然后把引用指向新的数组。 代码实现: /** * 保证要有capacity的容量(elements数组的长度) * @param capacity */ private void ensureCapacity(int capac原创 2021-12-26 15:06:25 · 635 阅读 · 1 评论