【问题标题】:What does it mean to actually "Implement a stack"?实际“实施堆栈”是什么意思?
【发布时间】:2010-07-12 02:39:12
【问题描述】:

我的教授是否要我绘制堆栈?他想让我把它画在行动中吗?我觉得自己很愚蠢,但这不像任何人告诉我的那样!感谢您的帮助。

哇,你们真快。已经谢谢你了。完整的问题是:考虑两个堆栈,每个堆栈大小为 n(即,每个堆栈最多可以容纳 n 个元素)。如果两个堆栈中的元素个数之和为 n,那么任何额外的 PUSH 操作都会导致溢出错误。 (注意:您的实现应该注意元素 POP 应该与它们被推送的顺序相反)。

***我不是在问答案我只是想知道......你认为他要我做什么?因为他还没有回复我的电子邮件,我需要在午夜之前完成。

【问题讨论】:

  • 请发布整个问题
  • “实施”几乎总是意味着“编写代码”。也就是说,如果您想知道教授要求您做什么,您需要询问您的教授。
  • 您能否提供更多背景信息?你的教授要求你实现什么样的堆栈?他到底是什么教授?有问题的课程是什么?
  • 实现堆栈通常意味着实现(编码)以下功能:创建堆栈、将条目压入堆栈、从堆栈弹出条目等。Google 教授(或者最好是 James已经说过,你的教授)会告诉你更多!
  • 通常意味着实现一个带有 push() 和 pop() 的 API,它接受某种类型的数据,比如整数。向教授、助教或同学要求更清楚。

标签: stack implementation


【解决方案1】:

“实现”通常意味着编写,纯粹和简单。您的教育工作者希望您编写能够按照作业要求编写的代码。

固定大小的堆栈 (n) 可以很容易地实现为具有当前堆栈深度的数组,但是您的分配有一个额外的扭曲,因为您只允许在 上有 n 元素两个 堆栈合并而不是每个 堆栈。

我将按如下方式实现它(仅使用伪代码,因为它是家庭作业,而且无论如何,您还没有指定语言):

# Create the two stacks, each of size sz.
init_stack (sz):
    allocate stack1 as array[1 to sz] of integer
    allocate stack2 as array[1 to sz] of integer
    set stack1sz to 0
    set stack2sz to 0
    set maxsz to sz

 

# Push the value val onto stack stk.
push_stack (stk,val):
    if stk is not equal to 1 or 2:
        return error
    if stack1sz + stack2sz is equal to maxsz:
        return error
    if stk is 1:
        add 1 to stack1sz
        set element stack1sz of stack1 to val
    else:
        add 1 to stack2sz
        set element stack2sz of stack2 to val

 

# Pop a value off stack stk.
pop_statkck (stk):
    if s is not equal to 1 or 2:
        return error
    if stk is 1:
        if stack1sz is 0:
            return error
        set val to element stack1sz of stack1
        subtract 1 from stack1sz
    else:
        if stack2sz is 0:
            return error
        set val to element stack2sz of stack2
        subtract 1 from stack2sz
    return val

变量stack1stack2stack1szstack2szmaxsz 的声明方式应使其在函数调用之间仍然存在(即,不是本地变量)。其他都是暂时的。

如果您在将其转换为特定语言时遇到问题,请发表评论,我会提供有关查找内容的指示。

【讨论】:

  • 其实我已经工作了一整天了。虽然我尽力用教科书而不是互联网来解决这个问题。所以请不要说我一整天都在喝酒来贬低我。这有点粗鲁。
  • 它帮助我理解了这一切
  • @luron,我并没有针对你发表评论,更多的是对我自己的自嘲幽默。对不起,如果我造成了冒犯,那不是我的意图。我会摆脱它。很高兴我能提供帮助,请随时提出您喜欢的任何其他问题。
  • 没关系。对不起,我把糟糕的一天都找你了 :)
【解决方案2】:

根据你教授的描述,他几乎可以肯定是要你手写一堆。

也就是说,编写(编码)您的堆栈抽象数据类型、其相关操作 - 至少推送和弹出,以及某种驱动程序来测试您的堆栈是否按预期工作并遵循规范(溢出错误等等)。

你知道堆栈吗?如果有的话,你有没有参加过关于堆栈的讲座/实验室?您的教科书或最喜欢的网站对它们有何评价?

至于在午夜前完成这项任务,我当然会尽我最大的努力手写一个堆栈并绘制每个步骤发生的情况(可能作为单独的文档,或者如果这是电子提交,则嵌入在 cmets 中) .你可能不会得到很好的分数,因为你似乎不知道该做什么,但你会希望学到一些东西,并表明你在这项作业中付出了一些努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2018-11-19
    • 2020-02-15
    • 2011-05-09
    相关资源
    最近更新 更多