如何使用单个数组实现三个堆栈

2023-11-22

我在一个面试网站上遇到了这个问题。该问题要求在单个数组中有效地实现三个堆栈,以便在整个数组空间中没有剩余空间之前堆栈不会溢出。

对于在数组中实现 2 个堆栈,这是非常明显的:第一个堆栈从左到右增长,第二个堆栈从右到左增长;当 stackTopIndex 交叉时,表示溢出。

预先感谢您富有洞察力的回答。


您可以使用以下命令实现三个堆栈链表:

  • 您需要一个指向下一个空闲元素的指针。另外三个指针返回每个堆栈的最后一个元素(如果堆栈为空,则返回 null)。
  • 当堆栈添加另一个元素时,它必须使用第一个空闲元素并将空闲指针设置为下一个空闲元素(否则将引发溢出错误)。它自己的指针必须指向新元素,从那里回到堆栈中的下一个元素。
  • 当堆栈删除一个元素时,它会将其放回空闲元素列表中。堆栈本身的指针将被重定向到堆栈中的下一个元素。

A 链表可以在数组中实现。

这(空间)效率如何?
对于每个列表元素(值+指针)使用数组的两个单元来构建链表是没有问题的。根据规范,您甚至可以将指针和值放入一个数组元素中(例如,数组很长,值和指针只是 int)。
将其与以下解决方案进行比较克吉安纳卡基斯...您损失高达 50%(仅在最坏的情况下)。但我认为我的解决方案更干净一些(也许更干净)academic,这对于面试问题来说应该不是什么缺点^^)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用单个数组实现三个堆栈 的相关文章

  • 如何通用地减少子集平均值的计算?

    Edit 由于似乎没有人阅读此链接的原始问题 因此让我在这里介绍一下它的概要 正如其他人所问的 最初的问题是 给定大量值 总和将超过数据类型的值Double那么如何计算这些值的平均值呢 有几个答案说要按集合计算 比如取50个和50个数字 计
  • 节点*链表中的下一个

    我是数据结构和算法的新手 我遇到了以下代码 typedef struct node int data node next 谁能告诉我为什么我们要声明节点 next next 不能声明为 int next 吗 因为你希望能够做到n gt ne
  • “单词的正则表达式”(语义替换)-任何示例语法和库吗?

    我正在寻找在给定过程语言的情况下对单词而不是字符进行正则表达式样式转换的常用技术的语法示例 例如 为了追踪复制 人们可能想要创建一份具有相似含义但具有不同单词选择的文档 我希望能够简洁地定义这些可以应用于文本流的可能的转换 例如 快速地no
  • 多 AVL 树旋转

    假设我有一个无序集合 s 3 6 5 1 2 4 并且我需要构造一个 AVL 树 就这么多了 我了解基本的旋转 我在这里达到这一点 5 2 6 1 3 但当我尝试插入 4 时 一切都崩溃了 我得到的最终答案是 左边的 4 But the a
  • 如何为抽象工厂创建的类设置特定属性?

    是否可以让具体工厂使用抽象工厂模式为其创建具有特定类型参数的具体类 或者由各自的具体工厂创建的不同具体类是否需要具有相同的字段 例如 在下图中 您将如何使用客户端 应用程序 给出的不同参数集来实例化 WinButton 和 OSXButto
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • 验证假名输入

    我正在开发一个允许用户输入日语字符的应用程序 我试图想出一种方法来确定用户的输入是否是日语假名 平假名 片假名或汉字 应用程序中的某些字段不适合输入拉丁文文本 我需要一种方法将某些字段限制为仅限汉字或仅限片假名等 该项目使用UTF 8编码
  • 生成二叉树的所有从根到叶的分支

    抱歉 如果这是一个常见问题 但我还没有找到适合我的特定问题的答案 我正在尝试实施一个walk方法将二叉树从根节点遍历到每个叶节点 每当到达叶节点时都会生成根到叶路径 例如 遍历表示为的二叉树 a b d c 会产生 a b c a d 我的
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 优雅降级 - 何时考虑

    在为使用 AJAX 的应用程序设计和构建 UI 时 您何时考虑优雅降级 对于禁用 JavaScript 或正在使用屏幕阅读器的用户 最后 网站的 AJAX 版本完全完成后 在每个发展阶段 I don t 还有别的事 这些日子 渐进增强 ht
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用
  • “对象之间通过传递消息进行通信”到底是如何实现的?

    在几本有关面向对象编程的介绍性文本中 我遇到过上述陈述 来自维基百科 在 OOP 中 每个对象都能够接收消息 处理数据 以及发送消息与其他对象相关 并且可以被视为具有独特角色或责任的独立 机器 该语句在代码中到底意味着什么 class A
  • 在矩阵/位图中查找质量簇

    这是此处发布的问题的延续 在 2D 位图上查找质心 https stackoverflow com questions 408358 finding the center of mass on a 2d bitmap正如给出的例子 它讨论了
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • stl 集的 C# 等效项是什么?

    我想使用 C 将一些值存储在平衡二叉搜索树中 我查看了泛型命名空间中的集合 但没有找到与 stl 集合等效的集合 我可以使用什么通用集合 我不想存储键 值对 只是值 你可以使用HashSet http msdn microsoft com
  • 用矩阵变换 3D 向量的方法

    我一直在阅读一些关于用矩阵转换 Vector3 的文章 并且正在努力深入研究数学并自己编码 而不是使用现有代码 无论出于何种原因 我的学校课程从未包含矩阵 所以我正在填补我的知识空白 值得庆幸的是 我认为我只需要一些简单的东西 背景是我正在
  • 在Python中寻找坐标系中某些点之间的最短路径

    我编写了一个代码 可以在坐标系中的特定宽度和长度范围内生成所需数量的点 它计算并列出我使用欧几里德方法生成的这些点的距离矩阵 我的代码在这里 import pandas as pd from scipy spatial import dis
  • java中的Anagram算法

    我想做字谜算法但是 这段代码不起作用 我的错在哪里 例如 des 和 sed 是字谜 但输出不是字谜 同时我必须使用字符串方法 不是数组 public static boolean isAnagram String s1 String s2
  • 如何以最小化每个分区总和的最大值的方式对整数数组进行分区?

    输入是正整数或空整数的数组 A 和另一个整数 K 我们应该将 A 划分为 K 个连续元素块 我所说的 划分 是指 A 的每个元素都属于某个块 并且 2 个不同的块不包含任何共同元素 我们将块的总和定义为该块的元素的总和 目标是在 K 个块中
  • Swift 中计算只读属性与函数

    在 Swift WWDC 简介会话中 只读属性description被证明 class Vehicle var numberOfWheels 0 var description String return numberOfWheels wh

