目录
1.Java多线程:写一下两个线程交替打印 0~100 的奇偶数
2.线程安全的单例模式
3.用两个栈实现队列
4.实现单链表反转操作
5.Java实现二分查找
6.冒泡排序
7.快速排序
快速排序的基本思想:
8.Java单链表实现快速排序
9.二叉树的前序遍历
10.二叉树的中序遍历
11.二叉树的后序遍历
12.java实现逆波兰表达式
13.斐波那契数列及青蛙跳台阶问题
1.Java多线程:写一下两个线程交替打印 0~100 的奇偶数
这种实现方式的原理就是线程1打印之后唤醒其他线程,然后让出锁,自己进入休眠状态。因为进入了休眠状态就不会与其他线程抢锁,此时只有线程2在获取锁,所以线程2必然会拿到锁。线程2以同样的逻辑执行,唤醒线程1并让出自己持有的锁,自己进入休眠状态。这样来来回回,持续执行直到任务完成。就达到了两个线程交替获取锁的效果了。
2.线程安全的单例模式
双锁判断机制创建单例模式
3.用两个栈实现队列
解题思路
两个栈stack1和stack2 。
开始时,每次添加队尾元素到stack1中。
如果需要弹出队头元素,则将stack1中的元素弹出并push到stack2中,再将stack2的栈顶元素弹出,即为弹出了队头元素。
如果stack2中是非空的,再在队尾中添加元素的时候仍然加到stack1中,从stack2中弹出队头元素。
只有当stack2为空的时候,弹出队头元素才需要将stack1中的元素转移到stack2中。
4.实现单链表反转操作
单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据。二是指针域,用于存储下一个节点的地址。在Java中定义如下:
5.Java实现二分查找
二分查找又称折半查找,查找效率不错
适用场景:顺序存储结构且按有序排列,这也是它的缺点。
6.冒泡排序
N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数,即
用时间复杂度来说:
1.如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。
2.如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
冒泡排序的最坏时间复杂度为:O(n2) 。
综上所述:冒泡排序总的平均时间复杂度为:O(n2) 。
7.快速排序
快速排序的基本思想:
8.Java单链表实现快速排序
单链表的实现为:
(1)使第一个节点为中心点
(2)创建2个指针(p,q),p指向头结点,q指向p的下一个节点
(3)q开始遍历,如果发现q的值比中心点的值小,则此时p=p->next,并且执行当前p的值和q的值交换,q遍历到链表尾即可
(4)把头结点的值和p的值执行交换。此时p节点为中心点,并且完成1轮快排
(5)使用递归的方法即可完成排序
9.二叉树的前序遍历
前序遍历(DLR,lchild,data,rchild),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。
10.二叉树的中序遍历
中序遍历(LDR)是 二叉树遍历 java基础算法大全的一种,也叫做 中根遍历、中序周游。在二叉树中,先左后根再右。巧记:左根右。
11.二叉树的后序遍历
后序遍历(LRD)是 二叉树遍历的一种,也叫做 后根遍历、后序周游,可记做左右根。后序遍历有 递归算法和非递归算法两种。在二叉树中,先左后右再根。巧记:左右根。
12.java实现逆波兰表达式
逆波兰表达式把运算量写在前面,把算符写在后面。
13.斐波那契数列及青蛙跳台阶问题
递归方式:
非递归:
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/3833.html