数据结构与算法(二)

news2024/11/20 13:43:49

一、数组

什么是数组?

数组:在内存中用一串连续的区域来存放一些值。数组是相同类型数据元素的有序集合

数组是由相同类型的元素的集合组成的数据结构

连续内存:JS的数组元素可以是任意类型,JS中的内存地址是不连续的

数组的优点

  1. 按照索引查询元素的时候速度很快
  2. 存储大量的数据
  3. 按照索引去遍历数组
  4. 定义方便,访问很灵活

 

数组的缺点:

  1. 根据内容查找会很慢-index
  2. 数组的大小一经确定是不能改变的,不适合动态存储
  3. 数组只能存储相同类型的数据
  4. 增加、删除元素效率很低(尽量避免从头部插入)

清空数组有几种方法:

  • length = 0
  • = []
  • splice()

 二、栈

内存区域:栈区

单片机:压栈

数据结构中,有一个同名的结构:

内存中的堆栈和数据结构中的堆栈不是一个概念,内存中的堆栈是真实存在的物理区,数据结构中的堆栈式抽象数据存储结构

栈:是一种受限制的线性表。它遵循后进先出(LIFO)

栈的应用:十进制转二进制

 

// 十进制转化二进制
const binary = (number)=>{
	let stack = new Stack();
	let remainder = 0;
	let top = '';
	
	while(number>0){
		remainder = number%2;
		stack.push(remainder);
		number = Math.floor(number/2);
	}
	while(!stack.isEmpty()){
		top+=stack.pop();
	}
	return top;
}

 最开始的时候,栈式不含有任何数据的,叫做空栈



class Stack(){
	constructor(){
		this.items = [];
	}
	push(ele){
		this.items.push(ele);
	}
	pop(){
		return this.items.pop();
	}
	// 栈顶
	peek(){
		return this.items[this.item.length - 1]
	}
	// 判空
	isEmpty(){
		return this.items.length === 0 ;
	}
	// 长度
	size(){
		return this.items.length;
	}
	// 清空
	clear(){
		this.items.length = 0
	}
}

push():数组末尾推入

pop():数组末尾推出

javascript的调用栈(执行栈)

执行上下文:执行上下文就是当前JS代码被解析和执行所在环境的抽象的概念

JS中的任何代码都是在执行上下文中运行的。(执行环境)

JS的执行上下文分三种:全局执行上下文、函数执行上下文、Eval

  • 全局执行上下文:默认的,它是最基础的执行上下文。
  1. 创建全局对象
  2. 将this指向这个全局对象
  3. 执行js的时候就压入栈底,关闭浏览器的时候才弹出
  • 函数执行上下文:每次调用函数的时候,会为这个函数创建一个新的执行上下文。
  1. JS引擎创建一个新的全局执行上下文并且将这个执行上下文推入到当前的执行栈中(执行栈用于:存储在代码执行期间创建的所有的执行上下文)
  2. 每当发生函数调用的时候,JS引擎都会为该函数创建一个新的执行上下文并且PUSH到当前执行栈的栈顶
  • Eval函数执行上下文

 JS的执行上下文分两个阶段

  • 创建阶段
  1. 创建词法环境
  2. 生成变量对象(VO),建立作用域链作用域链作用域链(重要的事说三遍);函数环境会创建变量对象:arguments对象(并赋值)、函数声明(并赋值)、变量声明(不赋值),函数表达式声明(不赋值);会确定this指向;会确定作用域
  3. 确认this指向,并绑定this
  • 执行阶段。这个阶段进行变量赋值,函数引用及执行代码。变量赋值、函数表达式赋值,使变量对象编程活跃对象

递归的原理

函数的调用的本质:“压栈与出栈操作”。函数在在调用栈里边有一个特例,叫做递归

递归:自己调自己

递归调用,递归栈。LIFO

先进栈,到条件后再出栈,如果不出栈,就会导致:栈溢出

 阶乘:1到n到连续自然数相乘的积

 

const factor = (n)=>{
        if(n===1){
            return 1;
        }
     return n*factor(n-1);

    }

斐波那契数列:从第3项开始,每一项都等于前两项的和 

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?

1,1,2,3,5,8,13...

F(1) = 1,F(2) = 1 ...

F(n) = F(n-1)+F(n-2)

const Fibonacci = (n) => {
  if (n <= 1) {
    return 1;
  }
  return Fibonacci(n - 1) + Fibonacci(n - 2);
};

