后进先出还是先进先出?堆栈/队列指南

后进先出还是先进先出?堆栈/队列指南

假设理解 big o 表示法。 javascript 中有示例。资料参考 gayle laakmann mcdowell 的《cracking the coding interview》

今天,我们将探讨两种基本的数据结构:堆栈队列。我们将深入研究它们的概念、用例,并使用经典和基于原型的方法在 javascript 中实现它们。

堆栈:后进先出 (lifo)

想象一下一堆煎饼——你最后放在上面的一个是你第一个吃的。这正是堆栈数据结构的工作原理。它遵循后进先出(lifo)原则.

关键操作

push(item): 将一个项目添加到堆栈顶部pop():从堆栈中删除顶部项目peek():返回顶部项目而不删除它isempty():检查栈是否为空

使用案例

堆栈在涉及以下场景时特别有用:

递归算法文本编辑器中的撤消机制

javascript 实现

经典面向对象编程

class stack {  constructor() {    this.items = [];  }  push(element) {    this.items.push(element);  }  pop() {    if (this.isempty()) {      return "stack is empty";    }    return this.items.pop();  }  peek() {    if (this.isempty()) {      return "stack is empty";    }    return this.items[this.items.length - 1];  }  isempty() {    return this.items.length === 0;  }  size() {    return this.items.length;  }  clear() {    this.items = [];  }}

基于原型

function stack() {  this.items = [];}stack.prototype.push = function(element) {  this.items.push(element);};stack.prototype.pop = function() {  if (this.isempty()) {    return "stack is empty";  }  return this.items.pop();};stack.prototype.peek = function() {  if (this.isempty()) {    return "stack is empty";  }  return this.items[this.items.length - 1];};stack.prototype.isempty = function() {  return this.items.length === 0;};stack.prototype.size = function() {  return this.items.length;};stack.prototype.clear = function() {  this.items = [];};

队列:先进先出 (fifo)

现在,让我们将注意力转移到队列上。与堆栈不同,队列遵循先进先出(fifo)原则。想象一下音乐会场地的排队——第一个到达的人就是第一个进入的人。

关键操作

enqueue(item): 将一个项目添加到队列末尾dequeue():从队列中删除第一个项目peek():返回第一项而不删除它isempty():检查队列是否为空

使用案例

队列常用于:

广度优先搜索算法任务调度

javascript 实现

经典面向对象编程

class node {  constructor(data) {    this.data = data;    this.next = null;  }}class queue {  constructor() {    this.start = null;    this.end = null;    this.size = 0;  }  enqueue(element) {    const newnode = new node(element);    if (this.isempty()) {      this.start = newnode;      this.end = newnode;    } else {      this.end.next = newnode;      this.end = newnode;    }    this.size++;  }  dequeue() {    if (this.isempty()) {      return "queue is empty";    }    const removeddata = this.start.data;    this.start = this.start.next;    this.size--;    if (this.isempty()) {      this.end = null;    }    return removeddata;  }  peek() {    if (this.isempty()) {      return "queue is empty";    }    return this.start.data;  }  isempty() {    return this.size === 0;  }  getsize() {    return this.size;  }  clear() {    this.start = null;    this.end = null;    this.size = 0;  }}

基于原型

function Node(data) {  this.data = data;  this.next = null;}function Queue() {  this.start = null;  this.end = null;  this.size = 0;}Queue.prototype.enqueue = function(element) {  const newNode = new Node(element);  if (this.isEmpty()) {    this.start = newNode;    this.end = newNode;  } else {    this.end.next = newNode;    this.end = newNode;  }  this.size++;};Queue.prototype.dequeue = function() {  if (this.isEmpty()) {    return "Queue is empty";  }  const removedData = this.start.data;  this.start = this.start.next;  this.size--;  if (this.isEmpty()) {    this.end = null;  }  return removedData;};Queue.prototype.peek = function() {  if (this.isEmpty()) {    return "Queue is empty";  }  return this.start.data;};Queue.prototype.isEmpty = function() {  return this.size === 0;};Queue.prototype.getSize = function() {  return this.size;};Queue.prototype.clear = function() {  this.start = null;  this.end = null;  this.size = 0;};

绩效分析

堆栈和队列都提供 o(1)o(1)o(1) 有效实现时,其核心操作(堆栈的压入/弹出、队列的入队/出队)的时间复杂度。这使得它们在特定用例中具有高性能。

它们都为许多常见的编程问题提供了优雅的解决方案,并构成了更复杂的数据结构和算法的基础。通过在 javascript 中理解和实现这些结构,您就可以很好地解决各种 leetcode/算法问题 ?.

