Questions tagged «stacks»

1
是否有支持这些字符串操作的“字符串堆栈”数据结构?
我正在寻找一种数据结构,该结构可在字符集上存储一组字符串,该字符集能够执行以下操作。我们将为存储字符串集合的数据结构。D(S )SΣΣ\SigmaD(S)D(S)\mathcal{D}(S)SSS Add-Prefix-Set在:给定一组(可能为空)字符串,其大小由一个常数限制,而字符串长度由一个常数限制,则返回。这两个边界常量都是全局的:对于所有输入它们都是相同的。Ť d({ 吨小号|吨∈ Ť ,小号∈ 小号} )ŤD(S)D(S)\mathcal{D}(S)TTTD({ts | t∈T,s∈S})D({ts | t∈T,s∈S})\mathcal{D}( \{ t s\ |\ t \in T, s \in S\} )TTT Get-Prefixes在:返回。请注意,只要我可以在时间内枚举其内容,我就不介意此集合使用什么结构。{ a | 一个小号∈ 小号,一个∈ Σ } Ö (|Σ |)D(S)D(S)\mathcal{D}(S){a | as∈S,a∈Σ}{a | as∈S,a∈Σ}\{ a \ | \ as \in S, a \in \Sigma \}O(|Σ|)O(|Σ|)O(|\Sigma|) Remove-Prefixes在D(S)D(S)\mathcal{D}(S):返回D({s …


6
如何在一个数组中实现两个堆栈?
我首先要说这不是一个作业问题。我正在阅读算法简介-著名的CLRS文字,以成为更好的程序员。我正在尝试解决本书中自己提出的问题和练习。 我试图解决锻炼; Tibial 10.1-2从第10章基本数据结构从CLRS第二版。其状态如下: 说明如何在一个数组A [1..n]中实现两个堆栈,除非两个堆栈中的元素总数为n,否则两个堆栈都不会溢出。PUSH和POP操作应在O(1)时间中运行。 到目前为止,我想出的解决方案是: 让数组A [1..n]实现两个堆栈:S1 [1..i]和S2 [i..n]。 对于PUSH-S1和PUSH-S2操作,如果堆栈“已满”,则开始将元素推入另一个堆栈(例如,当尝试将新元素推入时,如果堆栈S1已满,则将该元素推入堆栈S2,反之亦然)。 这种方法的问题是我将无法可靠地进行POP-S1或POP-S2,因为无法“记住”哪个元素属于哪个堆栈。如果堆栈的元素是(键,值)对,键是堆栈号,那么要弹出一个元素,在最坏的情况下,我必须搜索i或(ni)次-这将是O(n )(如果我在这里错了,请随时纠正我),它不是O(1)。 我已经在这个问题上花了很长时间了。我在正确的轨道上吗?有人可以给我解决该问题的可能指示吗? 通常,我应该如何“思考”这些问题?还是只有真正有才智的人才能解决这类问题?解决/解决此类问题(例如获得经验)是否可以帮助我变得更好? 我在等待启蒙。

2
基于堆栈的编程语言是否可以并发?
我一直在阅读有关基于堆栈的编程语言(例如FORTH和Cat),并且看来,鉴于它们的性质,无论它们的范例如何,它们一次只能执行一个动作(FORTH是必不可少的,而Cat是功能性的)。 命令式语言将修改堆栈,而纯功能性语言(如Joy)将返回新堆栈,但要点是一次只能使用一个堆栈。 那么,基于堆栈的编程语言可以并发吗?他们可以通过同时使用多个堆栈或类似方式来实现并发吗? 是否可以在基于堆栈的编程语言中实现惰性评估? 如果我对上述语言和概念有误解,请纠正我
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.