![](https://img-blog.csdnimg.cn/direct/fbd2e3487fb54fbbaed1bbe7c5db5a53.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法
数据结构和算法知识整理,基于java实现
0cfjg0
唤起一天明月,照我满怀冰雪
展开
-
数据结构4.3:完整逆波兰计算器
基本思路即为创建两个栈一个先存数字,一个先存符号如果需要运算数字栈中的数字了,就压入一个符号到此栈终于结束了,泪目TAT,后面肯定还会更难。原创 2024-03-13 11:52:58 · 456 阅读 · 0 评论 -
算法2.7:排序算法之间的比较
1,平均时间复杂度2,最好情况3,最坏情况4,空间复杂度5,排序方式6,稳定性。原创 2024-03-31 21:57:57 · 367 阅读 · 0 评论 -
算法2.1排序概述和时间复杂度
将一组数据,按照指定的顺序排列的过程。原创 2024-03-15 16:29:55 · 216 阅读 · 1 评论 -
算法2.6基数排序
并不复杂的思路,典型的空间换时间算法。原创 2024-03-30 21:37:42 · 268 阅读 · 0 评论 -
算法2.5:归并算法
归并排序是建立在归并操作上的一种有效排序算法,采用分治法将序列每次二分成两个子序列,直到子序列足够小,再使他们有序,最后合成一个有序的序列.原创 2024-03-25 21:51:20 · 215 阅读 · 0 评论 -
算法2.3插入排序和希尔排序
将n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,每次从无序表中取出一个元素放入有序表中,使其成为新的有序表。思路简单,实现起来如果只依赖于数组略显抽象,所以这里直接用集合实现了,简单又可读性强.一开始分为gap=length/2组,分别对这些组进行插入排序,当排序完成后。再对gap=gap/2组进行排序直到最后gap=1,即排序完成。缺点:当插入的数为较小数时,计算次数较多,效率较低.时间复杂度:nlog(n),随增量变化的幅度改变。原创 2024-03-19 16:23:17 · 245 阅读 · 0 评论 -
算法1.2八皇后问题
如果n==8,则直接返回,即当数组内8个元素全部排列正确时,直接打印答案并退回上一个check内。空两行以示尊重,这题目如果不看答案靠自己想还是比较困难的,至少比小球走迷宫难多了。直到退回第一行,至此,当第一行的皇后放在第一个位置时所有答案均得到。循环继续,第一行皇后来到第二个位置,重复上述过程。将八个皇后放在8*8棋盘上,各皇后之间不能互吃。回溯到上一行,移动一格,再次对最后一行进行判断。看懂不难,复现有点困难,常看常新,愿你我互勉。直到所有位置都正确,即找到了第一个正确解。遍历打印,没什么好说的。原创 2024-03-14 20:33:46 · 387 阅读 · 1 评论 -
算法1.1:递归和小球迷宫问题
在方法内调用自身eg: sout(n)原创 2024-03-13 21:51:53 · 484 阅读 · 0 评论 -
算法2.4:快速排序
第二步,从右指针开始向左遍历直到找到比中轴值小的数,赋值给左指针,再交替遍历左指针找到比中轴值大的数赋值给右指针,直到左右指针相遇。此时就是中轴值所应处的位置,将最开始的中轴值22赋值给左指针得到第一次排序结果,此时22左侧都比22小,而22右侧都比22大。第一步,找到中轴值,这里设为left指向的元素22,节省一次交换。这里将右指针的2赋值给左指针的2如果不移动左指针会导致死循环。所以赋值后移动左指针,指针也是同理,交换后需要移动右指针。右指针开始遍历直到找到2停下,并赋值给左指针此时为。原创 2024-03-22 16:07:55 · 400 阅读 · 0 评论 -
算法2.2冒泡排序和选择排序
如果在某一趟排序中,一次都没有交换,则说明已经按序排列,可以直接退出循环.在对100000个数据进行排序时约耗费7秒钟。原创 2024-03-17 21:48:06 · 122 阅读 · 1 评论 -
数据结构2.1:单链表
链式存储,数据地址不一定按顺序存储数据按照data域+next域存储,next域存储下一个节点的地址链式存储:以节点方式存储。原创 2024-03-05 21:50:54 · 195 阅读 · 0 评论 -
数据结构3:队列
需要两个指针front和rear指向队列的头部和尾部来控制队列的进和出。原创 2024-03-06 15:08:27 · 254 阅读 · 0 评论 -
数据结构4.2:栈实现计算器
完整流程如下以3*2+3为例3入栈,2入栈,*入栈(符号栈为空)遍历到’+‘,’+‘优先级低于’*’所以弹出3和2,弹出* ,计算3*2,将运算结果6入栈最后弹出6和3计算6+3得出结果9基本属性入数字栈topn++;System.out.printf("数字入栈%.2f\n", number[topn]);入符号栈topc++;System.out.printf("符号入栈%c\n", cal[topc]);出数字栈。原创 2024-03-10 08:34:09 · 280 阅读 · 1 评论 -
数据结构2.2:反转单链表
重复以上过程直到curr移出链表,此时head指向的3节点就是新的起始结点,如果有头结点将原来的head节点指向3节点即可.注意node=curr这一步骤需要放在curr=curr.next后执行,不然会导致node变为空指针报错。node指针用来反转节点指向的方向(node.next=prev)至此完成一个循环,形成左边指向prev的新链表,和右边的旧链表.一个指针prev指向curr前面的节点。一个指针curr指向当前遍历到的节点。原创 2024-03-05 21:57:44 · 182 阅读 · 0 评论 -
数据结构4.1:栈
限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈顶(Bottom)出栈操作,int value = stack[top];当有数据加入栈时,top++,stack[top] = data;入栈(链表可变长没必要判断满的,但是我懒得改了)最先放入栈中元素在栈底,最后放入的元素在栈顶.定义一个top来表示栈顶,初始化为-1。遍历,注意因为是栈所以是从后往前遍历。原创 2024-03-08 11:43:06 · 200 阅读 · 1 评论 -
数据结构2.5:环形链表和约瑟夫问题
编号1到n的n个人围坐一圈,编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,直到所有人出列为止,由此产生一个出队编号的序列.原创 2024-03-07 16:59:03 · 307 阅读 · 1 评论 -
数据结构2.3单链表的反向打印
虽然通过单链表反转的方式可以实现,但会破坏链表的原本结构所以选择使用栈的先入后出特性实现逆序打印。原创 2024-03-06 21:45:00 · 160 阅读 · 0 评论 -
数据结构1:稀疏数组
/增加可阅读性,统一数组index和行列数。第一行为原数组的行列以及不为零元素个数,后面每行为不为零元素的横纵坐标以及值。适用于大部分元素为0的二维数组,例如五子棋棋盘。这里图方便随便定义了一个只有两个元素的二维数组。原创 2024-03-05 21:31:15 · 241 阅读 · 0 评论 -
数据结构2.4:双向链表
可以向前或者向后查找可以自我删除。原创 2024-03-06 21:46:32 · 147 阅读 · 0 评论 -
数据结构6.3:二叉树的查找和删除
因为二叉树的单向特性,所以应该对父节点判断其子节点是否需要删除,而非判断本身是否需要被删除.如果传入的是一个空树,可以在树中对root节点进行判断,如果为空直接返回即可。如果不等,先判断左子节点是否为空,不为空就对左子节点递归前序查找。判断当前节点的左子节点是否为空,不为空就对左子节点递归后序查找。先判断左子节点是否为空,不为空就对左子节点递归中序查找。再判断右子节点是否为空,对右子节点递归前序查找。再判断右子节点是否为空,对右子节点递归中序查找。再判断右子节点是否为空,对右子节点递归后序查找。原创 2024-04-13 16:07:14 · 303 阅读 · 0 评论 -
数据结构6.2:二叉树的前中后序遍历
先输出父节点,再遍历左子树和右子树。原创 2024-04-07 16:27:15 · 349 阅读 · 1 评论 -
数据结构5:哈希表
根据关键码值(key value)而直接进行访问的数据结构,也就是说,通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表.在java程序和数据库之间需要一层缓存层,可以使用哈希表来作为这个缓存层,提高效率.,也可以使用数组+链表或者数组+二叉树.如果一级缓存层不够,可以使用多层缓存。原创 2024-04-07 10:46:58 · 349 阅读 · 0 评论 -
算法3:查找算法
1,顺序(线性)查找2,二分查找/折半查找3,插值查找4,斐波那契查找。原创 2024-04-01 15:58:04 · 434 阅读 · 0 评论 -
数据结构6.1:树的基本概念
优点:通过索引访问元素,速度块,对于有序数组还可以用二分查找提高检索速度缺点:如果要检索具体的某个值,或者需要增删(需要创建新数组)会比较麻烦。原创 2024-04-07 14:46:33 · 384 阅读 · 0 评论