表达式求值数据结构_盘点数据结构的应用场景

数据结构是计算机编程中最重要的内容之一,我们经常会看到一个公式,那就是程序=数据结构+算法。从这个公式我们就能够看出来数据结构是多么的重要,要想写出优雅高效的程序,一定离不开良好的数据结构,今天我们就来盘点一下常用的数据结构的应用场景。

LRU 缓存淘汰算法

链表是最基础的数据结构,也是最常用的数据结构,很多复杂的数据结构都是通过链表演化而来的,而链表就可以用来实现LRU缓存淘汰。

ac4fd028759c98507de1c810228ee5d9.png

我们可以维护一个有序的链表,越靠近链表尾部的节点是越早之前访问的。当有一个新的数据被访问时,我们从链表头部开始顺序遍历链表。如果此数据之前已经被缓存在链表中了,我们遍历得到这个数据的对应结点,并将其从原来的位置删除,并插入到链表头部。如果此数据没在缓存链表中,如果此时缓存未满,可直接在链表头部插入新节点存储此数据;如果此时缓存已满,则删除链表尾部节点,再在链表头部插入新节点。

B+树索引

数据库已经成为我们应用程序离不开的存储引擎,对于大量的数据,我们经常需要创建数据库索引来提高查询检索效率,而B_树就是非常高效的数据结构,它通过将数据存放到叶子节点,增加了索引存储空间,同时B树的结构又让树的层次很低,大大加快了检索的比较次数,因此非常高效。

0da7419de3f0fe7cd63d939e748a80a8.png

二叉树查找

排序和查找是我们经常需要进行的操作,而排序的最终目的也是为了更好地查找。而二叉树这个数据结构,就是为了方便我们进行数据的查找。我们都知道搜索二叉树的结构可以让查找变成二分查找,这大大加快速了查找效率。

表达式求值

对于一个表达式比如a+b*c,因为有优先级,所以我们不能按照从左到右的顺序进行运算,在这个时候栈这个数据结构就发挥出它的优势,通过使用栈,我们就能够轻松地计算表达式的值。

281dba9d41976ad141373995552561d7.png

对于上面的表达式,我们只需要将数值和操作符压入到不同的栈中,然后从最后面比较操作符的优先级,如果后面的操作符的优先级更高,那么就先弹出数据计算后面的表达式值,否则可以先计算前面表达式的值。

消息队列

大型的互联网架构中,消息队列一定少不了,它不仅可以消除高峰期的流量值,还可以解耦代码,更可以处理日志。

而消息队列底层的数据结构就是队列,它是一种先进先出的数据结构,当然现在的消息队列是有优先级的,不过这些都是在队列的基础上演变的,如果没有队列的基础,消息队列是不能够掌握的。

关键词提示

当我们在搜索引擎里输入一个词的时候,它会提示给我们许多关键词,这些关键词是如何存储的,答案就是使用字典树这个数据结构,它根据关键词进行字典的排序,这样在查询的时候,通过前缀匹配,就可以高效地给出关键词的相关匹配数据。

690f132fe901e0a4ef512c0a9fa8f66c.png

有序集合

我们都知道redis的常用五种数据结构,其中有一个有序集合,它是如何实现的呢?答案就是它使用了跳表这种数据结构。不同于红黑树的复杂操作,跳表使用多层索引结构,大大加速了检索时间。

dda1c9c29ef6c72ee0712d6859891f66.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值