随机推荐

  • 如何在 JavaScript 中访问 Windows 证书存储?

    我想通过 javascript 访问 Windows 证书存储 我想开发一个 Web 应用程序 并希望通过读取证书来验证登录用户 据我所知 如果不使用本机桥 例如通过一些java小程序或activeX组件的实例 则不可能从Web应用程序中实
  • 如何在 Flutter 中更改 Google 地图标记的图标大小?

    我在用google maps flutter在我的颤振应用程序中使用谷歌地图我有自定义标记图标 我加载它BitmapDescriptor fromAsset images car png 但是我在地图上的图标尺寸太大 我想将其缩小 但我找不
  • 在 Xamarin.iOS (Xamarin Monotouch) 中绘制圆圈以图形方式显示进度

    As I m very new to Xamarin World and new to its controls I would like to add Circles to Show Work Progress in my mono to
  • 无法通过 Selenium 在 python 中运行 PhantomJS

    过去三天我一直在尝试通过 selenium 运行 PhantomJS 但没有成功 到目前为止 我已经尝试通过 npm 安装 PhantomJS 从源代码构建它 通过 apt get 安装并下载预构建的可执行文件并将其放在 usr bin p
  • Django 测试套件 URL 覆盖范围

    我想确保我的 Django 测试套件涵盖了 URL 配置中列出的所有 URL 有没有办法将 URL 配置中的列表与测试套件期间访问的 URL 列表进行比较 我能够通过定义一个自定义测试套件运行程序来提出一个解决方案 该运行程序记录正在访问的
  • 从 VBA 中的完整文件名中提取路径

    我是 VBA 新手 下面是我的代码 该代码不起作用 你们中的任何一个人都可以帮忙吗 Dim nPath1 As String nPath1 Split nPath Declare path as integer Dim path As In
  • 无论如何,是否有将 VkDescriptorImageInfo 设置为 null 或有某种方式跳过使用 VkWriteDescriptorSet 而不会出现 vulkan 抱怨

    我将使用的一些网格并不总是具有 DiffuseMap 或 SpecularMap 当我尝试加载没有漫反射和镜面反射贴图的内容时 程序崩溃 因为 DiffuseMap ImageView SpecularMap ImageView 中没有任何
  • Git:如何在特定提交之前删除历史记录

    即 我有 root c1 c2 c1000 c1001 c1002 c2000 top 我想要 root c1000 c1001 c1002 c2000 top How 我想我可以通过git filter branch 但具体如何 我当然知
  • 使用 sed 将文件中的行替换为另一个文件

    我有一个非常大的制表符分隔文件 我想用另一行替换该文件中的一行 由于该行有 gt 100 列 因此简单的 sed s find replace 是不可取的 我的换行符存储在文件 newline txt 中 我如何实现 sed s find
  • 如何将两种不同的数据类型传递给AsyncTask,Android

    我有一个方法可以执行 SQLite 数据库更新并将其放入 AsyncTask 中 以使其更快 更可靠 然而 更新数据库需要两条数据 一个是 Integer 另一个是此处显示的 PrimaryKeySmallTank 类的对象 使用 Asyn
  • 在 Windows 上的 Python 中按类型删除文件

    我知道如何删除单个文件 但是我在如何删除一种类型的目录中的所有文件的实现中迷失了 假设目录是 myfolder 我想删除所有 config 文件 但不删除其他文件 我该怎么做 谢谢 Use the glob module import os
  • 强制在所有继承类中实现方法

    我有一种情况 我想强制从某个 抽象 类继承的每个类都实现一个方法 这是我通常使用 abstractmethod 实现的目标 但是 考虑到这种多重继承的情况 from abc import ABCMeta abstractmethod cla
  • Django-Rest-Framework 通过 Id 更新外键

    我正在使用 django rest framework 来构建后端 我的列表运行良好 但是 使用 django rest framework 管理屏幕 我无法仅使用外键对象的 Id 字段来创建对象 我希望我的配置不正确 但如果有必要的话 我
  • 如何在apache服务器中运行nodejs应用程序

    我想通过 apache 服务器上的子域运行我的 nodejs 应用程序 我在 cpanel 中创建了主域的子域 我的项目有超过 3 个子域 所有子域都指向不同的 Nodejs 应用程序 子域将我重定向到正确的文件夹中 但是当我通过浏览器中的
  • ggplot 图例:键相对于标签的位置

    我正在使用 ggplot 制作一个图表 其中图例水平位于图上方 我的变量有多个图例 即颜色 形状 线型 theme legend position top legend direction horizontal legend box hor
  • 如何在backbone.js应用程序中保持干净的浏览器历史记录?

    我的backbone js有三个视图 类别列表 类别中的项目列表 个别项目表格 我正在使用backbone js 路由器在这些视图之间导航 应用程序中的用户流程为 12 23 和 3 gt 1 用户可以使用浏览器后退和前进按钮来回导航 这是
  • 进程被杀死后如何查看堆栈跟踪?

    我正在使用 gdb 命令 attach 来调试进程 但在进程崩溃 sigkill 之后 我看不到堆栈跟踪 gdb 中的 bt 命令 gdb BT 没有堆栈 进程被杀死后如何查看堆栈跟踪 通过确保将您的 shell 设置为转储核心ulimit
  • 切换到GLSL 300时,遇到以下错误

    当我切换到使用 OpenGL ES 3 和 GLSL 300 时 我在碎片着色器中遇到以下错误 未声明的标识符 gl FragColor 当使用 GLSL 100 时 一切都很好 现代版本的 GLSL 只需将片段着色器声明为out价值观 以
  • 如何将单元测试改造到代码库中?

    您是否有任何策略可以将单元测试改造到当前没有单元测试的代码库上 Read 有效地处理 Feathers 的遗留代码 吉米 博加德有一个关于 SOC 的好博客系列
  • 如何使用单个数组实现三个堆栈

    我在一个面试网站上遇到了这个问题 该问题要求在单个数组中有效地实现三个堆栈 以便在整个数组空间中没有剩余空间之前堆栈不会溢出 对于在数组中实现 2 个堆栈 这是非常明显的 第一个堆栈从左到右增长 第二个堆栈从右到左增长 当 stackTop