设计可以变更的缓存结构:

思路:
设计结构 map---储存对应的位置 + 双向链表---维持优先级

还有size的限制 ----
如果超过个数限制 ---则将头节点删除 并 从中找到map对应的记录(因为节点中含有map中的key)
将新加入节点连在双向链表后面即可~
代码实现:





设计的缓存结构:




注意:
map 中 存值 具体和数值类型有关

map 中 存放 基础类型 则就是具体的值
存放 自定义类型 基本就只存放地址 不会直接存放值 不太可能~
(once fail ----baidu )
给定一个字符串公式 ,返回公式的计算结果:

思路1 (没有小括号的情况) :
将符号和数字均压入同一个栈中
每次压入一个数字和一个符号
若 符号是+ 或者- 则直接压入即可
若符号是* / 则弹出 栈中数字和当前数字进行计算之后 再将结果压入
最后 栈 中所有数字均只有 + - 直接计算即可

考虑2 :有这样的函数 :
f(num) 表示从字符串str的第num位置开始计算 如果遇到右括号则直接停止,返回结果
否则直到str末尾计算 再返回结果即可

解法 :当遇到左括号的时候就开始调用子过程
等子过程将计算值返回时则 继续计算 再返回全局返回值
所以 其实函数返回结果应该是两个:1 计算到哪个位置 2 f(.)计算的返回值

代码实现:
pre :收集数字
如果一直是数字 那就一直读入收集
如果不是左括号和数字(=-/*) 则都分别放入
如果遇到左括号---递归---调用子过程



举例说明核心代码:

跳表(难度大):
能够实现key-vlue其中key 也是有序的 但底层不是红黑树 同样时间复杂度O(logn)
redis底层结构也是跳表 是一种变体
底层原理:
key对应的层数是由随机函数生成(生成结果要不为1 要不为0)
在一个已有的跳表中加入一个新的数字 则如何去找位置?
每次均是从最上面开始查找 而观察分布 发现最下边的层次点数最多 越往上越少
因而时间复杂度比较小

具体代码实现:
注意:下一个比当前的要大 则就往下走 否则往右走
节点结构:

观察列表内容:



本文介绍了一种可变更的缓存结构设计方案,利用双向链表和哈希表实现高效缓存更新与查询。此外,还探讨了字符串公式的解析与计算方法,包括递归求值策略。
706

被折叠的 条评论
为什么被折叠?



