实际“实现堆栈”意味着什么?

时间:2010-07-12 02:39:13

标签: stack implementation

我的教授是否要求我绘制堆栈?他是否希望我在行动中绘制?我觉得很愚蠢,但不像有人告诉我的那样!谢谢你的帮助。

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

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

2 个答案:

答案 0 :(得分:2)

“实施”通常意味着写作,纯粹和简单。您的教育工作者希望您编写可以执行任务所代表的代码。

固定大小的堆栈(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应该以在函数调用之间存活的方式声明(即,不是当地人)。所有其他都是暂时的。

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

答案 1 :(得分:1)

鉴于你教授的描述,他几乎肯定会要求你手工编写一个堆栈。

也就是说,编写(代码)你的Stack Abstract Data Type,它的相关操作 - 推送和弹出,至少和某种驱动程序来测试你的堆栈是否按预期工作并遵循规范(溢出错误)等等。)

你对堆栈有什么了解吗?你有没有参加过堆叠的讲座/实验室?您的教科书或喜爱的网站对他们的评价是什么?

至于在午夜之前完成这项任务,我当然会尽我所能手工编写一个堆栈并绘制每一步所发生的事情(可能作为单独的文件,或者如果这是电子提交,则嵌入评论中) 。你可能不会得到一个很好的标记,因为你似乎不知道该怎么做,但你会有希望学到一些东西,并表明你在这项任务中付出了一些努力。