我有一个抽象数据类型,可以将其视为从左到右存储的列表,具有以下可能的操作:
推送:将新项目添加到列表的左端
Pop:删除列表左端的项目
Pull:删除列表右端的项目
使用三个堆栈和恒定的附加内存来实现此目的,以便任何推入、弹出或拉出操作的摊销时间都是恒定的。堆栈具有基本操作:isEmpty、Push 和 Pop。
摊销时间意味着“如果我花费了这么多时间,我可以花费另一块时间并将其存储在时间银行中以供以后使用”。就像每个推送操作一样,花费三个恒定时间块,因此对于每个推送的元素,您都有 2 个额外的恒定时间块。
做出一些假设:
- 这是家庭作业
- 这一段是作业的一部分
使用三个堆栈来实现这一点
恒定的附加内存,以便
任何推送、弹出的摊销时间,
或拉操作是恒定的。这
栈有基本操作,isEmpty,
推和弹出。
那么我的第一个建议就是忽略那些与你谈论链表的人。确实,任何有理智的人都会这样做没有三个堆栈的要求,但家庭作业的关键因素不是按照一个理性的人会做的方式去做,而是你的老师希望你如何做。
我的第二个建议是准备一些积木、一副纸牌或一堆聚苯乙烯泡沫塑料杯,并指定三堆(例如杯垫或其他东西)。开始尝试一下将一个堆栈的内容转移到另一个堆栈时会发生什么,这应该会给您一个想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)