huyanmin 发表于 2021-10-11 15:55:30

请教各位老师一道关于栈的一道题。求详解

设栈的存储空间为S(1:50),初始状态为top=51.现经过一系列正常的入栈与退栈操作后,top=20,则栈中的元素个数为( )?

傻眼貓咪 发表于 2021-10-11 16:22:04

31

huyanmin 发表于 2021-10-12 08:30:44

傻眼貓咪 发表于 2021-10-11 16:22
31

不明白,我需要详解,我很笨啊

傻眼貓咪 发表于 2021-10-12 09:19:21

栈的初始状态top=51,故本栈是51在栈底,入栈时栈顶指针是减操作(top=top-1),退栈时栈顶指针是加操作(top=top+1)。当top=20时,元素存储在(20:50)空间中,因此共有50-20+1=31个元素。

傻眼貓咪 发表于 2021-10-12 09:24:42

把栈想象成水坝,51尺为最深度(越深数字越大,越浅数字越小),当水坝空时,水位当然就是最低的51尺,试问如果水位在20尺时,水的高度是多少?

huyanmin 发表于 2021-10-12 12:52:38

傻眼貓咪 发表于 2021-10-12 09:19
栈的初始状态top=51,故本栈是51在栈底,入栈时栈顶指针是减操作(top=top-1),退栈时栈顶指针是加操作(top= ...

top指针不是指向低地址处吗?入栈应该是加啊

傻眼貓咪 发表于 2021-10-12 12:57:39

本帖最后由 傻眼貓咪 于 2021-10-12 13:03 编辑

huyanmin 发表于 2021-10-12 12:52
top指针不是指向低地址处吗?入栈应该是加啊

1.进栈(PUSH)
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2.出栈(POP)
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。

huyanmin 发表于 2021-10-12 17:28:18

本帖最后由 huyanmin 于 2021-10-12 17:31 编辑

傻眼貓咪 发表于 2021-10-12 12:57
1.进栈(PUSH)
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出; ...

还是不明白,这道题能够画图讲解吗?我还没有入门。再有,本题栈的存储空间为S(1:50),初始状态为top=51.岂不是溢出了

傻眼貓咪 发表于 2021-10-12 18:43:10

可能我解说不是很清楚,网络爬文应该比我清楚

huyanmin 发表于 2021-10-12 20:19:23

傻眼貓咪 发表于 2021-10-12 18:43
可能我解说不是很清楚,网络爬文应该比我清楚

还是不明白,我的脑袋不开窍了

傻眼貓咪 发表于 2021-10-12 20:30:11

huyanmin 发表于 2021-10-12 20:19
还是不明白,我的脑袋不开窍了

抱歉,可能我解说不完善吧,不过你这题网络很多人解说,说不定有你明白的
页: [1]
查看完整版本: 请教各位老师一道关于栈的一道题。求详解