数组模拟栈 package com.atguigu.queue;import java.util.Scanner;public class CircleArrayQueueDemo { public static void main(String[] args) { //测试一把 System.out.println("测试数组模拟环形队列的案例~~~"); // 创建一个环形队列 CircleArray queue = new C.
使用数组模拟环形队列 主要还是(rear + maxSize - front) %maxSizepackage com.atguigu.queue;import java.util.Scanner;public class CircleArrayQueueDemo { public static void main(String[] args) { //测试一把 System.out.println("测试数组模拟环形队列的案例~~~"); // 创建一个.
队列的使用 //// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package com.atguigu.queue;//使用数组模拟队列-编写一个ArrayQueue类class ArrayQueue { int maxSize; //表示数组的最大容量 int front; // 队列头 int rear; // 队列尾 .
从尾到头打印单链表【百度,要求方式1:反向遍历。方式2:Stack栈】 //可以利用栈这个数据结构,将各个节点压入到栈中,然后利用栈的先进后出的特点,就实现了逆序打印的效果 public static void reversePrint(HeroNode head) { if(head.next == null) { return;//空链表,不能打印 } //创建要给一个栈,将各个节点压入栈 Stack<HeroNode> stack = new Stack&...
单链表的反转【腾讯面试题】 class HeroNode { public int no; public String name; public String nickname; public HeroNode next; public HeroNode(int no, String name, String nickname) { this.no = no; this.name = name; this.nickname = nicknam..
两道单链表的面试题 第一道1)求单链表中有效节点的个数2)查找单链表中的倒数第k个结点 /** * 获取单链表的节点的个数(如果是带头结点的链表,需求不统计头节点) * * @param head head 链表的头节点 * @return 返回的就是有效节点的个数 */ public static int getLength(HeroNode head) { if (head.next == null) { ret
约瑟夫环问题 建立男孩表//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package com.atguigu.linkedlist;class Boy { private int no; private Boy next; public Boy(int no) { this.no = no; }...
尚硅谷数据结构与算法---稀疏数组 链接09集的代码public class SparseArray001 { public static void main(String[] args) { int[][] chessArr1 = new int[11][11]; chessArr1[1][2] = 1; chessArr1[2][3] = 2; chessArr1[4][5] = 3; System.out.println("-------
2. Add Two Numbers 2. Add Two Numberspublic ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = l1, q = l2, curr = dummyHead; int carry = 0; while (p !=...
java并发编程 笔记十四 volatile 原理volatile 的底层实现原理是内存屏障,Memory Barrier(Memory Fence)对 volatile 变量的写指令后会加入写屏障对 volatile 变量的读指令前会加入读屏障1. 如何保证可见性写屏障(sfence)保证在该屏障之前的,对共享变量的改动,都同步到主存当中public void actor2(I_Result r) {...
java并发编程 笔记十三 终止模式之两阶段终止模式在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个料理后事的机会。1. 错误思路使用线程对象的 stop() 方法停止线程stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁使用 System.exit(int) 方法停止线程目的仅是停止一个线程,但这种...
java并发编程 笔记十二 Java 内存模型JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受 cpu 缓存的影响有序性 - 保证指令不会受 cpu 指令并行优化的影响可见性退不出的循环先来看一个现象,main...
java并发编程 笔记十一 同步模式之顺序控制1. 固定运行顺序比如,必须先 2 后 1 打印1.1 wait notify 版 // 用来同步的对象 static Object obj = new Object(); // t2 运行标记, 代表 t2 是否执行过 static boolean t2runed = false; public static void main(...
java并发编程 笔记十 ReentrantLock相对于 synchronized 它具备如下特点可中断可以设置超时时间可以设置为公平锁支持多个条件变量与 synchronized 一样,都支持可重入基本语法// 获取锁reentrantLock.lock(); try { // 临界区 } finally { // 释放锁 ...
java并发编程 笔记九 重新理解线程状态转换假设有线程 Thread t情况 1 NEW --> RUNNABLE当调用 t.start() 方法时,由 NEW --> RUNNABLE情况 2 RUNNABLE <--> WAITINGt 线程用 synchronized(obj) 获取了对象锁后调用 obj.wait() 方法时,t 线程从 RUNNABLE --> WA...
java并发编程 笔记八 Park & Unpark基本使用它们是 LockSupport 类中的方法// 暂停当前线程LockSupport.park();// 恢复某个线程的运行LockSupport.unpark(暂停线程对象)特点与 Object 的 wait & notify 相比wait,notify 和 notifyAll 必须配合 Object Monitor 一起使用...
java并发编程 笔记七 同步模式之保护性暂停1. 定义即 Guarded Suspension,用在一个线程等待另一个线程的执行结果要点有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者)JDK 中,join 的实现、Future 的实现,采用的就是此模式因为要等待另一方的结果,因此归类到同步模式...
1 Two Sum 题目地址: 1. Two Sum参照里面第三种解法我产生了一个疑惑:为啥要把complement当成key?一般键值对的话,complement应该是value,而i才是key才对。public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>()...