算法与数据结构 | 链表 / 从链表到JS判断字符串回文

缓存淘汰策略

  • 先进先出策略 FIFO(First In,First Out)
  • 最少使用策略 LFU(Least Frequently Used)
  • 最近最少使用策略 LRU(Least Recently Used)。

各种链表结构

  • 底层的存储结构看

    • 数组需要连续的、足够大的储存空间
    • 链表不需要连续的内存空间,通过“指针”将一组零散的内存块串联起来
    • 在这里插入图片描述
  • 单链表

    • 为了把所有的节点串起来,链表通过指针将一组零散的内存块串联起来;除了存储数据,好需要记录下一个节点【data|next】的方式,next成为后继指针next;
    • 在这里插入图片描述
    • 特殊的头结点–记录的链表的基地址
    • 尾节点–指向一个空地址null;
  • 链表插入和删除操作

    • 和数组不一样,,删除链表不需要搬移节点,用我他们存储空间本来就不连续,只需要吧对应的next后继指针改变;删除操作和插入操作会比较快
    • 弊端:访问第K个元素的时候,因为是非连续存储空间,无法通过下标访问的方式,需要遍历节点
  • 循环链表

    • 和单链表区别的就是首位相连
  • 双向链表

    • 【prev | data | next】的数据结构方式,每一个节点首尾能双向连接
      • 在这里插入图片描述
    • 删除操作会要比单向链表快,为什么呢?
      • 双向链表记录了该节点的前去节点和后驱节点,删除操作不需要再想单向链表一样循环一次;
  • 链表性能大比拼

    • 在这里插入图片描述

知识拓展-判断字符串是否回文

  • 字符串回文“abcba”,“moom”,这些都是回文的字符串,如何判断
  • 首先思路分析:
    • 首尾字符串相同
    • 判断中间值
代码
  • 以下代码是当下想到的思路,后续如果再灵光一闪,可能会继续优化。
function palindrome(str) {
	// 取出数组长度
	let length=str.length;
	// 取出中位数
	let half=Math.floor(length/2)-1;
	for(var i=0;i<=half;i++){
		// 数组开始到中位值和末尾开始到中位值的值需要相等
		if(str[i]==str[length-1-i]){
			console.log(str[i])
		}else{
			// 有一个不相等则可以判断字符串不回文
			console.log("此字符串不回文");
			break;
		}
	}
}

为什么字符串也可以使用下标访问?
  • 写了一半,突然发现字符串也可以通过下标访问到,于是去看原因
  • ES6-字符串的-Iterator-接口;因为字符串具备 Iterator 接口的数据结构;可以通过下标取值;
  • 其他拥有相同结构的还有
    • Array、Map、Set、String、TypedArray、函数的 arguments 对象、NodeList 对象
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值