手写数据结构-链表
1.链表基础 之前讲到的动态数组、栈、队列,底层都是依托静态数组,靠resize解决固定容量问题。而链表是一种真正的动态线性的数据结构。 数据储存在节点(Node)中,优点: 真正的动态,不需要处理固定容量问题,缺点:丧失了随机访问的能力。...
1.链表基础 之前讲到的动态数组、栈、队列,底层都是依托静态数组,靠resize解决固定容量问题。而链表是一种真正的动态线性的数据结构。 数据储存在节点(Node)中,优点: 真正的动态,不需要处理固定容量问题,缺点:丧失了随机访问的能力。...
1.循环队列 在基于动态数组的队列中我们发现,在移出队首元素时时间复杂度为O(n),为了解决这个问题,我们引出了循环队列。 实现原理:双指针,多维护一个指针指向队首,当队首元素移出时,基于数组实现的队列中的元素不需要全部向前移动一个位置,只...
获取 IDEA 激活码、PyCharm 激活码、WebStorm 激活码和 DataGrip 激活码,提供详细破解教程与永久激活方法。支持 IDEA 永久激活与破解,免费获取注册码与激活码,解决 2024/2025 版本激活问题,轻松实现所有 JetBrains 工具的激活。
1.队列基础 队列是一种先进先出的数据结构(先到先得 First In First Out) 队列也是一种线性结构 相比于数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,从另一端(队首)取出元素 2.手写基于动态数组的队列及复...
1.栈基础 结构特性:先进后出 2.手写基于动态链表的栈 package com.tc.javabase.datastructure.array.stack; import com.tc.javabase.datastructure.arr...
1.数组基础 数组最一种存放数据的线性数据结构 ,最原始的数组是一种静态数组,需要声明数组的容量,一旦new出来数组对象大小不可改变,可以通过索引来进行数据的增删改查。我们可以通过对静态数组的二次封装来进行改进成动态数组。 数组最大的优点:...
一.什么是不可变对象 不可变对象:有一种对象只要它了就是安全的,它就是不可变对象。 一个不可变对象需要满足的条件:1.对象创建后其状态不能修改。 2.对象所有的域都是final类型。 ...
一.相关定义: 线程安全类:当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些进程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。 线程安全性主要体现在三个方面:原...
一、CPU多级缓存 CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源,所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题。 CPU多级缓存配置(演变): 局部性原理: (1) 时间局...
一.什么是并发与高并发 ## 并发:多个线程操作相同的资源,保证线程安全,合理使用资源。 高并发:服务能同时处理很多请求,提高程序性能。 二.并发及并发的线程安全处理 如何进行并发编程且保证并发线程的安全性可以从以下几个点进行展...
1、进程和线程的区别 进程是资源分配的最小单位,线程是cpu调度的最小单位。 *所有与进程相关的资源,都被记录在PCB中 *进程是抢占cpu的调度单位;线程属于某个进程,共享其资源 *线程只由堆栈寄存...