Hello 算法 1.0.0b1 JavaScript版我们将队列头部称为「队首」,队列尾部称为「队尾」,将把元素加入队尾的操作称为「入队」,删除队首元素的 操作称为「出队」。 Figure 5‑4. 队列的先入先出规则 5. 栈与队列 hello‑algo.com 66 5.2.1. 队列常用操作 队列的常用操作见下表,方法名需根据特定语言来确定。 方法名 描述 时间复杂度 push() 元素入队,即将元素添加至队尾 ?(1) poll() poll() 队首元素出队 ?(1) front() 访问队首元素 ?(1) size() 获取队列的长度 ?(1) isEmpty() 判断队列是否为空 ?(1) 我们可以直接使用编程语言实现好的队列类。 // === File: queue.js === /* 初始化队列 */ // JavaScript 没有内置的队列,可以把 Array 当作队列来使用 const queue = queue.push(1); queue.push(3); queue.push(2); queue.push(5); queue.push(4); /* 访问队首元素 */ const peek = queue[0]; /* 元素出队 */ // 底层是数组,因此 shift() 方法的时间复杂度为 O(n) const poll = queue.shift(); /* 获取队列的长度0 码力 | 185 页 | 14.70 MB | 1 年前3
Hello 算法 1.0.0 JavaScript版Q:为什么哈希表同时包含线性数据结构和非线性数据结构? 哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续“哈希冲突”章节会讲):数 组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。 从存储的角度来看,哈希表的底层是数组,其中每一个桶槽位可能包含一个值,也可能包含一个链表或一棵 树。因此,哈希表可能同时包含线性数据结构(数组、链表)和非线性数据结构(树)。 Q:char 图:邻接表是表示图的一种常用方式,其中图的每个顶点都与一个链表相关联,链表中的每个元素都代 表与该顶点相连的其他顶点。 双向链表常用于需要快速查找前一个和后一个元素的场景。 ‧ 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 所示,我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队尾的操作称为“入队”,删 除队首元素的操作称为“出队”。 图 5‑4 队列的先入先出规则 5.2.1 队列常用操作 队列的常见操作如表 5‑2 所示。需要注意的是,不同编程语言的方法名称可能会有所不同。我们在此采用与 栈相同的方法命名。 表 5‑2 队列操作效率 方法名 描述 时间复杂度 push() 元素入队,即将元素添加至队尾 ?(1)0 码力 | 376 页 | 17.57 MB | 1 年前3
Hello 算法 1.0.0b5 JavaScript版哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续哈希表章节会 讲)。在拉链法中,数组中每个地址(桶)指向一个链表;当这个链表长度超过一定阈值时,又 可能被转化为树(通常为红黑树)。因此,哈希表可能同时包含线性(数组、链表)和非线性 (树)数据结构。 � char 类型的长度是 1 byte 吗? char 类型的长度由编程语言采用的编码方法决定。例如,Java、JS、TS、C# 图:邻接表是表示图的一种常用方式,在其中,图的每个顶点都与一个链表相关联,链表中的每个元素 都代表与该顶点相连的其他顶点。 双向链表常被用于需要快速查找前一个和下一个元素的场景。 ‧ 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 queue」是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断 加入队列的尾部,而位于队列头部的人逐个离开。 如图 5‑4 所示,我们将队列的头部称为“队首”,尾部称为“队尾”,将把元素加入队尾的操作称为“入队”, 删除队首元素的操作称为“出队”。 图 5‑4 队列的先入先出规则 5.2.1 队列常用操作 队列的常见操作如表 5‑2 所示。需要注意的是,不同编程语言的方法名称可能会有所不同。我们在此采用与0 码力 | 375 页 | 30.68 MB | 1 年前3
Hello 算法 1.1.0 JavaScript版Q:为什么哈希表同时包含线性数据结构和非线性数据结构? 哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续“哈希冲突”章节会讲):数 组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。 从存储的角度来看,哈希表的底层是数组,其中每一个桶槽位可能包含一个值,也可能包含一个链表或一棵 树。因此,哈希表可能同时包含线性数据结构(数组、链表)和非线性数据结构(树)。 Q:char 图:邻接表是表示图的一种常用方式,其中图的每个顶点都与一个链表相关联,链表中的每个元素都代 表与该顶点相连的其他顶点。 双向链表常用于需要快速查找前一个和后一个元素的场景。 ‧ 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 所示,我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队尾的操作称为“入队”,删 除队首元素的操作称为“出队”。 图 5‑4 队列的先入先出规则 5.2.1 队列常用操作 队列的常见操作如表 5‑2 所示。需要注意的是,不同编程语言的方法名称可能会有所不同。我们在此采用与 栈相同的方法命名。 表 5‑2 队列操作效率 方法名 描述 时间复杂度 push() 元素入队,即将元素添加至队尾 ?(1)0 码力 | 379 页 | 18.46 MB | 1 年前3
Hello 算法 1.2.0 简体中文 JavaScript 版Q:为什么哈希表同时包含线性数据结构和非线性数据结构? 哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续“哈希冲突”章节会讲):数 组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。 从存储的角度来看,哈希表的底层是数组,其中每一个桶槽位可能包含一个值,也可能包含一个链表或一棵 树。因此,哈希表可能同时包含线性数据结构(数组、链表)和非线性数据结构(树)。 Q:char 图:邻接表是表示图的一种常用方式,其中图的每个顶点都与一个链表相关联,链表中的每个元素都代 表与该顶点相连的其他顶点。 双向链表常用于需要快速查找前一个和后一个元素的场景。 ‧ 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 所示,我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队尾的操作称为“入队”,删 除队首元素的操作称为“出队”。 图 5‑4 队列的先入先出规则 5.2.1 队列常用操作 队列的常见操作如表 5‑2 所示。需要注意的是,不同编程语言的方法名称可能会有所不同。我们在此采用与 栈相同的方法命名。 表 5‑2 队列操作效率 方法名 描述 时间复杂度 push() 元素入队,即将元素添加至队尾 ?(1)0 码力 | 379 页 | 18.47 MB | 10 月前3
2019-2021 美团技术年货 前端篇所有元素依次加入队列中,递归完成后,再把所有节点依次移出队列,这样一进一出 便对所有元素完成了两次遍历,我们把这两次遍历称为进队遍历和出队遍历。 进队遍历时,推断算法根据数据源中信息记录每个节点的大小和位置信息,并根据位 置关系计算每个子节点在父节点中期望的主辅轴对齐方式和内外边距。出队遍历时, 父节点会根据子节点期望的对齐方式确定父节点最终的主辅轴对齐方式,并根据子节 点的拉伸意图修正父节点的大小 背景 1.1 美团民宿业务介绍 美团民宿专注为消费者提供“住得不一样”的旅居体验,提供的服务包括民宿、酒 店、公寓、客栈、短租、宾馆、旅行住宿等,同时包括树屋、房车、INS 风等新奇的 网红民宿。美团民宿自上线之后,业务发展迅猛,在供给侧,房源类型不断丰富,各 类分销、直销、直连、境外陆续推出,房源信息维度不断扩展,筛选、推荐、信息 呈现也不断变得复杂。同时伴随着营销方式的丰富、房东管理、经营、服务的不断扩 量已达日均 1.5 亿余次,Web 上报日志量达日均 500 余次,约 97% 上报的 Web 日志在 Logan 日志分析平台上被公司研发同学搜索查阅。利用 Logan 日志系统,公司各研发团 队已能够尽早获得完整的用户端日志流及环境信息,帮助业务及时排查问题并响应 用户反馈。 另外,在美团,Logan Web 除了提供上文介绍的技术实现之外,还利用美团内部的 通用 JS 桥组件实现了与0 码力 | 738 页 | 50.29 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 JavaScript 版bottom of the stack 栈底 堆疊底 queue 队列 佇列 double‑ended queue 双向队列 雙向佇列 front of the queue 队首 佇列首 rear of the queue 队尾 佇列尾 hash table 哈希表 雜湊表 hash set 哈希集合 雜湊集合 bucket 桶 桶 第 16 章 附錄 www.hello‑algo.com balanced binary tree 平衡二叉树 平衡二元樹 binary search tree 二叉搜索树 二元搜尋樹 AVL tree AVL 树 AVL 樹 red‑black tree 红黑树 紅黑樹 level‑order traversal 层序遍历 層序走訪 breadth‑first traversal 广度优先遍历 廣度優先走訪 depth‑first traversal0 码力 | 379 页 | 18.78 MB | 10 月前3
廖雪峰JavaScript教程,于是Google自己开发了一个高性能JavaScript引擎,名字叫 V8,以BSD许可证开源。 现代浏览器大战让微软的IE浏览器远远地落后了,因为他们解散了最有经验、战斗力最强的浏览器团 队!回过头再追赶却发现,支持HTML5的WebKit已经成为手机端的标准了,IE浏览器从此与主流移动 端设备绝缘。 浏览器大战和Node有何关系? 话说有个叫Ryan Dahl的歪果仁,他的工作是0 码力 | 264 页 | 2.81 MB | 10 月前3
阮一峰 JavaScript 教程0) 含义 应用 JavaScript 提供定时执行代码的功能,叫做定时器(timer),主 要由 setTimeout() 和 setInterval() 这两个函数来完成。它们向任务队 列添加定时任务。 setTimeout 函数用来指定某个函数或某段代码,在多少毫秒之后执 行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时 器。 1. var timerId0 码力 | 540 页 | 3.32 MB | 10 月前3
共 9 条
- 1