尾调用优化以上两个算法:

//  把前面两位数,当作参数传进来
const Fibonacci = (n, ac1 = 1, ac2 = 1) => {
  if (n <= 1) {
    return ac2;
  }

  return Fibonacci(n - 1, ac2, ac1 + ac2);
};

/* 
重复计算的问题
n = 5 ,Fibonacci(4)+Fibonacci(3)
n = 4,Fibonacci(3)+Fibonacci(2)
...
递归需要同时保存成百上千个调用帧。很容易就会发生栈溢出
但是对于尾递归来说。由于只存在一个调用栈,所以永远不会发生栈溢出错误
Fibonacci(50)
*/

const factor = (n,total) =>{
  if (n === 1) {
    return total;
  }
  return factor(n-1, n * total)
}

// 初始值
console.log(factor(10,1));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业互联网的新应用:高端装备的故障预测和健康管理

高端装备制造行业作为我国战略性新兴产业的重要组成部分&#xff0c;面临着产品复杂和生命周期长的挑战。为了提高装备的可靠性、可用性和维护效率&#xff0c;工业互联网技术在高端装备的故障预测和健康管理方面发挥了重要作用。 本文将探讨工业互联网在高端装备中故障预测和…

如何应用金字塔模型提高结构化表达能力

看一下结构化表达的定义&#xff1a; 结构化表达&#xff1a;是基于结构化思维&#xff0c;理清事物整理与部分之间关系、换位思考后&#xff0c;进行简洁、清晰和有信服力的表达&#xff0c;是一种让受众听得明白、记得清楚、产生认同的精益沟通方式。 结构化表达的基本原则是…

度娘教我influxdb,先搞一波在补理论

InfluxDb中的数据查询语法where子句 公司用的时序性数据库是influxdb&#xff0c;但是确实接触有点少。 心里话&#xff1a; 就是没接触过&#xff0c;度娘教教我。。。。 我咋回呢&#xff0c;现学吧&#xff0c;都是数据库&#xff0c;天下乌鸦一般黑然后就哟了以下&#xf…

Mac 更换.gradle文件目录

用mac开发最大滑铁卢居然是存储空间不足......于是加了一个外置的存储器。于是需要把android开发中最大的一个缓存目录移到外置存储器... 一开始对android studio的进行了如下设置 于是乎...Mac用户下的.gradle全删了...这个时候用android studio打包运行都没问题了。 如果你…

AI在视频教学方面会有哪些有意思应用?

阿酷TONY / 原创 / 2023-5-17 / 长沙 来&#xff0c;我们一起来探索未来式的学习体验&#xff0c;AI视频&#xff0c;AI与视频的应用将为你带来前所未有的教学体验。AI在视频教学方面的应用&#xff0c;主要会体现在如下几个方面&#xff1a; 1. AI 课程知识点梳理 2. AI 学…

前段时间公司招人,面了一个要23K的,一问自动化只会点皮毛···

前段时间公司要招2个自动化测试&#xff0c;同事面了几十个候选人&#xff0c;发现了一个很奇怪的现象&#xff0c;面试的时候&#xff0c;如果问的是框架api、脚本编写这些问题&#xff0c;基本上个个都能对答如流&#xff0c;等问到实际项目的时候&#xff0c;类似“怎么从0开…

OPPO关停哲库业务,工程师造芯何去何从?

5月12日&#xff08;上周五&#xff09;&#xff0c;新浪科技从OPPO处了解到&#xff0c;OPPO将终止ZEKU业务。3000多人团队突然原地解散&#xff0c;网上唏嘘声一片&#xff01; ZEKU最初成立于2019年&#xff0c;是OPPO的全资子公司&#xff0c;欧加集团百分之百注资成立。总…

提高合规性与安全性:ADAudit Plus助力企业数据审计

简介&#xff1a;在现代数字化时代&#xff0c;企业面临着日益增长的数据安全威胁和法规合规要求。为了应对这些挑战&#xff0c;企业需要强大的数据审计解决方案来监控和保护其敏感数据。ADAudit Plus是一款功能强大的工具&#xff0c;旨在帮助企业提高合规性&#xff0c;并提…

dll注入技术

一、dll注入的概念 当一个进程运行时&#xff0c;它会加载并使用一些动态链接库&#xff08;DLL&#xff09;来提供额外的功能和资源。这些DLL可以被多个进程共享&#xff0c;使得代码重用和资源共享变得更加高效。DLL注入技术利用了这种共享机制。它允许向正在运行的进程中注…

