4

我有一个抽象数据类型,可以看作是从左到右存储的列表,有以下可能的操作: Push:向列表左端添加一个新项目 Pop:删除列表左端的项目 Pull :删除列表右端的项目

使用三个堆栈和恒定的附加内存来实现这一点,以便任何推送、弹出或拉取操作的摊销时间都是恒定的。堆栈具有基本操作,isEmpty、Push 和 Pop。

摊销时间的意思是“如果我花这么多时间,我可以再花一部分时间,并将其存储在时间银行中以备后用。” 就像每次推送操作一样,花费三个常量时间块,所以对于每个推送的元素,你有 2 个额外的常量时间块。

4

4 回答 4

10

做几个假设:

  1. 这是作业
  2. 这一段是作业的一部分

使用三个堆栈和恒定的附加内存来实现这一点,以便任何推送、弹出或拉取操作的摊销时间都是恒定的。堆栈具有基本操作,isEmpty、Push 和 Pop。

那么我的第一个建议是忽略那些与你谈论链表的人。诚然,这就是任何理性的人在没有三栈要求的情况下实施它的方式,但家庭作业的关键因素不是按照理性人的方式去做,而是你的导师希望你如何去做。

我的第二条建议是准备一些积木、一副纸牌或一堆泡沫塑料杯,并指定三叠(例如杯垫或其他东西)。开始尝试将一个堆栈的内容转移到另一个堆栈时会发生什么,这应该会给你一个想法。

于 2009-03-09T01:44:35.623 回答
3

你可以做一些只使用 3 个堆栈的事情。想想河内的塔

于 2009-03-09T01:41:54.850 回答
2

使用双向链表并保持指向头部和尾部的指针。其余的,您需要先编写自己的代码,然后让我们帮助您更正它。

于 2009-03-09T01:30:50.867 回答
0

首先根据两个堆栈(一个非常标准的问题)实现一个队列并进行概括。

于 2009-03-09T21:54:19.163 回答