我的教授是否要求我绘制堆栈?他是否希望我在行动中绘制?我觉得很愚蠢,但不像有人告诉我的那样!谢谢你的帮助。
哇,你们这些人很快。谢谢你。完整的问题是:考虑两个堆栈,每个堆栈的大小为n(即,每个堆栈最多可以容纳n个元素)。如果两个堆栈中的元素数量之和为n,则任何额外的PUSH操作都应导致溢出错误。 (注意:您的实现应该注意元素的事实 POP应该与它们被推动的顺序相反)。***我不是要求答案我只是想知道......你认为他要我怎么做?因为他仍然没有回复我的电子邮件,我需要在午夜之前完成。
答案 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
变量stack1
,stack2
,stack1sz
,stack2sz
和maxsz
应该以在函数调用之间存活的方式声明(即,不是当地人)。所有其他都是暂时的。
如果您在将其转换为特定语言时遇到问题,请发表评论,我会提供有关要查找内容的指示。
答案 1 :(得分:1)
鉴于你教授的描述,他几乎肯定会要求你手工编写一个堆栈。
也就是说,编写(代码)你的Stack Abstract Data Type,它的相关操作 - 推送和弹出,至少和某种驱动程序来测试你的堆栈是否按预期工作并遵循规范(溢出错误)等等。)
你对堆栈有什么了解吗?你有没有参加过堆叠的讲座/实验室?您的教科书或喜爱的网站对他们的评价是什么?
至于在午夜之前完成这项任务,我当然会尽我所能手工编写一个堆栈并绘制每一步所发生的事情(可能作为单独的文件,或者如果这是电子提交,则嵌入评论中) 。你可能不会得到一个很好的标记,因为你似乎不知道该怎么做,但你会有希望学到一些东西,并表明你在这项任务中付出了一些努力。