以上就是后进先出还是先进先出?堆栈/队列指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1490630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 13:19:11
下一篇 2025年12月19日 13:19:26

相关推荐

  • 从头开始构建 Web 应用程序:基本指南以及何时雇用 Magento 开发人员

    简介 Web 应用程序已成为现代商业的基石,提供动态和交互式平台,可提高用户参与度和运营效率。无论您是开发简单的内容管理系统还是复杂的电子商务平台,了解 Web 应用程序开发的基础知识都至关重要。本指南将引导您完成从头开始构建 Web 应用程序的过程,并解释何时以及为何应考虑雇用 Magento 开…

    2025年12月19日
    000
  • 通过分页、排序和过滤功能优化电子商务导航

    在我的网络笔记中查看这篇文章! 我们正在使我们的商店变得越来越人性化,今天我们将在我们的电子商务商店改进方面又迈出一步。在之前的文章中,我们已经添加了分页、排序和过滤器,但它们只是我们模板的一部分,没有任何功能,现在是时候修复它了,所以让我们开始为今天的工作构建一个简单的计划,并继续改进我们的商店n…

    2025年12月19日
    000
  • React 系列:useState 与 useRef

    刚开始时,usestate 及其所有怪癖可能会让人不知所措。现在将 useref 加入其中,您的大脑就会爆炸。 我认为更深入地研究 useRef 与 useState 的技术细节会很有帮助,因为工程师通常很难理解它们之间的差异以及何时选择其中一个。 这是我对每一个的定义,粗略且明显过于简单化: us…

    2025年12月19日
    000
  • LeetCode 冥想:硬币找零

    我们先来描述一下这个问题: 给你一个代表不同面额硬币的整数数组硬币和代表总金额的整数金额。返回弥补该金额所需的最少硬币数量。如果任何硬币组合都无法弥补该金额,则返回-1。您可以假设您拥有无限数量的每种硬币。 例如: input: coins = [1, 2, 5], amount = 11outpu…

    2025年12月19日
    000
  • 浅色模式和深色模式

    掌握浅色和深色主题:现代网页设计指南 在不断发展的网页设计世界中,浅色和深色主题切换已成为现代应用程序中的主要功能。该功能不仅增强了用户体验,还满足了无障碍需求,让用户可以灵活选择适合自己喜好和环境条件的视觉主题。在本博客中,我们将探讨浅色和深色主题的重要性、如何实现它们以及确保无缝用户体验的最佳实…

    2025年12月19日
    000
  • 改变游戏规则的 Web 开发工具可在 4 年内增强您的工作流程

    作为网络开发人员,我们一直在寻找可以让我们的生活更轻松、让我们的代码更好的工具。让我们深入了解彻底改变我的开发工作流程的 10 个令人惊叹的工具! 1.WhatFont:你的字体侦探 什么字体 曾经偶然发现一个字体华丽的网站并想知道,“那是什么字体?” WhatFont 来解开这个谜团。 主要特点:…

    2025年12月19日 好文分享
    000
  • Web 标准和最佳实践的重要性:为什么在 JavaScript 中重新发明轮子通常会导致更糟糕的解决方案

    介绍 在不断发展的 Web 开发世界中,很容易被最新的框架、库和工具所吸引。开发人员经常发现自己很想创建自定义解决方案,相信他们独特的方法可能会提供更好或更创新的东西。然而,这种方法可能是一把双刃剑。忽略既定的 Web 标准和最佳实践可能会导致可访问性、性能和可维护性方面的问题。 本文探讨了为什么无…

    2025年12月19日
    000
  • 探索高级 React:释放 Nextjs 的力量

    在不断发展的网络开发世界中,保持领先地位至关重要。 next.js 是一个强大的 react 框架,它彻底改变了我们构建现代 web 应用程序的方式。让我们通过实际示例深入探讨 next.js 的特殊之处以及它如何增强您的开发过程。 什么是 next.js? next.js 是 vercel 开发的…

    2025年12月19日
    000
  • 需要帮助!

    嗨,我需要精通网络抓取的人的帮助,因为我是编程新手。我的任务是从工作链接中提取“关于客户”部分。我的脚本仅提取一个“关于客户端”,但对于其他链接,它不会执行此操作并引发错误。问题是有一个 xml 文件链接,我从中提取作业链接,当这些链接打开时,html 代码位于我使用 selenium 的 java…

    2025年12月19日
    000
  • 自行开发构建 Web UI:部分了解 HTML

    网络开发是当今最受欢迎的技能之一。它涉及创建可通过浏览器访问的用户友好且引人入胜的网站。成为 web 开发人员的第一步是了解 html。 html(超文本标记语言)是任何网页的支柱。它是用于构建网页的标准语言,决定内容在浏览器中的显示方式。虽然页面的外观由css(层叠样式表)决定,其功能由js(ja…

    2025年12月19日
    000
  • 比较经典流行的 React 前端库

    虽然新的前端技术每天都在出现,但有必要重新审视一些经典的前端库,了解它们的优点和缺点。这些库为网络行业设定了标准,并且至今仍被广泛使用。以下顺序并不代表优劣,只是随机的。 1.引导5 Bootstrap 是一个全面的前端工具包,提供可定制的 SASS 和预构建组件。 优点 易于使用:易于集成和维护。…

    2025年12月19日
    000
  • 实现双向链表

    假设理解 big o 表示法。 javascript 中有示例。资料参考 gayle laakmann mcdowell 的《cracking the coding interview》 理解双向链表 双向链表与单链表非常相似,除了节点的结构和添加/删除节点的方式不同。 节点结构 双向链表中的节点包…

    2025年12月19日
    000
  • 浏览器js脚本如何运行 js脚本怎么在浏览器中运行步骤

    在现代浏览器中运行 JavaScript 脚本:在 HTML 文档中通过 标签或引用外部脚本文件来包含 JavaScript 代码。浏览器会在页面加载时自动执行包含的脚本,对于外部脚本,将在脚本文件加载后进行。浏览器会解析和执行脚本中的语句,允许脚本操纵 HTML、CSS、DOM 和与用户交互。 浏…

    2025年12月19日
    000
  • 从基础开始:我对 HTML、CSS 和 JavaScript 的早期想法

    当我第一次开始学习 Web 开发时,我从 HTML、CSS 开始,然后才转向 JavaScript。经过几周的 Js 学习后,我写下了我对 HTML、CSS 和 JavaScript 这三者的想法。回想起来,看到我的理解是如何演变的很有趣。 HTML我实际上认为 HTML 用于主页。对我来说,它就是…

    2025年12月19日
    000
  • 代码之日:探索 JavaScript&#s consolelog()

    2024 年 8 月 11 日星期日 今天,我深入研究了 JavaScript console.log() 方法,这标志着我 Codecademy 开发之旅的另一个里程碑。到目前为止,我已经在现代 HTML 和 CSS 方面打下了坚实的基础,这对于 Web 开发至关重要。然而,为了创造真正的交互式在…

    2025年12月19日
    000
  • Web 开发的未来:每个开发人员都应该了解的新兴趋势和技术

    简介 Web 开发从早期的静态 HTML 页面和简单的 CSS 设计已经走过了漫长的道路。多年来,在技术进步和用户对更具动态性、交互性和响应性的网站不断增长的需求的推动下,该领域发展迅速。随着互联网成为日常生活中不可或缺的一部分,网络开发人员必须不断适应新趋势和技术,以保持相关性并提供卓越的用户体验…

    2025年12月19日
    000
  • Apple Notes 是我的 CMS

    介绍 您可能已经了解过这个表情包以及 apple notes 的优越性。那么,如果您可以将其用作 cms 来管理博客内容呢?这就是我想在我的“今天我学到了”网站上尝试的。这是最终结果 https://til.julienc.me 查询苹果笔记 我们需要一种从 apple notes 中获取笔记的方法…

    2025年12月19日 好文分享
    000
  • 像专业人士一样调试 JavaScript 代码

    调试是软件开发过程的重要组成部分,因为它允许开发人员识别、理解和修复代码中的错误和意外行为,确保软件正确高效地运行。掌握它可以显着提高您的工作效率和代码质量。这是一个深入的指南,可以帮助您像专业人士一样调试 javascript 代码: 1.控制台日志 console.log(): 最基本的调试形式…

    2025年12月19日 好文分享
    000
  • 通过“项目:实时句子搜索”课程释放您对 Vuejs 的掌握

    踏上激动人心的旅程,创建一个迷人的 web 应用程序,使用户能够实时搜索和显示文献中的美丽句子。这门综合课程“项目:使用 vue.js 进行实时句子搜索”由著名的 labex 平台提供,为您提供成为熟练的 vue.js 开发人员所需的技能。 深入项目 在这个基于项目的课程中,您将深入了解 Vue.j…

    2025年12月19日
    000
  • Day / Days of Code:拥抱 JavaScript 的优雅

    2024 年 8 月 12 日星期一 编程和使用语言来创建可以递归地用于创建更多工具的工具,这本身就是一种满足感。虽然编写 HTML 和 CSS 代码确实是编程,因为它允许您构建文本并设置文本样式,但它并没有给我带来同样程度的满足感。我的 C++ 背景让我对使用变量和表达式产生了根深蒂固的热爱。 J…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信