他们说,从我读过的所有资料来看,偷看和流行之间的区别在于偷看并没有消除最高价值.在我的讲义中提供的例子中,显然他们使用不同的减法方法做同样的事情.两个操作后顶部减去1.
我对吗?可能不是,有人可以解释这些有何不同?
int pop(void)
{
assert(top>0);
return data[--top];
}
int peek(void)
{
assert(top>0);
return data[top-1];
}
Run Code Online (Sandbox Code Playgroud)
top
是堆栈的状态变量,存储在常规数组中.该变量top
通过存储数组索引来引用堆栈的顶部.
第一个操作,pop
使用递减运算符来更改变量top
,因此堆栈的状态--top
相当于top = top - 1
.该值仍然在数组中,但由于变量top
现在引用了不同的索引,因此有效地删除了该值:堆栈的顶部现在是另一个元素.现在,如果你调用a push
,这个弹出的值将被覆盖.
第二个操作不会更改变量的值top
,它只使用它来返回堆栈顶部的值.该变量top
仍然引用与堆栈顶部相同的值,因此堆栈保持不变.
它们将返回相同的值,但只有 pop 更改顶部:
--top
Run Code Online (Sandbox Code Playgroud)
这相当于
top = top -1
Run Code Online (Sandbox Code Playgroud)
其中 top - 1 不会改变 top 的值。
在一般的编程术语中,“弹出”是指从堆栈中返回一个对象,同时将其从堆栈中移除的方法。术语“窥视”更通用,可用于其他数据容器/ADT,而不是堆栈。“偷看”总是意味着“给我下一个项目,但不要将它从容器中取出”。
“peek”最常与类似队列的数据容器一起使用,例如用于检查 Windows 消息队列中下一条消息的 Windows API 函数名为 PeekMessage()。
归档时间: |
|
查看次数: |
15074 次 |
最近记录: |