数据结构与算法
数据结构与算法
章全蛋
这个作者很懒,什么都没留下…
展开
-
LRU算法
LeetCode 地址 LRU 缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。 void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容原创 2021-03-04 11:15:53 · 103 阅读 · 1 评论 -
栈
栈 如何理解栈? 关于“栈”,我有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。 从栈的操作特性来看,栈是一种操作受限的线性表,只允许在一端插入和删除数据。 我第一次接触这种数据结构的时候,就对它存在的意义产生了很大的疑惑。因为我觉得,相比数组和链表,栈带给我的只有限制,并没有任何优势。那我直接使用数组或者链表不就好了吗?为什么还要用这个“操作受限”的原创 2020-09-30 15:02:21 · 194 阅读 · 0 评论 -
链表
链表 相比数据,链表是一种稍微复杂一点的数据结构。我们先从底层的存储结构上来看一看: 数组需要一块连续的内存空间来存储,对内存的要求比较高。如果我们申请 100MB 大小的数组,当内存中没有连续的、足够大的存储空间时,即便内存的剩余总可用空间大于 100MB ,仍然会申请失败。 而链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用,所以如果我们申请的是 100MB 大小的链表,根本不会有问题。 最常见的三种链表结构有: 单向链表 双向链表 循环链表 链表通过指针将原创 2020-09-28 17:00:28 · 207 阅读 · 0 评论 -
数组
数组 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表(Linear List):线性表就是数据排成一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。 与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为在非线性表中,数据之间并不是简单的前后关系。 连续的内存空间和相同类型的数据: 正是因为这两个限制,它才有了一个堪称杀手锏的特性,“随机访问” 。但有利就有弊,这两个限制也原创 2020-09-27 21:01:47 · 152 阅读 · 0 评论 -
Java基础 —— Java 中常见的数据结构
常见的数据结构 栈 栈:stack 又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他位置进行添加、查找、删除等操作。 简单的说:采用该结构的集合,对数据的存取有如下的特点: 先进后出:存进去的元素,要在它后面的元素依次取出后,才能取出该元素 栈的入口、出口都是在栈的顶端位置 简单的说:采用该结构的集合,对元素的存取有如下的特点 压栈/入栈:就是...原创 2020-04-27 16:46:30 · 676 阅读 · 0 评论 -
算法:数组反转
不借助新数组,实现数组元素反转 public class Reverse { public static void main(String[] args) { int[] arr = {1, 24, 67, 99, 9999, 213, 4124}; for (int left = 0, right = arr.length - 1; left < ...原创 2019-10-30 15:31:38 · 926 阅读 · 0 评论