厦大凭什么和清北复一起入选首批国家集成电路产教融合创新平台?对台区位优势吗

最近&#xff0c;有网友提出这样一个问题&#xff0c;众所周知&#xff0c;中国集成电路研究主要集中在北京和上海&#xff0c;清北可以和北京合作&#xff0c;复旦可以和上海合作&#xff0c;那么厦大和谁合作&#xff0c;厦大又凭什么和清北复一起入选了首批国家集成电路产教…

RecyclerView 分层级展示(抽屉) TreeView

先看效果 难点: 数据层级的划分;理清楚层级关系, 剩下的就简单明了了; 1. 第一步 new Adapter, and setAdapter; (不需要setLayoutManager, Adapter里有set); mAdapter new TreeViewAdapter(getContext(),mRecyclerView); mRecyclerView.setAdapter(mAdapter); 2. 第二步, …

素雅的登录界面,简单而优雅

先上效果图&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>*, *::after, *::before {margin: 0;padding: 0;box-sizing: bord…

本地服务器与云服务器哪个好?

本地服务器和云服务器是企业可以使用的两种不同的服务器设置。主要区别在于本地服务器托管&#xff0c;第三方提供商托管云服务器。那么&#xff0c;本地服务器和云服务器哪个更好呢&#xff1f; 接下来&#xff0c;将带大家讨论本地服务器和云服务器的优缺点&#xff0c;并帮…

Golang笔记:使用embed包将静态资源嵌入到程序中

文章目录 目的使用演示//go:embed 指令在WebServer中应用总结 目的 Golang编译程序默认是静态编译&#xff0c;会把相关的库都打包到一起&#xff0c;这在分发部署使用时非常方便。不过如果项目中用到的外部的静态资源文件&#xff0c;通常就需要将这些资源和程序一起拷贝分发…

软件测试面试大全(涵盖了软件测试的全部核心技术点),应对技术面妥妥的

软件测试面试题&#xff1a;项目 1、简单介绍下最近做过的项目 根据自己的项目整理完成&#xff0c;要点&#xff1a; 1&#xff09;项目背景、业务、需求、核心业务的流程 2&#xff09;项目架构&#xff0c;B/S 还是 C/5&#xff0c;数据库用的什么? 中间件用的什么&…

[开源工具] [Unity实战]Jenkins如何配置拉取Git/Jenkins使用Unity一键打包[windows][android]

[开源工具]Jenkins如何配置拉取Git/Jenkins使用Unity一键打包[windows][android] 1.背景介绍1.1Jenkins是什么?1.2用JenkinsUnity的好处? 2.Jenkins安装&使用2.1Java112.2 下载jenkins.war(我用tomcat所以需要,可以用jenkins安装版本)2.3 使用Tomcat92.4将tomcat9解压后,…

1.高级面试-MySQL、Redis、特殊场景、Java

本文目录如下&#xff1a; 高级面试一、MySQLB树有什么优点&#xff1f; image.pngInnoDB 和 MyISAM 的索引结构有什么区别 (聚簇索引-非聚簇索引)&#xff1f; 二、RedisRedis 如何保证存储的都是 热点数据&#xff1f;大量 key 为同一过期时间怎么办&#xff1f;缓存一致性的…

TS构建微信小程序后使用vant weapp框架配置

1.npm 安装 # 通过 npm 安装 npm i vant/weapp -S --production 2.配置app.json 将 app.json 中的 "style": "v2" 去除&#xff0c;小程序的新版基础组件强行加上了许多样式&#xff0c;难以覆盖&#xff0c;不关闭将造成部分组件样式混乱。 3.修改 pr…

ubuntu20 kvm显卡直通实验-a4000

一、环境&#xff1a; 显卡&#xff1a;NVIDIA RTX A4000 系统&#xff1a;Ubuntu20.04 CPU&#xff1a;intel二、安装kvm sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager ovmf添加用户到“libvirt”和“kvm”组 s…

个人简历上的照片有什么要求?这些基本要求要知道

简历对我们来说非常重要&#xff0c;因为它可以帮助我们展示我们的工作经验、技能和教育背景&#xff0c;从而让面试者更好地了解我们的能力和合适程度。简历通常是我们与公司之间的第一次接触&#xff0c;因此它应该清晰、简洁和易于阅读&#xff0c;以便引起面试者的兴趣&…